opensrs-client-3.0.0/0000755017777601777760000000000010770014366015544 5ustar nobodynogroup00000000000000opensrs-client-3.0.0/diffs/0000755017777601777760000000000010770014370016632 5ustar nobodynogroup00000000000000opensrs-client-3.0.0/diffs/opensrs-client_2.9.8to3.0.0.patch0000644017777601777760000016335010770014364024313 0ustar nobodynogroup00000000000000diff -r -c opensrs-client-2.9.8/ChangeLog opensrs-client-3.0.0/ChangeLog *** opensrs-client-2.9.8/ChangeLog Wed Jul 25 15:55:37 2007 --- opensrs-client-3.0.0/ChangeLog Tue Mar 18 14:31:14 2008 *************** *** 1,3 **** --- 1,17 ---- + 2008/02/28 v3.0.0 + - Added ability for .ASIA TLD (all configurations, scripts, and + templates) + 2007/08/21 v2.9.9 + - cgi/manage.cgi + * whois privacy is no longer a paid service + + - templates/manage/whois_privacy_form.html + * whois privacy is no longer a paid service + * typo fixed + + - templates/reg_system/reg_period_hints.html + * updated .mobi min/max registration period + 2007/05/30 v2.9.8 - lib/OpenSRS/Languamge.pm * added language codes for .org .info .biz diff -r -c opensrs-client-2.9.8/cgi/manage.cgi opensrs-client-3.0.0/cgi/manage.cgi *** opensrs-client-2.9.8/cgi/manage.cgi Wed Jul 25 12:56:59 2007 --- opensrs-client-3.0.0/cgi/manage.cgi Tue Mar 18 14:31:14 2008 *************** *** 63,68 **** --- 63,70 ---- use OpenSRS::Util::America qw(build_app_purpose_list); use OpenSRS::Util::Common qw(make_navbar locale_build_country_list build_select_menu); use OpenSRS::Util::Europe qw(build_eu_countries_list build_eu_languages_list build_be_languages_list); + use OpenSRS::Util::Asia qw(build_ced_locality_select_list build_ced_entity_type_select_list + build_ced_contact_type_select_list build_ced_identification_type_select_list); # initialize global defines $cgi = $ENV{SCRIPT_NAME}; *************** *** 962,967 **** --- 964,988 ---- escape_hash_values( $rsp_nexus_info ); } + my $rsp_ced_info; + if ($capabilities->{ced_info}) { + my $xcp_ced_info = { + action => "get", + object => "domain", + cookie => $cookie, + attributes => { + type => "ced_info", + } + }; + $rsp_ced_info = $XML_Client->send_cmd( $xcp_ced_info ); + if (not $rsp_ced_info->{is_success}) { + $error = "Failed attempt: $rsp_ced_info->{response_text}
\n"; + error_out($error); + exit; + } + escape_hash_values( $rsp_ced_info ); + } + my $rsp_trademark; if ($capabilities->{trademark}) { my $xcp_trademark = { *************** *** 1033,1039 **** $HTML{old_nexus_validator} =~ tr/a-z/A-Z/; $HTML{"category_" . $HTML{old_nexus_category}} = "checked"; } ! if ($HTML{forwarding_email}) { $HTML{text_comment} = '!-- '; $HTML{text_comment_close} = ' --'; --- 1054,1072 ---- $HTML{old_nexus_validator} =~ tr/a-z/A-Z/; $HTML{"category_" . $HTML{old_nexus_category}} = "checked"; } ! ! if ($rsp_ced_info) { ! $HTML{old_contact_type} = $rsp_ced_info->{attributes}->{ced_info}->{contact_type}; ! $HTML{old_locality_country} = $rsp_ced_info->{attributes}->{ced_info}->{locality_country}; ! $HTML{old_locality_city} = $rsp_ced_info->{attributes}->{ced_info}->{locality_city}; ! $HTML{old_locality_state_prov} = $rsp_ced_info->{attributes}->{ced_info}->{locality_state_prov}; ! $HTML{old_legal_entity_type} = $rsp_ced_info->{attributes}->{ced_info}->{legal_entity_type}; ! $HTML{old_legal_entity_type_info} = $rsp_ced_info->{attributes}->{ced_info}->{legal_entity_type_info}; ! $HTML{old_id_type} = $rsp_ced_info->{attributes}->{ced_info}->{id_type}; ! $HTML{old_id_type_info} = $rsp_ced_info->{attributes}->{ced_info}->{id_type_info}; ! $HTML{old_id_number} = $rsp_ced_info->{attributes}->{ced_info}->{id_number}; ! } ! if ($HTML{forwarding_email}) { $HTML{text_comment} = '!-- '; $HTML{text_comment_close} = ' --'; *************** *** 1106,1111 **** --- 1139,1153 ---- $HTML{us_nexus_form} = get_content("$path_templates/us_nexus_form.html", \%HTML); } + # include ced data form in the main html page if it is capable for .asia ced data modification + if ($rsp_ced_info) { + $HTML{contact_type_menu} = build_ced_contact_type_select_list($HTML{old_contact_type}); + $HTML{locality_country_menu} = build_ced_locality_select_list($HTML{old_locality_country}); + $HTML{legal_entity_type_menu} = build_ced_entity_type_select_list($HTML{old_legal_entity_type}); + $HTML{id_type_menu} = build_ced_identification_type_select_list($HTML{old_id_type}); + $HTML{asia_ced_form} = get_content("$path_templates/asia_ced_form.html", \%HTML); + } + # include domain whois_privacy form in the main html page if domain whois_privacy state is enabled or disabled if ($rsp_whois_privacy->{attributes}->{changeable}) { $HTML{whois_privacy_state} = $rsp_whois_privacy->{attributes}->{state} if ($rsp_whois_privacy); *************** *** 1115,1131 **** $HTML{wp_state_change_to} = 'Disable'; $HTML{whois_privacy_radio_button}=' '; - $HTML{whois_privacy_refund_notice} = ' - - - Disabling the feature does not refund any fees paid for the service.
The service may be Enabled at any time.
- - '; } else { $HTML{wp_state_cur} = 'Disabled'; $HTML{wp_state_change_to} = 'Enable'; $HTML{whois_privacy_radio_button}=''; - } $HTML{whois_privacy_changes_menu} = make_whois_privacy_changes_menu(); --- 1157,1166 ---- *************** *** 1329,1334 **** --- 1364,1412 ---- } } + if ($capabilities->{ced_info}) { + my $xcp_ced_info = { + action => "modify", + object => "domain", + cookie => $cookie, + attributes => { + data => "ced_info", + ced_info => { + contact_type => $in{contact_type}, + locality_country => $in{locality_country}, + locality_city => $in{locality_city}, + locality_state_prov => $in{locality_state_prov}, + legal_entity_type => $in{legal_entity_type}, + legal_entity_type_info => $in{legal_entity_type_info}, + id_type => $in{id_type}, + id_type_info => $in{id_type_info}, + id_number => $in{id_number}, + } + } + }; + my $mod_flag = 0; + $mod_flag =1 if ($in{contact_type} ne $in{old_contact_type}); + $mod_flag =1 if ($in{locality_country} ne $in{old_locality_country}); + $mod_flag =1 if ($in{locality_city} ne $in{old_locality_city}); + $mod_flag =1 if ($in{locality_state_prov} ne $in{old_locality_state_prov}); + $mod_flag =1 if ($in{legal_entity_type} ne $in{old_legal_entity_type}); + $mod_flag =1 if ($in{legal_entity_type_info} ne $in{old_legal_entity_type_info}); + $mod_flag =1 if ($in{id_type} ne $in{old_id_type}); + $mod_flag =1 if ($in{id_type_info} ne $in{old_id_type_info}); + $mod_flag =1 if ($in{id_number} ne $in{old_id_number}); + + if ($mod_flag) { + $do_flag = 1; + my $rsp_ced_info = $XML_Client->send_cmd( $xcp_ced_info ); + if (not $rsp_ced_info->{is_success}) { + $resultString .= "Failed to modify CED contact info for $reg_domain : $rsp_ced_info->{response_text}
"; + } else { + $resultString .= "CED contact info modification successful for $reg_domain
"; + $ok_flag = 1; + } + } + } + if($in{flag_do_validate_domain} and $dns_errors) { $do_flag = 1; my $validate_command = { *************** *** 1593,1601 **** } sub make_de_org_change_menu { - my $html; ! $html = < Also Apply these changes to: --- 1671,1682 ---- } sub make_de_org_change_menu { ! my ($type,$html); ! ! my ($reg_domain,$f_owner,$permission,$current_type) = @_; ! my ($tld) = $reg_domain =~ /$OPENSRS{OPENSRS_TLDS_REGEX}$/; ! my $table_start = < Also Apply these changes to: *************** *** 1606,1623 **** YES NO ! All Domains ($domain_count) ! ! ! (only .de domains will be modified) ! ! + EOF + my $need_report_email = 0; + if ($reg_f_owner && ($domain_count > 1)) { + $need_report_email = 1; + $html .= < ! ! EOF ! } ! my $table_end = "
--- 1687,1721 ---- YES NO
All UNLOCKED Domains ($domain_count) ! !
\n"; ! my ($menu); + if ($html) { + $menu = < *************** *** 1631,1648 **** ! EOF - return $html; - } #generate menu for applying whois_privacy changes to all domains in the profile sub make_whois_privacy_changes_menu { ! my $html; ! $html = < Also Apply these changes to: --- 1729,1751 ---- ! !
Only $tld will be affected
EOF + } + return $menu; + } else { + return ""; + } } + #generate menu for applying whois_privacy changes to all domains in the profile sub make_whois_privacy_changes_menu { ! my ($type,$html); ! my $table_start = < Also Apply these changes to: *************** *** 1653,1667 **** YES NO ! All Domains ($domain_count) ! + EOF + my $need_report_email = 0; + if ($reg_f_owner && ($domain_count > 1)) { + $need_report_email = 1; + $html .= < ! ! EOF ! } ! my $table_end = "
--- 1756,1790 ---- YES NO
All UNLOCKED Domains ($domain_count)
\n"; ! my ($menu); ! ! if ($html) { ! $menu = < *************** *** 1675,1684 **** ! EOF - return $html; } sub make_beu_global_menu { --- 1798,1812 ---- ! !
EOF + } + return $menu; + } else { + return ""; + } } sub make_beu_global_menu { *************** *** 1704,1710 **** $need_report_email = 1; $html .= < ! All Domains ($domain_count) --- 1832,1838 ---- $need_report_email = 1; $html .= < ! All UNLOCKED Domains ($domain_count) *************** *** 1809,1815 **** $need_report_email = 1; $html .= < ! All Domains ($domain_count) --- 1937,1943 ---- $need_report_email = 1; $html .= < ! All UNLOCKED Domains ($domain_count) *************** *** 2174,2180 **** # Nominet handles glue records. modify_nameserver( $response->{ response_text } ); } else { ! modify_nameservers("Nameservers modification for $reg_domain successfully submitted to registry. Please review your changes in 15 minutes to verify that they were accepted"); } } --- 2302,2308 ---- # Nominet handles glue records. modify_nameserver( $response->{ response_text } ); } else { ! modify_nameservers("Nameservers modification for $reg_domain successfully submitted to registry."); } } diff -r -c opensrs-client-2.9.8/cgi/reg_system.cgi opensrs-client-3.0.0/cgi/reg_system.cgi *** opensrs-client-2.9.8/cgi/reg_system.cgi Wed Jul 25 12:56:59 2007 --- opensrs-client-3.0.0/cgi/reg_system.cgi Tue Mar 18 14:31:14 2008 *************** *** 50,55 **** --- 50,58 ---- use OpenSRS::Util::Common qw(send_email build_select_menu build_select_menu3 locale_build_country_list); use OpenSRS::Util::America qw(build_app_purpose_list); use OpenSRS::Util::Europe qw(build_eu_countries_list build_eu_languages_list build_be_languages_list); + use OpenSRS::Util::Asia qw(%asia_ced_locality_country %asia_ced_contact_type %asia_ced_entity_type %asia_ced_identification_type + build_ced_contact_type_select_list build_ced_locality_select_list + build_ced_entity_type_select_list build_ced_identification_type_select_list); use OpenSRS::Language qw/native_to_puny puny_to_native code2language/; # global defines *************** *** 71,76 **** --- 74,80 ---- bulk_order => undef, bulk_order_ca => undef, bulk_order_us => undef, + bulk_order_asia => undef, bulk_transfer => undef, do_bulk_transfer => undef, ); *************** *** 241,247 **** ################################### # check syntax on domains given if this is a bulk order ! my ($gtld,$ca,$uk,$us,$de,$eu,$be); my $mldn = 0; my $ascii = 0; --- 245,251 ---- ################################### # check syntax on domains given if this is a bulk order ! my ($gtld,$ca,$uk,$us,$asia,$de,$eu,$be); my $mldn = 0; my $ascii = 0; *************** *** 277,282 **** --- 281,287 ---- $ca = $ca || $punycodeObj =~ /ca$/i; $de = $de || $punycodeObj =~ /de$/i; $us = $us || $punycodeObj =~ /us$/i; + $asia = $asia || $punycodeObj =~ /asia$/i; $uk = $uk || $punycodeObj =~ /uk$/i; $eu = $eu || $punycodeObj =~ /eu$/i; $be = $be || $punycodeObj =~ /be$/i; *************** *** 338,344 **** if ( $ascii and $mldn and $in{ reg_type } eq 'transfer' ) { $error_msg = "Bulk transfer requests cannot contain both ASCII and multi-lingual domains"; } ! if ($ca and ($gtld or $uk or $us or $de)){ $error_msg = "You can't mix .ca with gTLD or .uk domains in bulk_registration"; } --- 343,349 ---- if ( $ascii and $mldn and $in{ reg_type } eq 'transfer' ) { $error_msg = "Bulk transfer requests cannot contain both ASCII and multi-lingual domains"; } ! if ($ca and ($gtld or $uk or $us or $asia or $de)){ $error_msg = "You can't mix .ca with gTLD or .uk domains in bulk_registration"; } *************** *** 346,352 **** $error_msg = "You can't mix .us with gTLD, .ca or .uk domains in bulk_registration"; } ! if ($de and ($gtld or $uk or $ca or $us)){ $error_msg = "You can't mix .de with gTLD, .ca or .uk domains in bulk_registration"; } --- 351,361 ---- $error_msg = "You can't mix .us with gTLD, .ca or .uk domains in bulk_registration"; } ! if ($asia and ($gtld or $uk or $ca or $de or $us)){ ! $error_msg = "You can't mix .asia with gTLD, .ca, .de, .us or .uk domains in bulk_registration"; ! } ! ! if ($de and ($gtld or $uk or $ca or $us or $asia)){ $error_msg = "You can't mix .de with gTLD, .ca or .uk domains in bulk_registration"; } *************** *** 373,395 **** $de = $de || $_ =~ /de$/i; $uk = $uk || $_ =~ /uk$/i; $us = $us || $_ =~ /us$/i; $eu = $eu || $_ =~ /eu$/i; $be = $be || $_ =~ /be$/i; } keys %good_domains; ! if ($eu and ($gtld or $uk or $us or $de)){ ! error_out("You can't mix .eu with gTLD, .us, or .uk domains in bulk_registration"); exit; ! }elsif ($be and ($gtld or $uk or $us or $de)){ ! error_out("You can't mix .be with gTLD, .us, or .uk domains in bulk_registration"); exit; ! } elsif ($ca and ($gtld or $uk or $us or $de)){ ! error_out("You can't mix .ca with gTLD, .us, or .uk domains in bulk_registration"); exit; } elsif ($us and ($gtld or $uk or $ca or $de)){ error_out("You can't mix .us with gTLD, .ca, or .uk domains in bulk_registration"); exit; ! } elsif ($de and ($gtld or $uk or $ca or $us)){ ! error_out("You can't mix .de with gTLD, .ca, or .uk domains in bulk_registration"); exit; } elsif ( $ca and $in{reg_type} eq 'new' ) { # for .ca domains, ensure a valid legal type was given --- 382,408 ---- $de = $de || $_ =~ /de$/i; $uk = $uk || $_ =~ /uk$/i; $us = $us || $_ =~ /us$/i; + $asia = $asia || $_ =~ /asia$/i; $eu = $eu || $_ =~ /eu$/i; $be = $be || $_ =~ /be$/i; } keys %good_domains; ! if ($eu and ($gtld or $uk or $us or $asia or $de)){ ! error_out("You can't mix .eu with gTLD, .us, .asia, or .uk domains in bulk_registration"); exit; ! }elsif ($be and ($gtld or $uk or $us or $asia or $de)){ ! error_out("You can't mix .be with gTLD, .us, .asia, or .uk domains in bulk_registration"); exit; ! } elsif ($ca and ($gtld or $uk or $us or $asia or $de)){ ! error_out("You can't mix .ca with gTLD, .us, .asia, or .uk domains in bulk_registration"); exit; } elsif ($us and ($gtld or $uk or $ca or $de)){ error_out("You can't mix .us with gTLD, .ca, or .uk domains in bulk_registration"); exit; ! } elsif ($asia and ($gtld or $uk or $ca or $de or $us)){ ! error_out("You can't mix .asia with gTLD, .ca, .us, or .uk domains in bulk_registration"); ! exit; ! } elsif ($de and ($gtld or $uk or $ca or $us or $asia)){ ! error_out("You can't mix .de with gTLD, .ca, .us, .asia, or .uk domains in bulk_registration"); exit; } elsif ( $ca and $in{reg_type} eq 'new' ) { # for .ca domains, ensure a valid legal type was given *************** *** 518,524 **** } elsif ($eu){ $custom_verify='eu'; } ! my %verify_results = $XML_Client->validate( \%HTML, custom_tech_contact => $REG_SYSTEM{custom_tech_contact}, --- 531,537 ---- } elsif ($eu){ $custom_verify='eu'; } ! my %verify_results = $XML_Client->validate( \%HTML, custom_tech_contact => $REG_SYSTEM{custom_tech_contact}, *************** *** 693,698 **** --- 706,740 ---- $HTML{SPECIAL_DOMAIN_INFO} .= '\n"; $HTML{SPECIAL_DOMAIN_INFO} .= '\n"; $HTML{SPECIAL_DOMAIN_INFO} .= '\n"; + } elsif ( $asia ) { + my $ccodes; + $formCountry = "_asia"; + + # Show the data on the page NICELY... + $HTML{ced_contact_type} = $asia_ced_contact_type{$in{ced_contact_type}}; + $HTML{ced_locality_country} = $asia_ced_locality_country{$in{ced_locality_country}}; + if($in{ced_legal_entity_type} eq 'other') { + $HTML{ced_legal_entity_type}=$in{ced_legal_entity_type_info}; + } else { + $HTML{ced_legal_entity_type}=$asia_ced_entity_type{$in{ced_legal_entity_type}}; + } + if($in{ced_id_type} eq 'other') { + $HTML{ced_id_type}=$in{ced_id_type_info}; + } else { + $HTML{ced_id_type}=$asia_ced_identification_type{$in{ced_id_type}}; + } + + # Make sure the data is passed to the next screen... + $HTML{SPECIAL_DOMAIN_INFO} .= '\n"; + $HTML{SPECIAL_DOMAIN_INFO} .= '\n"; + $HTML{SPECIAL_DOMAIN_INFO} .= '\n"; + $HTML{SPECIAL_DOMAIN_INFO} .= '\n"; + $HTML{SPECIAL_DOMAIN_INFO} .= '\n"; + $HTML{SPECIAL_DOMAIN_INFO} .= '\n"; + $HTML{SPECIAL_DOMAIN_INFO} .= '\n"; + $HTML{SPECIAL_DOMAIN_INFO} .= '\n"; + $HTML{SPECIAL_DOMAIN_INFO} .= '\n"; + } elsif ( $in{domain} =~ /name$/ && $in{email_bundle} == 1) { $formCountry = "_name"; } elsif ( $in{domain} =~ /eu$/ ) { *************** *** 813,818 **** --- 855,872 ---- } next; } + + # + # Add the CED contact info if it's defined... + # + if ( $key =~ /^ced_/ ) { + if ( defined $in{$key} ) { + my $xcp_key = $key; + $xcp_key =~ s/^ced_//; + $xcp_request->{attributes}->{tld_data}->{ced_info}->{$xcp_key} = $in{$key}; + } + next; + } if ( $key eq 'forwarding_email' ) { $xcp_request->{attributes}->{tld_data}->{forwarding_email} = $in{$key}; *************** *** 1655,1660 **** --- 1709,1720 ---- $HTML{CITIZEN_COUNTRY_LIST} = locale_build_country_list( $domain_info->{attributes}->{nexus}->{validator} ? $domain_info->{attributes}->{nexus}->{validator} : '--'); + # Build .ASIA select options list for display in HTML templates... + $HTML{CED_CONTACT_TYPE_LIST}=build_ced_contact_type_select_list($domain_info->{attributes}->{ced_info}->{contact_type}); + $HTML{CED_LOCALITY_COUNTRY_LIST}=build_ced_locality_select_list($domain_info->{attributes}->{ced_info}->{locality_country}); + $HTML{CED_LEGAL_ENTITY_TYPE_LIST}=build_ced_entity_type_select_list($domain_info->{attributes}->{ced_info}->{legal_entity_type}); + $HTML{CED_ID_TYPE_LIST}=build_ced_entity_type_select_list($domain_info->{attributes}->{ced_info}->{id_type}); + } else { # make a new profile $HTML{reg_profile} = "New"; *************** *** 1787,1792 **** --- 1847,1865 ---- $HTML{APP_PURPOSE_LIST} = build_app_purpose_list() if not exists $HTML{APP_PURPOSE_LIST}; } elsif ( ( $in{domain} && + $in{domain} =~ /\.asia/i ) || + ( $in{domain_country} && + $in{domain_country} eq 'asia' ) ) { + $domainCountry = "_asia"; + $HTML{domain_country} = $in{domain_country}; + + # Build .ASIA select options list for display in HTML templates... + $HTML{CED_CONTACT_TYPE_LIST}=build_ced_contact_type_select_list($HTML{ced_contact_type}); + $HTML{CED_LOCALITY_COUNTRY_LIST}=build_ced_locality_select_list($HTML{ced_locality_country}); + $HTML{CED_LEGAL_ENTITY_TYPE_LIST}=build_ced_entity_type_select_list($HTML{ced_legal_entity_type}); + $HTML{CED_ID_TYPE_LIST}=build_ced_identification_type_select_list($HTML{ced_id_type}); + } + elsif ( ( $in{domain} && $in{domain} =~ /\.name/i && $in{email_bundle} == 1) || ( $in{domain_country} && $in{domain_country} eq 'name' ) ) { *************** *** 1843,1849 **** WHOIS Privacy:

WHOIS Privacy is applicable for .com, .net, .org, .biz, .cc, ! .tv, and .info domains.

WHOIS Privacy expiration date remains open for a domain that is set to auto-renew.

When the domain is not set to auto renew, --- 1916,1922 ---- WHOIS Privacy:

WHOIS Privacy is applicable for .com, .net, .org, .biz, .cc, ! .tv, .info, and .asia domains.

WHOIS Privacy expiration date remains open for a domain that is set to auto-renew.

When the domain is not set to auto renew, *************** *** 2072,2077 **** --- 2145,2163 ---- print_form("$path_templates/setup_profile.html",\%HTML); } + sub bulk_order_asia { + + my %HTML = ( + CGI => $cgi, + affiliate_id => $in{affiliate_id}, + domain_country => "asia", + reg_type => 'new', + bulk_order => 1, + title => 'Batch Domain Registration', + ); + print_form("$path_templates/setup_profile.html",\%HTML); + } + sub bulk_transfer { my %HTML = ( diff -r -c opensrs-client-2.9.8/cgi/register.cgi opensrs-client-3.0.0/cgi/register.cgi *** opensrs-client-2.9.8/cgi/register.cgi Wed Jul 25 12:56:59 2007 --- opensrs-client-3.0.0/cgi/register.cgi Tue Mar 18 14:31:14 2008 *************** *** 32,38 **** # pull in conf file with defined values # XXX NOTE XXX Update this configuration file BEGIN { ! do "/OpenSRS.conf"; } use CGI ':cgi-lib'; --- 32,42 ---- # pull in conf file with defined values # XXX NOTE XXX Update this configuration file BEGIN { ! $path_to_config = ""; ! if ($ENV{OSRS_CLIENT_ETC}){ ! $path_to_config = "$ENV{OSRS_CLIENT_ETC}"; ! } ! do "$path_to_config/OpenSRS.conf"; } use CGI ':cgi-lib'; diff -r -c opensrs-client-2.9.8/etc/OpenSRS.conf opensrs-client-3.0.0/etc/OpenSRS.conf *** opensrs-client-2.9.8/etc/OpenSRS.conf Wed Jul 25 15:54:50 2007 --- opensrs-client-3.0.0/etc/OpenSRS.conf Tue Mar 18 14:31:14 2008 *************** *** 64,73 **** # regular expression that lists the domains serviced by OpenSRS # this should not include the domains that you are not # authorized to register ! OPENSRS_TLDS_REGEX => "(\.ca|\.(bc|ab|sk|mb|on|qc|nb|ns|pe|nf|nt|nu|yk)\.ca|\.com|\.net|\.org|\.me\.uk|\.net\.uk|\.ltd\.uk|\.plc\.uk|\.co\.uk|\.org\.uk|\.tv|\.vc|\.com\.vc|\.net\.vc|\.org\.vc|\.cc|\.info|\.biz|\.name|\.us|\.com\.cn|\.net\.cn|\.org\.cn|\.cn|\.de|\.ch|\.nl|\.fr|\.be|\.eu|\.mobi|\.es)", # Regex of TLDs that support domain locking. ! TLDS_SUPPORTING_LOCKING => '\.(com|net|org|info|biz|us|name|cc|vc|tv)$', # regular expression that lists the domains which OpenSRS is authoritative for. OPENSRS_AUTHORITY => "(\.com|\.net|\.org|\.tv|\.cc)", --- 64,73 ---- # regular expression that lists the domains serviced by OpenSRS # this should not include the domains that you are not # authorized to register ! OPENSRS_TLDS_REGEX => "(\.ca|\.(bc|ab|sk|mb|on|qc|nb|ns|pe|nf|nt|nu|yk)\.ca|\.com|\.net|\.org|\.me\.uk|\.net\.uk|\.ltd\.uk|\.plc\.uk|\.co\.uk|\.org\.uk|\.tv|\.vc|\.com\.vc|\.net\.vc|\.org\.vc|\.cc|\.info|\.asia|\.biz|\.name|\.us|\.com\.cn|\.net\.cn|\.org\.cn|\.cn|\.de|\.ch|\.nl|\.fr|\.be|\.eu|\.mobi|\.es)", # Regex of TLDs that support domain locking. ! TLDS_SUPPORTING_LOCKING => '\.(com|net|org|info|asia|biz|us|name|cc|vc|tv)$', # regular expression that lists the domains which OpenSRS is authoritative for. OPENSRS_AUTHORITY => "(\.com|\.net|\.org|\.tv|\.cc)", *************** *** 83,89 **** # the different TLDs have different period years restrictions lookup_all_tlds => 1, # lookup related available domains RELATED_TLDS => [ ! [ ".com", ".net", ".org", ".info", ".biz" ], [ ".me.uk",".co.uk", ".org.uk" ], # with this array, you can provide suggestions --- 83,89 ---- # the different TLDs have different period years restrictions lookup_all_tlds => 1, # lookup related available domains RELATED_TLDS => [ ! [ ".com", ".net", ".org", ".info", ".biz", ".asia" ], [ ".me.uk",".co.uk", ".org.uk" ], # with this array, you can provide suggestions *************** *** 227,233 **** '.com' => 1, '.net' => 1, '.org' => 1, '.uk' => 1, '.ca' => 1, '.vc' => 0, '.cc' => 1, '.tv' => 1, '.de' => 1, '.info' => 1, '.biz' => 1,'.us' => 1, '.name' => 1, '.cn' => 1, ! '.fr' => 1,'.ch' =>1 ,'.nl' => 1, '.eu' => 1, '.be' => 1 } ); --- 227,234 ---- '.com' => 1, '.net' => 1, '.org' => 1, '.uk' => 1, '.ca' => 1, '.vc' => 0, '.cc' => 1, '.tv' => 1, '.de' => 1, '.info' => 1, '.biz' => 1,'.us' => 1, '.name' => 1, '.cn' => 1, ! '.fr' => 1,'.ch' =>1 ,'.nl' => 1, '.eu' => 1, '.be' => 1, ! '.asia' => 1 } ); *************** *** 274,280 **** ################################################################# # The version number shouldn't be modified, else it may cause inaccuracies in # support response. ! $OpenSRS::VERSION = "2.9.8"; ################################################################# # .de domains are normally disabled for the first 30 days after registration --- 275,281 ---- ################################################################# # The version number shouldn't be modified, else it may cause inaccuracies in # support response. ! $OpenSRS::VERSION = "3.0.0"; ################################################################# # .de domains are normally disabled for the first 30 days after registration diff -r -c opensrs-client-2.9.8/lib/OpenSRS/Country.pm opensrs-client-3.0.0/lib/OpenSRS/Country.pm *** opensrs-client-2.9.8/lib/OpenSRS/Country.pm Wed Jul 25 12:56:59 2007 --- opensrs-client-3.0.0/lib/OpenSRS/Country.pm Tue Mar 18 14:31:14 2008 *************** *** 7,19 **** =head1 SYNOPSIS use OpenSRS::Country; ! $country = code2country('jp'); # $country gets 'Japan' $code = country2code('Norway'); # $code gets 'no' ! @codes = all_country_codes(); @names = all_country_names(); ! # add "uk" as a pseudo country code for United Kingdom OpenSRS::Country::_alias_code('uk' => 'gb'); --- 7,19 ---- =head1 SYNOPSIS use OpenSRS::Country; ! $country = code2country('jp'); # $country gets 'Japan' $code = country2code('Norway'); # $code gets 'no' ! @codes = all_country_codes(); @names = all_country_names(); ! # add "uk" as a pseudo country code for United Kingdom OpenSRS::Country::_alias_code('uk' => 'gb'); *************** *** 82,88 **** # Public Global Variables #----------------------------------------------------------------------- use vars qw($VERSION @ISA @EXPORT @EXPORT_OK); ! $VERSION = sprintf("%d.%02d", q$Revision: 1.5 $ =~ /(\d+)\.(\d+)/); @ISA = qw(Exporter); @EXPORT = qw(code2country country2code all_country_codes all_country_names --- 82,88 ---- # Public Global Variables #----------------------------------------------------------------------- use vars qw($VERSION @ISA @EXPORT @EXPORT_OK); ! $VERSION = sprintf("%d.%02d", q$Revision: 1.6 $ =~ /(\d+)\.(\d+)/); @ISA = qw(Exporter); @EXPORT = qw(code2country country2code all_country_codes all_country_names *************** *** 285,291 **** code for United Kingdom, use the following: use OpenSRS::Country; ! OpenSRS::Country::_alias_code('uk' => 'gb'); With this code, both "uk" and "gb" are valid codes for United Kingdom, --- 285,291 ---- code for United Kingdom, use the following: use OpenSRS::Country; ! OpenSRS::Country::_alias_code('uk' => 'gb'); With this code, both "uk" and "gb" are valid codes for United Kingdom, *************** *** 325,331 **** country name: $| = 1; # turn off buffering ! print "Enter country code: "; chop($code = ); $country = code2country($code, LOCALE_CODE_ALPHA_2); --- 325,331 ---- country name: $| = 1; # turn off buffering ! print "Enter country code: "; chop($code = ); $country = code2country($code, LOCALE_CODE_ALPHA_2); *************** *** 508,514 **** cn:chn:156:China co:col:170:Colombia cr:cri:188:Costa Rica - cs:cgs:189:Serbia and Montenegro cu:cub:192:Cuba cv:cpv:132:Cape Verde cx:::Christmas Island --- 508,513 ---- *************** *** 562,567 **** --- 561,567 ---- ie:irl:372:Ireland il:isr:376:Israel in:ind:356:India + im:imn:833:Isle of Man io:::British Indian Ocean Territory iq:irq:368:Iraq ir:irn:364:Iran, Islamic Republic of *************** *** 604,609 **** --- 604,610 ---- mp:mnp:580:Northern Mariana Islands mq:mtq:474:Martinique mr:mrt:478:Mauritania + me:mne:499:Montenegro ms:msr:500:Montserrat mt:mlt:470:Malta mu:mus:480:Mauritius *************** *** 657,662 **** --- 658,664 ---- sl:sle:694:Sierra Leone sm:smr:674:San Marino sn:sen:686:Senegal + rs:srb:688:Serbia so:som:706:Somalia sr:sur:740:Suriname st:stp:678:Sao Tome and Principe diff -r -c opensrs-client-2.9.8/lib/OpenSRS/Language.pm opensrs-client-3.0.0/lib/OpenSRS/Language.pm *** opensrs-client-2.9.8/lib/OpenSRS/Language.pm Wed Jul 25 12:56:59 2007 --- opensrs-client-3.0.0/lib/OpenSRS/Language.pm Tue Mar 18 14:31:14 2008 *************** *** 50,56 **** # Public Global Variables #----------------------------------------------------------------------- use vars qw($VERSION @ISA @EXPORT_OK $OPENSRS); ! $VERSION = sprintf("%d.%02d", q$Revision: 1.10 $ =~ /(\d+)\.(\d+)/); @ISA = qw(Exporter); @EXPORT_OK = qw(code2language language2code all_language_codes all_language_names --- 50,56 ---- # Public Global Variables #----------------------------------------------------------------------- use vars qw($VERSION @ISA @EXPORT_OK $OPENSRS); ! $VERSION = sprintf("%d.%02d", q$Revision: 1.11 $ =~ /(\d+)\.(\d+)/); @ISA = qw(Exporter); @EXPORT_OK = qw(code2language language2code all_language_codes all_language_names *************** *** 275,280 **** --- 275,282 ---- pol swe /); + # No IDNs for .ASIA yet... + # } elsif ( $fqdn =~ /\.asia$/ ){ } elsif ( $fqdn =~ /\.de$/ ){ return (sort qw/ alb Only in opensrs-client-3.0.0/lib/OpenSRS/Util: Asia.pm diff -r -c opensrs-client-2.9.8/lib/OpenSRS/XML_Client.pm opensrs-client-3.0.0/lib/OpenSRS/XML_Client.pm *** opensrs-client-2.9.8/lib/OpenSRS/XML_Client.pm Wed Jul 25 12:56:59 2007 --- opensrs-client-3.0.0/lib/OpenSRS/XML_Client.pm Tue Mar 18 14:31:14 2008 *************** *** 1,5 **** #!/usr/bin/perl ! # $Id: XML_Client.pm,v 1.112 2006/11/22 22:17:28 sbelikov Exp $ # .Copyright (C) 2000 TUCOWS.com Inc. # .Created: 11/19/1999 # .Contactid: --- 1,5 ---- #!/usr/bin/perl ! # $Id: XML_Client.pm,v 1.113 2008/03/12 17:07:47 sbelikov Exp $ # .Copyright (C) 2000 TUCOWS.com Inc. # .Created: 11/19/1999 # .Contactid: *************** *** 406,412 **** if ($syntaxError = check_domain_syntax($domain)) { $problem_fields{Domain} = $domain . " - " . $syntaxError; } ! if ( $domain =~ /\.us$/ ) { if ( !$data->{app_purpose} ) { push @missing_fields, "Domain Name Application Purpose"; --- 406,412 ---- if ($syntaxError = check_domain_syntax($domain)) { $problem_fields{Domain} = $domain . " - " . $syntaxError; } ! if ( $domain =~ /\.us$/ ) { if ( !$data->{app_purpose} ) { push @missing_fields, "Domain Name Application Purpose"; *************** *** 652,658 **** $problem_fields{"$contact_types{$type} Email"} = $data->{"${type}_email"}; } ! if ( $data->{domain} =~ /\.(info|biz|name|us|de)/ ) { if ($data->{"${type}_phone"} !~ /^\+\d{1,3}\.\d{1,12}( *x\d{1,4})?$/){ # tell the registrant about the bad phone number $problem_fields{"$contact_types{$type} Phone"} = --- 652,658 ---- $problem_fields{"$contact_types{$type} Email"} = $data->{"${type}_email"}; } ! if ( $data->{domain} =~ /\.(info|biz|name|us|de|asia)/ ) { if ($data->{"${type}_phone"} !~ /^\+\d{1,3}\.\d{1,12}( *x\d{1,4})?$/){ # tell the registrant about the bad phone number $problem_fields{"$contact_types{$type} Phone"} = Only in opensrs-client-3.0.0/templates/manage: asia_ced_form.html diff -r -c opensrs-client-2.9.8/templates/manage/domain_auth_code_form.html opensrs-client-3.0.0/templates/manage/domain_auth_code_form.html *** opensrs-client-2.9.8/templates/manage/domain_auth_code_form.html Wed Jul 25 12:57:01 2007 --- opensrs-client-3.0.0/templates/manage/domain_auth_code_form.html Tue Mar 18 14:31:14 2008 *************** *** 8,15 **** Domain Auth Code ! !
must contain between 6 and 16 characters
--- 8,15 ---- Domain Auth Code ! !
must contain between 1 and 32 characters
diff -r -c opensrs-client-2.9.8/templates/manage/main_menu.html opensrs-client-3.0.0/templates/manage/main_menu.html *** opensrs-client-2.9.8/templates/manage/main_menu.html Wed Jul 25 12:57:01 2007 --- opensrs-client-3.0.0/templates/manage/main_menu.html Tue Mar 18 14:31:14 2008 *************** *** 53,59 **** {{f_modify_domain_extras}}
This page contains non-classifiable domain data like: domain auth info, ! forwarding email address, nexus data and domain validation.

{{f_modify_whois_rsp_info}}
--- 53,59 ---- {{f_modify_domain_extras}}
This page contains non-classifiable domain data like: domain auth info, ! forwarding email address, nexus data (.us), ced contact info (.asia) and domain validation.

{{f_modify_whois_rsp_info}}
diff -r -c opensrs-client-2.9.8/templates/manage/modify_ca_org_contact.html opensrs-client-3.0.0/templates/manage/modify_ca_org_contact.html *** opensrs-client-2.9.8/templates/manage/modify_ca_org_contact.html Wed Jul 25 12:57:01 2007 --- opensrs-client-3.0.0/templates/manage/modify_ca_org_contact.html Tue Mar 18 14:31:14 2008 *************** *** 32,43 **** - CIRA Member: - {{member_field}} - - - - Description: --- 32,37 ---- *************** *** 55,61 **** * Setting the CWA (Change Without Approval) flag will allow your registrar (Tucows) to modify your email address without submitting the request to the registry ! (CIRA) for processing. If you set this flag to yes, you will be required to confirm this change at

https://registrants.cira.ca/user --- 49,56 ---- * Setting the CWA (Change Without Approval) flag will allow your registrar (Tucows) to modify your email address without submitting the request to the registry ! (CIRA) for processing. If you set this flag to yes, you will be required to ! confirm this change at:

https://registrants.cira.ca/user *************** *** 63,68 **** --- 58,67 ---- + + + +
diff -r -c opensrs-client-2.9.8/templates/manage/modify_domain_extras.html opensrs-client-3.0.0/templates/manage/modify_domain_extras.html *** opensrs-client-2.9.8/templates/manage/modify_domain_extras.html Wed Jul 25 12:57:01 2007 --- opensrs-client-3.0.0/templates/manage/modify_domain_extras.html Tue Mar 18 14:31:14 2008 *************** *** 11,16 **** --- 11,17 ---- {{domain_auth_code_form}} {{forwarding_email_form}} {{us_nexus_form}} + {{asia_ced_form}} {{trademark_form}} {{dns_error_form}} {{uk_whois_opt_form}} diff -r -c opensrs-client-2.9.8/templates/manage/whois_privacy_form.html opensrs-client-3.0.0/templates/manage/whois_privacy_form.html *** opensrs-client-2.9.8/templates/manage/whois_privacy_form.html Wed Jul 25 12:57:01 2007 --- opensrs-client-3.0.0/templates/manage/whois_privacy_form.html Tue Mar 18 14:31:14 2008 *************** *** 7,13 **** ! WHOIS Privacy will allow the registrant information to not be displayed in the publid WHOIS, but will still be available in the event that an authorized request is made. --- 7,13 ---- ! WHOIS Privacy will allow the registrant information to not be displayed in the public WHOIS, but will still be available in the event that an authorized request is made. *************** *** 33,39 **** {{whois_privacy_changes_menu}} - {{whois_privacy_refund_notice}}

--- 33,38 ---- diff -r -c opensrs-client-2.9.8/templates/reg_system/bulk_order.html opensrs-client-3.0.0/templates/reg_system/bulk_order.html *** opensrs-client-2.9.8/templates/reg_system/bulk_order.html Wed Jul 25 12:57:01 2007 --- opensrs-client-3.0.0/templates/reg_system/bulk_order.html Tue Mar 18 14:31:14 2008 *************** *** 126,132 **** Phone Number: !
(eg. +1.4165551122x1234 for .info/.biz/.us/.name/.cn/.org domains)
--- 126,132 ---- Phone Number: !
(eg. +1.4165551122x1234 for .info/.biz/.us/.name/.cn/.org/.asia domains)
*************** *** 134,140 **** *optional*
Fax Number: !
(eg. +1.4165551122x1234 for .info/.biz/.us/.name/.cn/.org domains)
--- 134,140 ---- *optional*
Fax Number: !
(eg. +1.4165551122x1234 for .info/.biz/.us/.name/.cn/.org/.asia domains)
*************** *** 200,206 **** Phone Number: !
(eg. +1.4165551122x1234 for .info/.biz/.us/.name/.cn/.org domains)
--- 200,206 ---- Phone Number: !
(eg. +1.4165551122x1234 for .info/.biz/.us/.name/.cn/.org/.asia domains)
*************** *** 208,214 **** *optional* Fax Number: !
(eg. +1.4165551122x1234 for .info/.biz/.us/.name/.cn/.org domains)
--- 208,214 ---- *optional* Fax Number: !
(eg. +1.4165551122x1234 for .info/.biz/.us/.name/.cn/.org/.asia domains)
*************** *** 277,283 **** Phone Number: !
(eg. +1.4165551122x1234 for .info/.biz/.us/.name/.cn/.org domains)
--- 277,283 ---- Phone Number: !
(eg. +1.4165551122x1234 for .info/.biz/.us/.name/.cn/.org/.asia domains)
*************** *** 285,291 **** *optional* Fax Number: !
(eg. +1.4165551122x1234 for .info/.biz/.us/.name/.cn/.org domains)
--- 285,291 ---- *optional* Fax Number: !
(eg. +1.4165551122x1234 for .info/.biz/.us/.name/.cn/.org/.asia domains)
Only in opensrs-client-3.0.0/templates/reg_system: bulk_order_asia.html diff -r -c opensrs-client-2.9.8/templates/reg_system/bulk_transfer.html opensrs-client-3.0.0/templates/reg_system/bulk_transfer.html *** opensrs-client-2.9.8/templates/reg_system/bulk_transfer.html Wed Jul 25 12:57:01 2007 --- opensrs-client-3.0.0/templates/reg_system/bulk_transfer.html Tue Mar 18 14:31:14 2008 *************** *** 118,124 **** Phone Number: !
(eg. +1.4165551122x1234 for .info/.biz/.us/.name/.cn/.org domains)
--- 118,124 ---- Phone Number: !
(eg. +1.4165551122x1234 for .info/.biz/.us/.name/.cn/.org/.asia domains)
*************** *** 126,132 **** *optional* Fax Number: !
(eg. +1.4165551122x1234 for .info/.biz/.us/.name/.cn/.org domains)
--- 126,132 ---- *optional* Fax Number: !
(eg. +1.4165551122x1234 for .info/.biz/.us/.name/.cn/.org/.asia domains)
*************** *** 192,198 **** Phone Number: !
(eg. +1.4165551122x1234 for .info/.biz/.us/.name/.cn/.org domains)
--- 192,198 ---- Phone Number: !
(eg. +1.4165551122x1234 for .info/.biz/.us/.name/.cn/.org/.asia domains)
*************** *** 200,206 **** *optional* Fax Number: !
(eg. +1.4165551122x1234 for .info/.biz/.us/.name/.cn/.org domains)
--- 200,206 ---- *optional* Fax Number: !
(eg. +1.4165551122x1234 for .info/.biz/.us/.name/.cn/.org/.asia domains)
*************** *** 268,274 **** Phone Number: !
(eg. +1.4165551122x1234 for .info/.biz/.us/.name/.cn/.org domains)
--- 268,274 ---- Phone Number: !
(eg. +1.4165551122x1234 for .info/.biz/.us/.name/.cn/.org/.asia domains)
*************** *** 276,282 **** *optional* Fax Number: !
(eg. +1.4165551122x1234 for .info/.biz/.us/.name/.cn/.org domains)
--- 276,282 ---- *optional* Fax Number: !
(eg. +1.4165551122x1234 for .info/.biz/.us/.name/.cn/.org/.asia domains)
diff -r -c opensrs-client-2.9.8/templates/reg_system/order.html opensrs-client-3.0.0/templates/reg_system/order.html *** opensrs-client-2.9.8/templates/reg_system/order.html Wed Jul 25 12:57:01 2007 --- opensrs-client-3.0.0/templates/reg_system/order.html Tue Mar 18 14:31:14 2008 *************** *** 116,122 **** Phone Number: !
(eg. +1.4165551122x1234 for .info/.biz/.us/.name/.cn/.org domains)
--- 116,122 ---- Phone Number: !
(eg. +1.4165551122x1234 for .info/.biz/.us/.name/.cn/.org/.asia domains)
*************** *** 124,130 **** *optional* Fax Number: !
(eg. +1.4165551122x1234 for .info/.biz/.us/.name/.cn/.org domains)
--- 124,130 ---- *optional* Fax Number: !
(eg. +1.4165551122x1234 for .info/.biz/.us/.name/.cn/.org/.asia domains)
*************** *** 190,196 **** Phone Number: !
(eg. +1.4165551122x1234 for .info/.biz/.us/.name/.cn/.org domains)
--- 190,196 ---- Phone Number: !
(eg. +1.4165551122x1234 for .info/.biz/.us/.name/.cn/.org/.asia domains)
*************** *** 198,204 **** *optional* Fax Number: !
(eg. +1.4165551122x1234 for .info/.biz/.us/.name/.cn/.org domains)
--- 198,204 ---- *optional* Fax Number: !
(eg. +1.4165551122x1234 for .info/.biz/.us/.name/.cn/.org/.asia domains)
*************** *** 266,272 **** Phone Number: !
(eg. +1.4165551122x1234 for .info/.biz/.us/.name/.cn/.org domains)
--- 266,272 ---- Phone Number: !
(eg. +1.4165551122x1234 for .info/.biz/.us/.name/.cn/.org/.asia domains)
*************** *** 274,280 **** *optional* Fax Number: !
(eg. +1.4165551122x1234 for .info/.biz/.us/.name/.cn/.org domains)
--- 274,280 ---- *optional* Fax Number: !
(eg. +1.4165551122x1234 for .info/.biz/.us/.name/.cn/.org/.asia domains)
Only in opensrs-client-3.0.0/templates/reg_system: order_asia.html diff -r -c opensrs-client-2.9.8/templates/reg_system/reg_period_hints.html opensrs-client-3.0.0/templates/reg_system/reg_period_hints.html *** opensrs-client-2.9.8/templates/reg_system/reg_period_hints.html Wed Jul 25 12:57:01 2007 --- opensrs-client-3.0.0/templates/reg_system/reg_period_hints.html Tue Mar 18 14:31:14 2008 *************** *** 1 **** ! (2 years for .uk and .mobi, max 5 years for .cn and 1 year for .de, .eu and .be)
--- 1 ---- ! (2 years for .uk, max 5 years for .cn and 1 year for .de, .eu and .be)
Only in opensrs-client-3.0.0/templates/reg_system: verify_asia.html diff -r -c opensrs-client-2.9.8/templates/renew/renew_domain_menu.html opensrs-client-3.0.0/templates/renew/renew_domain_menu.html *** opensrs-client-2.9.8/templates/renew/renew_domain_menu.html Wed Jul 25 12:57:02 2007 --- opensrs-client-3.0.0/templates/renew/renew_domain_menu.html Tue Mar 18 14:31:14 2008 *************** *** 62,68 **** !
* (only applicable for ".net", ".com", ".org", ".tv", ".info", ".biz", ".vc", ".name", ".cc", ".ca", ".de", ".be", ".eu" and ".uk" domains)

** (2 years only for ".uk" and 1 year for ".de", ".be" and ".eu" domains) --- 62,69 ---- !
* (only applicable for ".net", ".com", ".org", ".tv", ".info", ".biz", ".vc", ".name", ".cc", ".ca", ".de", ".be", ! ".eu", ".uk", and ".asia" domains)

** (2 years only for ".uk" and 1 year for ".de", ".be" and ".eu" domains) diff -r -c opensrs-client-2.9.8/templates/renew/renew_domain_menu_name.html opensrs-client-3.0.0/templates/renew/renew_domain_menu_name.html *** opensrs-client-2.9.8/templates/renew/renew_domain_menu_name.html Wed Jul 25 12:57:02 2007 --- opensrs-client-3.0.0/templates/renew/renew_domain_menu_name.html Tue Mar 18 14:31:14 2008 *************** *** 63,69 **** !
* (only applicable for ".net", ".com", ".org", ".tv", ".info", ".biz", ".vc", ".name", ".cc" and ".ca" domains)
** (If present, email forwarding will be renewed automatically with the domain) Logout --- 63,69 ---- !
* (only applicable for ".net", ".com", ".org", ".tv", ".info", ".biz", ".vc", ".name", ".cc", ".ca", and ".asia" domains)
** (If present, email forwarding will be renewed automatically with the domain) Logout diff -r -c opensrs-client-2.9.8/templates/whois_privacy/whois_privacy_menu.html opensrs-client-3.0.0/templates/whois_privacy/whois_privacy_menu.html *** opensrs-client-2.9.8/templates/whois_privacy/whois_privacy_menu.html Wed Jul 25 12:57:02 2007 --- opensrs-client-3.0.0/templates/whois_privacy/whois_privacy_menu.html Tue Mar 18 14:31:14 2008 *************** *** 36,42 **** !
* ( only applicable for .com, .net, .org, .biz, .cc, .tv, and .info domains )
Logout --- 36,42 ---- !
* ( only applicable for .com, .net, .org, .biz, .cc, .tv, .info, and .asia domains )
Logout opensrs-client-3.0.0/diffs/opensrs-client_2.9.9to3.0.0.patch0000644017777601777760000015606310770014360024313 0ustar nobodynogroup00000000000000diff -r -c opensrs-client-2.9.9/ChangeLog opensrs-client-3.0.0/ChangeLog *** opensrs-client-2.9.9/ChangeLog Tue Aug 21 18:32:40 2007 --- opensrs-client-3.0.0/ChangeLog Tue Mar 18 14:31:14 2008 *************** *** 1,3 **** --- 1,6 ---- + 2008/02/28 v3.0.0 + - Added ability for .ASIA TLD (all configurations, scripts, and + templates) 2007/08/21 v2.9.9 - cgi/manage.cgi * whois privacy is no longer a paid service diff -r -c opensrs-client-2.9.9/cgi/manage.cgi opensrs-client-3.0.0/cgi/manage.cgi *** opensrs-client-2.9.9/cgi/manage.cgi Tue Aug 21 18:32:40 2007 --- opensrs-client-3.0.0/cgi/manage.cgi Tue Mar 18 14:31:14 2008 *************** *** 63,68 **** --- 63,70 ---- use OpenSRS::Util::America qw(build_app_purpose_list); use OpenSRS::Util::Common qw(make_navbar locale_build_country_list build_select_menu); use OpenSRS::Util::Europe qw(build_eu_countries_list build_eu_languages_list build_be_languages_list); + use OpenSRS::Util::Asia qw(build_ced_locality_select_list build_ced_entity_type_select_list + build_ced_contact_type_select_list build_ced_identification_type_select_list); # initialize global defines $cgi = $ENV{SCRIPT_NAME}; *************** *** 962,967 **** --- 964,988 ---- escape_hash_values( $rsp_nexus_info ); } + my $rsp_ced_info; + if ($capabilities->{ced_info}) { + my $xcp_ced_info = { + action => "get", + object => "domain", + cookie => $cookie, + attributes => { + type => "ced_info", + } + }; + $rsp_ced_info = $XML_Client->send_cmd( $xcp_ced_info ); + if (not $rsp_ced_info->{is_success}) { + $error = "Failed attempt: $rsp_ced_info->{response_text}
\n"; + error_out($error); + exit; + } + escape_hash_values( $rsp_ced_info ); + } + my $rsp_trademark; if ($capabilities->{trademark}) { my $xcp_trademark = { *************** *** 1033,1039 **** $HTML{old_nexus_validator} =~ tr/a-z/A-Z/; $HTML{"category_" . $HTML{old_nexus_category}} = "checked"; } ! if ($HTML{forwarding_email}) { $HTML{text_comment} = '!-- '; $HTML{text_comment_close} = ' --'; --- 1054,1072 ---- $HTML{old_nexus_validator} =~ tr/a-z/A-Z/; $HTML{"category_" . $HTML{old_nexus_category}} = "checked"; } ! ! if ($rsp_ced_info) { ! $HTML{old_contact_type} = $rsp_ced_info->{attributes}->{ced_info}->{contact_type}; ! $HTML{old_locality_country} = $rsp_ced_info->{attributes}->{ced_info}->{locality_country}; ! $HTML{old_locality_city} = $rsp_ced_info->{attributes}->{ced_info}->{locality_city}; ! $HTML{old_locality_state_prov} = $rsp_ced_info->{attributes}->{ced_info}->{locality_state_prov}; ! $HTML{old_legal_entity_type} = $rsp_ced_info->{attributes}->{ced_info}->{legal_entity_type}; ! $HTML{old_legal_entity_type_info} = $rsp_ced_info->{attributes}->{ced_info}->{legal_entity_type_info}; ! $HTML{old_id_type} = $rsp_ced_info->{attributes}->{ced_info}->{id_type}; ! $HTML{old_id_type_info} = $rsp_ced_info->{attributes}->{ced_info}->{id_type_info}; ! $HTML{old_id_number} = $rsp_ced_info->{attributes}->{ced_info}->{id_number}; ! } ! if ($HTML{forwarding_email}) { $HTML{text_comment} = '!-- '; $HTML{text_comment_close} = ' --'; *************** *** 1106,1111 **** --- 1139,1153 ---- $HTML{us_nexus_form} = get_content("$path_templates/us_nexus_form.html", \%HTML); } + # include ced data form in the main html page if it is capable for .asia ced data modification + if ($rsp_ced_info) { + $HTML{contact_type_menu} = build_ced_contact_type_select_list($HTML{old_contact_type}); + $HTML{locality_country_menu} = build_ced_locality_select_list($HTML{old_locality_country}); + $HTML{legal_entity_type_menu} = build_ced_entity_type_select_list($HTML{old_legal_entity_type}); + $HTML{id_type_menu} = build_ced_identification_type_select_list($HTML{old_id_type}); + $HTML{asia_ced_form} = get_content("$path_templates/asia_ced_form.html", \%HTML); + } + # include domain whois_privacy form in the main html page if domain whois_privacy state is enabled or disabled if ($rsp_whois_privacy->{attributes}->{changeable}) { $HTML{whois_privacy_state} = $rsp_whois_privacy->{attributes}->{state} if ($rsp_whois_privacy); *************** *** 1322,1327 **** --- 1364,1412 ---- } } + if ($capabilities->{ced_info}) { + my $xcp_ced_info = { + action => "modify", + object => "domain", + cookie => $cookie, + attributes => { + data => "ced_info", + ced_info => { + contact_type => $in{contact_type}, + locality_country => $in{locality_country}, + locality_city => $in{locality_city}, + locality_state_prov => $in{locality_state_prov}, + legal_entity_type => $in{legal_entity_type}, + legal_entity_type_info => $in{legal_entity_type_info}, + id_type => $in{id_type}, + id_type_info => $in{id_type_info}, + id_number => $in{id_number}, + } + } + }; + my $mod_flag = 0; + $mod_flag =1 if ($in{contact_type} ne $in{old_contact_type}); + $mod_flag =1 if ($in{locality_country} ne $in{old_locality_country}); + $mod_flag =1 if ($in{locality_city} ne $in{old_locality_city}); + $mod_flag =1 if ($in{locality_state_prov} ne $in{old_locality_state_prov}); + $mod_flag =1 if ($in{legal_entity_type} ne $in{old_legal_entity_type}); + $mod_flag =1 if ($in{legal_entity_type_info} ne $in{old_legal_entity_type_info}); + $mod_flag =1 if ($in{id_type} ne $in{old_id_type}); + $mod_flag =1 if ($in{id_type_info} ne $in{old_id_type_info}); + $mod_flag =1 if ($in{id_number} ne $in{old_id_number}); + + if ($mod_flag) { + $do_flag = 1; + my $rsp_ced_info = $XML_Client->send_cmd( $xcp_ced_info ); + if (not $rsp_ced_info->{is_success}) { + $resultString .= "Failed to modify CED contact info for $reg_domain : $rsp_ced_info->{response_text}
"; + } else { + $resultString .= "CED contact info modification successful for $reg_domain
"; + $ok_flag = 1; + } + } + } + if($in{flag_do_validate_domain} and $dns_errors) { $do_flag = 1; my $validate_command = { *************** *** 1586,1594 **** } sub make_de_org_change_menu { - my $html; ! $html = < Also Apply these changes to: --- 1671,1682 ---- } sub make_de_org_change_menu { ! my ($type,$html); ! ! my ($reg_domain,$f_owner,$permission,$current_type) = @_; ! my ($tld) = $reg_domain =~ /$OPENSRS{OPENSRS_TLDS_REGEX}$/; ! my $table_start = < Also Apply these changes to: *************** *** 1599,1616 **** YES NO ! All Domains ($domain_count) ! ! ! (only .de domains will be modified) ! ! + EOF + my $need_report_email = 0; + if ($reg_f_owner && ($domain_count > 1)) { + $need_report_email = 1; + $html .= < ! ! EOF ! } ! my $table_end = "
--- 1687,1721 ---- YES NO
All UNLOCKED Domains ($domain_count) ! !
\n"; ! my ($menu); + if ($html) { + $menu = < *************** *** 1624,1641 **** ! EOF - return $html; - } #generate menu for applying whois_privacy changes to all domains in the profile sub make_whois_privacy_changes_menu { ! my $html; ! $html = < Also Apply these changes to: --- 1729,1751 ---- ! !
Only $tld will be affected
EOF + } + return $menu; + } else { + return ""; + } } + #generate menu for applying whois_privacy changes to all domains in the profile sub make_whois_privacy_changes_menu { ! my ($type,$html); ! my $table_start = < Also Apply these changes to: *************** *** 1646,1660 **** YES NO ! All Domains ($domain_count) ! + EOF + my $need_report_email = 0; + if ($reg_f_owner && ($domain_count > 1)) { + $need_report_email = 1; + $html .= < ! ! EOF ! } ! my $table_end = "
--- 1756,1790 ---- YES NO
All UNLOCKED Domains ($domain_count)
\n"; ! my ($menu); ! ! if ($html) { ! $menu = < *************** *** 1668,1677 **** ! EOF - return $html; } sub make_beu_global_menu { --- 1798,1812 ---- ! !
EOF + } + return $menu; + } else { + return ""; + } } sub make_beu_global_menu { *************** *** 1697,1703 **** $need_report_email = 1; $html .= < ! All Domains ($domain_count) --- 1832,1838 ---- $need_report_email = 1; $html .= < ! All UNLOCKED Domains ($domain_count) *************** *** 1802,1808 **** $need_report_email = 1; $html .= < ! All Domains ($domain_count) --- 1937,1943 ---- $need_report_email = 1; $html .= < ! All UNLOCKED Domains ($domain_count) *************** *** 2167,2173 **** # Nominet handles glue records. modify_nameserver( $response->{ response_text } ); } else { ! modify_nameservers("Nameservers modification for $reg_domain successfully submitted to registry. Please review your changes in 15 minutes to verify that they were accepted"); } } --- 2302,2308 ---- # Nominet handles glue records. modify_nameserver( $response->{ response_text } ); } else { ! modify_nameservers("Nameservers modification for $reg_domain successfully submitted to registry."); } } diff -r -c opensrs-client-2.9.9/cgi/reg_system.cgi opensrs-client-3.0.0/cgi/reg_system.cgi *** opensrs-client-2.9.9/cgi/reg_system.cgi Tue Aug 21 18:32:40 2007 --- opensrs-client-3.0.0/cgi/reg_system.cgi Tue Mar 18 14:31:14 2008 *************** *** 50,55 **** --- 50,58 ---- use OpenSRS::Util::Common qw(send_email build_select_menu build_select_menu3 locale_build_country_list); use OpenSRS::Util::America qw(build_app_purpose_list); use OpenSRS::Util::Europe qw(build_eu_countries_list build_eu_languages_list build_be_languages_list); + use OpenSRS::Util::Asia qw(%asia_ced_locality_country %asia_ced_contact_type %asia_ced_entity_type %asia_ced_identification_type + build_ced_contact_type_select_list build_ced_locality_select_list + build_ced_entity_type_select_list build_ced_identification_type_select_list); use OpenSRS::Language qw/native_to_puny puny_to_native code2language/; # global defines *************** *** 71,76 **** --- 74,80 ---- bulk_order => undef, bulk_order_ca => undef, bulk_order_us => undef, + bulk_order_asia => undef, bulk_transfer => undef, do_bulk_transfer => undef, ); *************** *** 241,247 **** ################################### # check syntax on domains given if this is a bulk order ! my ($gtld,$ca,$uk,$us,$de,$eu,$be); my $mldn = 0; my $ascii = 0; --- 245,251 ---- ################################### # check syntax on domains given if this is a bulk order ! my ($gtld,$ca,$uk,$us,$asia,$de,$eu,$be); my $mldn = 0; my $ascii = 0; *************** *** 277,282 **** --- 281,287 ---- $ca = $ca || $punycodeObj =~ /ca$/i; $de = $de || $punycodeObj =~ /de$/i; $us = $us || $punycodeObj =~ /us$/i; + $asia = $asia || $punycodeObj =~ /asia$/i; $uk = $uk || $punycodeObj =~ /uk$/i; $eu = $eu || $punycodeObj =~ /eu$/i; $be = $be || $punycodeObj =~ /be$/i; *************** *** 338,344 **** if ( $ascii and $mldn and $in{ reg_type } eq 'transfer' ) { $error_msg = "Bulk transfer requests cannot contain both ASCII and multi-lingual domains"; } ! if ($ca and ($gtld or $uk or $us or $de)){ $error_msg = "You can't mix .ca with gTLD or .uk domains in bulk_registration"; } --- 343,349 ---- if ( $ascii and $mldn and $in{ reg_type } eq 'transfer' ) { $error_msg = "Bulk transfer requests cannot contain both ASCII and multi-lingual domains"; } ! if ($ca and ($gtld or $uk or $us or $asia or $de)){ $error_msg = "You can't mix .ca with gTLD or .uk domains in bulk_registration"; } *************** *** 346,352 **** $error_msg = "You can't mix .us with gTLD, .ca or .uk domains in bulk_registration"; } ! if ($de and ($gtld or $uk or $ca or $us)){ $error_msg = "You can't mix .de with gTLD, .ca or .uk domains in bulk_registration"; } --- 351,361 ---- $error_msg = "You can't mix .us with gTLD, .ca or .uk domains in bulk_registration"; } ! if ($asia and ($gtld or $uk or $ca or $de or $us)){ ! $error_msg = "You can't mix .asia with gTLD, .ca, .de, .us or .uk domains in bulk_registration"; ! } ! ! if ($de and ($gtld or $uk or $ca or $us or $asia)){ $error_msg = "You can't mix .de with gTLD, .ca or .uk domains in bulk_registration"; } *************** *** 373,395 **** $de = $de || $_ =~ /de$/i; $uk = $uk || $_ =~ /uk$/i; $us = $us || $_ =~ /us$/i; $eu = $eu || $_ =~ /eu$/i; $be = $be || $_ =~ /be$/i; } keys %good_domains; ! if ($eu and ($gtld or $uk or $us or $de)){ ! error_out("You can't mix .eu with gTLD, .us, or .uk domains in bulk_registration"); exit; ! }elsif ($be and ($gtld or $uk or $us or $de)){ ! error_out("You can't mix .be with gTLD, .us, or .uk domains in bulk_registration"); exit; ! } elsif ($ca and ($gtld or $uk or $us or $de)){ ! error_out("You can't mix .ca with gTLD, .us, or .uk domains in bulk_registration"); exit; } elsif ($us and ($gtld or $uk or $ca or $de)){ error_out("You can't mix .us with gTLD, .ca, or .uk domains in bulk_registration"); exit; ! } elsif ($de and ($gtld or $uk or $ca or $us)){ ! error_out("You can't mix .de with gTLD, .ca, or .uk domains in bulk_registration"); exit; } elsif ( $ca and $in{reg_type} eq 'new' ) { # for .ca domains, ensure a valid legal type was given --- 382,408 ---- $de = $de || $_ =~ /de$/i; $uk = $uk || $_ =~ /uk$/i; $us = $us || $_ =~ /us$/i; + $asia = $asia || $_ =~ /asia$/i; $eu = $eu || $_ =~ /eu$/i; $be = $be || $_ =~ /be$/i; } keys %good_domains; ! if ($eu and ($gtld or $uk or $us or $asia or $de)){ ! error_out("You can't mix .eu with gTLD, .us, .asia, or .uk domains in bulk_registration"); exit; ! }elsif ($be and ($gtld or $uk or $us or $asia or $de)){ ! error_out("You can't mix .be with gTLD, .us, .asia, or .uk domains in bulk_registration"); exit; ! } elsif ($ca and ($gtld or $uk or $us or $asia or $de)){ ! error_out("You can't mix .ca with gTLD, .us, .asia, or .uk domains in bulk_registration"); exit; } elsif ($us and ($gtld or $uk or $ca or $de)){ error_out("You can't mix .us with gTLD, .ca, or .uk domains in bulk_registration"); exit; ! } elsif ($asia and ($gtld or $uk or $ca or $de or $us)){ ! error_out("You can't mix .asia with gTLD, .ca, .us, or .uk domains in bulk_registration"); ! exit; ! } elsif ($de and ($gtld or $uk or $ca or $us or $asia)){ ! error_out("You can't mix .de with gTLD, .ca, .us, .asia, or .uk domains in bulk_registration"); exit; } elsif ( $ca and $in{reg_type} eq 'new' ) { # for .ca domains, ensure a valid legal type was given *************** *** 518,524 **** } elsif ($eu){ $custom_verify='eu'; } ! my %verify_results = $XML_Client->validate( \%HTML, custom_tech_contact => $REG_SYSTEM{custom_tech_contact}, --- 531,537 ---- } elsif ($eu){ $custom_verify='eu'; } ! my %verify_results = $XML_Client->validate( \%HTML, custom_tech_contact => $REG_SYSTEM{custom_tech_contact}, *************** *** 693,698 **** --- 706,740 ---- $HTML{SPECIAL_DOMAIN_INFO} .= '\n"; $HTML{SPECIAL_DOMAIN_INFO} .= '\n"; $HTML{SPECIAL_DOMAIN_INFO} .= '\n"; + } elsif ( $asia ) { + my $ccodes; + $formCountry = "_asia"; + + # Show the data on the page NICELY... + $HTML{ced_contact_type} = $asia_ced_contact_type{$in{ced_contact_type}}; + $HTML{ced_locality_country} = $asia_ced_locality_country{$in{ced_locality_country}}; + if($in{ced_legal_entity_type} eq 'other') { + $HTML{ced_legal_entity_type}=$in{ced_legal_entity_type_info}; + } else { + $HTML{ced_legal_entity_type}=$asia_ced_entity_type{$in{ced_legal_entity_type}}; + } + if($in{ced_id_type} eq 'other') { + $HTML{ced_id_type}=$in{ced_id_type_info}; + } else { + $HTML{ced_id_type}=$asia_ced_identification_type{$in{ced_id_type}}; + } + + # Make sure the data is passed to the next screen... + $HTML{SPECIAL_DOMAIN_INFO} .= '\n"; + $HTML{SPECIAL_DOMAIN_INFO} .= '\n"; + $HTML{SPECIAL_DOMAIN_INFO} .= '\n"; + $HTML{SPECIAL_DOMAIN_INFO} .= '\n"; + $HTML{SPECIAL_DOMAIN_INFO} .= '\n"; + $HTML{SPECIAL_DOMAIN_INFO} .= '\n"; + $HTML{SPECIAL_DOMAIN_INFO} .= '\n"; + $HTML{SPECIAL_DOMAIN_INFO} .= '\n"; + $HTML{SPECIAL_DOMAIN_INFO} .= '\n"; + } elsif ( $in{domain} =~ /name$/ && $in{email_bundle} == 1) { $formCountry = "_name"; } elsif ( $in{domain} =~ /eu$/ ) { *************** *** 813,818 **** --- 855,872 ---- } next; } + + # + # Add the CED contact info if it's defined... + # + if ( $key =~ /^ced_/ ) { + if ( defined $in{$key} ) { + my $xcp_key = $key; + $xcp_key =~ s/^ced_//; + $xcp_request->{attributes}->{tld_data}->{ced_info}->{$xcp_key} = $in{$key}; + } + next; + } if ( $key eq 'forwarding_email' ) { $xcp_request->{attributes}->{tld_data}->{forwarding_email} = $in{$key}; *************** *** 1655,1660 **** --- 1709,1720 ---- $HTML{CITIZEN_COUNTRY_LIST} = locale_build_country_list( $domain_info->{attributes}->{nexus}->{validator} ? $domain_info->{attributes}->{nexus}->{validator} : '--'); + # Build .ASIA select options list for display in HTML templates... + $HTML{CED_CONTACT_TYPE_LIST}=build_ced_contact_type_select_list($domain_info->{attributes}->{ced_info}->{contact_type}); + $HTML{CED_LOCALITY_COUNTRY_LIST}=build_ced_locality_select_list($domain_info->{attributes}->{ced_info}->{locality_country}); + $HTML{CED_LEGAL_ENTITY_TYPE_LIST}=build_ced_entity_type_select_list($domain_info->{attributes}->{ced_info}->{legal_entity_type}); + $HTML{CED_ID_TYPE_LIST}=build_ced_entity_type_select_list($domain_info->{attributes}->{ced_info}->{id_type}); + } else { # make a new profile $HTML{reg_profile} = "New"; *************** *** 1787,1792 **** --- 1847,1865 ---- $HTML{APP_PURPOSE_LIST} = build_app_purpose_list() if not exists $HTML{APP_PURPOSE_LIST}; } elsif ( ( $in{domain} && + $in{domain} =~ /\.asia/i ) || + ( $in{domain_country} && + $in{domain_country} eq 'asia' ) ) { + $domainCountry = "_asia"; + $HTML{domain_country} = $in{domain_country}; + + # Build .ASIA select options list for display in HTML templates... + $HTML{CED_CONTACT_TYPE_LIST}=build_ced_contact_type_select_list($HTML{ced_contact_type}); + $HTML{CED_LOCALITY_COUNTRY_LIST}=build_ced_locality_select_list($HTML{ced_locality_country}); + $HTML{CED_LEGAL_ENTITY_TYPE_LIST}=build_ced_entity_type_select_list($HTML{ced_legal_entity_type}); + $HTML{CED_ID_TYPE_LIST}=build_ced_identification_type_select_list($HTML{ced_id_type}); + } + elsif ( ( $in{domain} && $in{domain} =~ /\.name/i && $in{email_bundle} == 1) || ( $in{domain_country} && $in{domain_country} eq 'name' ) ) { *************** *** 1843,1849 **** WHOIS Privacy:

WHOIS Privacy is applicable for .com, .net, .org, .biz, .cc, ! .tv, and .info domains.

WHOIS Privacy expiration date remains open for a domain that is set to auto-renew.

When the domain is not set to auto renew, --- 1916,1922 ---- WHOIS Privacy:

WHOIS Privacy is applicable for .com, .net, .org, .biz, .cc, ! .tv, .info, and .asia domains.

WHOIS Privacy expiration date remains open for a domain that is set to auto-renew.

When the domain is not set to auto renew, *************** *** 2072,2077 **** --- 2145,2163 ---- print_form("$path_templates/setup_profile.html",\%HTML); } + sub bulk_order_asia { + + my %HTML = ( + CGI => $cgi, + affiliate_id => $in{affiliate_id}, + domain_country => "asia", + reg_type => 'new', + bulk_order => 1, + title => 'Batch Domain Registration', + ); + print_form("$path_templates/setup_profile.html",\%HTML); + } + sub bulk_transfer { my %HTML = ( diff -r -c opensrs-client-2.9.9/cgi/register.cgi opensrs-client-3.0.0/cgi/register.cgi *** opensrs-client-2.9.9/cgi/register.cgi Tue Aug 21 18:32:40 2007 --- opensrs-client-3.0.0/cgi/register.cgi Tue Mar 18 14:31:14 2008 *************** *** 32,38 **** # pull in conf file with defined values # XXX NOTE XXX Update this configuration file BEGIN { ! do "/OpenSRS.conf"; } use CGI ':cgi-lib'; --- 32,42 ---- # pull in conf file with defined values # XXX NOTE XXX Update this configuration file BEGIN { ! $path_to_config = ""; ! if ($ENV{OSRS_CLIENT_ETC}){ ! $path_to_config = "$ENV{OSRS_CLIENT_ETC}"; ! } ! do "$path_to_config/OpenSRS.conf"; } use CGI ':cgi-lib'; Only in opensrs-client-2.9.9: diff diff -r -c opensrs-client-2.9.9/etc/OpenSRS.conf opensrs-client-3.0.0/etc/OpenSRS.conf *** opensrs-client-2.9.9/etc/OpenSRS.conf Tue Aug 21 18:32:40 2007 --- opensrs-client-3.0.0/etc/OpenSRS.conf Tue Mar 18 14:31:14 2008 *************** *** 64,73 **** # regular expression that lists the domains serviced by OpenSRS # this should not include the domains that you are not # authorized to register ! OPENSRS_TLDS_REGEX => "(\.ca|\.(bc|ab|sk|mb|on|qc|nb|ns|pe|nf|nt|nu|yk)\.ca|\.com|\.net|\.org|\.me\.uk|\.net\.uk|\.ltd\.uk|\.plc\.uk|\.co\.uk|\.org\.uk|\.tv|\.vc|\.com\.vc|\.net\.vc|\.org\.vc|\.cc|\.info|\.biz|\.name|\.us|\.com\.cn|\.net\.cn|\.org\.cn|\.cn|\.de|\.ch|\.nl|\.fr|\.be|\.eu|\.mobi|\.es)", # Regex of TLDs that support domain locking. ! TLDS_SUPPORTING_LOCKING => '\.(com|net|org|info|biz|us|name|cc|vc|tv)$', # regular expression that lists the domains which OpenSRS is authoritative for. OPENSRS_AUTHORITY => "(\.com|\.net|\.org|\.tv|\.cc)", --- 64,73 ---- # regular expression that lists the domains serviced by OpenSRS # this should not include the domains that you are not # authorized to register ! OPENSRS_TLDS_REGEX => "(\.ca|\.(bc|ab|sk|mb|on|qc|nb|ns|pe|nf|nt|nu|yk)\.ca|\.com|\.net|\.org|\.me\.uk|\.net\.uk|\.ltd\.uk|\.plc\.uk|\.co\.uk|\.org\.uk|\.tv|\.vc|\.com\.vc|\.net\.vc|\.org\.vc|\.cc|\.info|\.asia|\.biz|\.name|\.us|\.com\.cn|\.net\.cn|\.org\.cn|\.cn|\.de|\.ch|\.nl|\.fr|\.be|\.eu|\.mobi|\.es)", # Regex of TLDs that support domain locking. ! TLDS_SUPPORTING_LOCKING => '\.(com|net|org|info|asia|biz|us|name|cc|vc|tv)$', # regular expression that lists the domains which OpenSRS is authoritative for. OPENSRS_AUTHORITY => "(\.com|\.net|\.org|\.tv|\.cc)", *************** *** 83,89 **** # the different TLDs have different period years restrictions lookup_all_tlds => 1, # lookup related available domains RELATED_TLDS => [ ! [ ".com", ".net", ".org", ".info", ".biz" ], [ ".me.uk",".co.uk", ".org.uk" ], # with this array, you can provide suggestions --- 83,89 ---- # the different TLDs have different period years restrictions lookup_all_tlds => 1, # lookup related available domains RELATED_TLDS => [ ! [ ".com", ".net", ".org", ".info", ".biz", ".asia" ], [ ".me.uk",".co.uk", ".org.uk" ], # with this array, you can provide suggestions *************** *** 227,233 **** '.com' => 1, '.net' => 1, '.org' => 1, '.uk' => 1, '.ca' => 1, '.vc' => 0, '.cc' => 1, '.tv' => 1, '.de' => 1, '.info' => 1, '.biz' => 1,'.us' => 1, '.name' => 1, '.cn' => 1, ! '.fr' => 1,'.ch' =>1 ,'.nl' => 1, '.eu' => 1, '.be' => 1 } ); --- 227,234 ---- '.com' => 1, '.net' => 1, '.org' => 1, '.uk' => 1, '.ca' => 1, '.vc' => 0, '.cc' => 1, '.tv' => 1, '.de' => 1, '.info' => 1, '.biz' => 1,'.us' => 1, '.name' => 1, '.cn' => 1, ! '.fr' => 1,'.ch' =>1 ,'.nl' => 1, '.eu' => 1, '.be' => 1, ! '.asia' => 1 } ); *************** *** 274,280 **** ################################################################# # The version number shouldn't be modified, else it may cause inaccuracies in # support response. ! $OpenSRS::VERSION = "2.9.6"; ################################################################# # .de domains are normally disabled for the first 30 days after registration --- 275,281 ---- ################################################################# # The version number shouldn't be modified, else it may cause inaccuracies in # support response. ! $OpenSRS::VERSION = "3.0.0"; ################################################################# # .de domains are normally disabled for the first 30 days after registration diff -r -c opensrs-client-2.9.9/lib/OpenSRS/Country.pm opensrs-client-3.0.0/lib/OpenSRS/Country.pm *** opensrs-client-2.9.9/lib/OpenSRS/Country.pm Tue Aug 21 18:32:40 2007 --- opensrs-client-3.0.0/lib/OpenSRS/Country.pm Tue Mar 18 14:31:14 2008 *************** *** 7,19 **** =head1 SYNOPSIS use OpenSRS::Country; ! $country = code2country('jp'); # $country gets 'Japan' $code = country2code('Norway'); # $code gets 'no' ! @codes = all_country_codes(); @names = all_country_names(); ! # add "uk" as a pseudo country code for United Kingdom OpenSRS::Country::_alias_code('uk' => 'gb'); --- 7,19 ---- =head1 SYNOPSIS use OpenSRS::Country; ! $country = code2country('jp'); # $country gets 'Japan' $code = country2code('Norway'); # $code gets 'no' ! @codes = all_country_codes(); @names = all_country_names(); ! # add "uk" as a pseudo country code for United Kingdom OpenSRS::Country::_alias_code('uk' => 'gb'); *************** *** 82,88 **** # Public Global Variables #----------------------------------------------------------------------- use vars qw($VERSION @ISA @EXPORT @EXPORT_OK); ! $VERSION = sprintf("%d.%02d", q$Revision: 1.5 $ =~ /(\d+)\.(\d+)/); @ISA = qw(Exporter); @EXPORT = qw(code2country country2code all_country_codes all_country_names --- 82,88 ---- # Public Global Variables #----------------------------------------------------------------------- use vars qw($VERSION @ISA @EXPORT @EXPORT_OK); ! $VERSION = sprintf("%d.%02d", q$Revision: 1.6 $ =~ /(\d+)\.(\d+)/); @ISA = qw(Exporter); @EXPORT = qw(code2country country2code all_country_codes all_country_names *************** *** 285,291 **** code for United Kingdom, use the following: use OpenSRS::Country; ! OpenSRS::Country::_alias_code('uk' => 'gb'); With this code, both "uk" and "gb" are valid codes for United Kingdom, --- 285,291 ---- code for United Kingdom, use the following: use OpenSRS::Country; ! OpenSRS::Country::_alias_code('uk' => 'gb'); With this code, both "uk" and "gb" are valid codes for United Kingdom, *************** *** 325,331 **** country name: $| = 1; # turn off buffering ! print "Enter country code: "; chop($code = ); $country = code2country($code, LOCALE_CODE_ALPHA_2); --- 325,331 ---- country name: $| = 1; # turn off buffering ! print "Enter country code: "; chop($code = ); $country = code2country($code, LOCALE_CODE_ALPHA_2); *************** *** 508,514 **** cn:chn:156:China co:col:170:Colombia cr:cri:188:Costa Rica - cs:cgs:189:Serbia and Montenegro cu:cub:192:Cuba cv:cpv:132:Cape Verde cx:::Christmas Island --- 508,513 ---- *************** *** 562,567 **** --- 561,567 ---- ie:irl:372:Ireland il:isr:376:Israel in:ind:356:India + im:imn:833:Isle of Man io:::British Indian Ocean Territory iq:irq:368:Iraq ir:irn:364:Iran, Islamic Republic of *************** *** 604,609 **** --- 604,610 ---- mp:mnp:580:Northern Mariana Islands mq:mtq:474:Martinique mr:mrt:478:Mauritania + me:mne:499:Montenegro ms:msr:500:Montserrat mt:mlt:470:Malta mu:mus:480:Mauritius *************** *** 657,662 **** --- 658,664 ---- sl:sle:694:Sierra Leone sm:smr:674:San Marino sn:sen:686:Senegal + rs:srb:688:Serbia so:som:706:Somalia sr:sur:740:Suriname st:stp:678:Sao Tome and Principe diff -r -c opensrs-client-2.9.9/lib/OpenSRS/Language.pm opensrs-client-3.0.0/lib/OpenSRS/Language.pm *** opensrs-client-2.9.9/lib/OpenSRS/Language.pm Tue Aug 21 18:32:40 2007 --- opensrs-client-3.0.0/lib/OpenSRS/Language.pm Tue Mar 18 14:31:14 2008 *************** *** 50,56 **** # Public Global Variables #----------------------------------------------------------------------- use vars qw($VERSION @ISA @EXPORT_OK $OPENSRS); ! $VERSION = sprintf("%d.%02d", q$Revision: 1.10 $ =~ /(\d+)\.(\d+)/); @ISA = qw(Exporter); @EXPORT_OK = qw(code2language language2code all_language_codes all_language_names --- 50,56 ---- # Public Global Variables #----------------------------------------------------------------------- use vars qw($VERSION @ISA @EXPORT_OK $OPENSRS); ! $VERSION = sprintf("%d.%02d", q$Revision: 1.11 $ =~ /(\d+)\.(\d+)/); @ISA = qw(Exporter); @EXPORT_OK = qw(code2language language2code all_language_codes all_language_names *************** *** 275,280 **** --- 275,282 ---- pol swe /); + # No IDNs for .ASIA yet... + # } elsif ( $fqdn =~ /\.asia$/ ){ } elsif ( $fqdn =~ /\.de$/ ){ return (sort qw/ alb Only in opensrs-client-3.0.0/lib/OpenSRS/Util: Asia.pm diff -r -c opensrs-client-2.9.9/lib/OpenSRS/XML_Client.pm opensrs-client-3.0.0/lib/OpenSRS/XML_Client.pm *** opensrs-client-2.9.9/lib/OpenSRS/XML_Client.pm Tue Aug 21 18:32:40 2007 --- opensrs-client-3.0.0/lib/OpenSRS/XML_Client.pm Tue Mar 18 14:31:14 2008 *************** *** 1,5 **** #!/usr/bin/perl ! # $Id: XML_Client.pm,v 1.112 2006/11/22 22:17:28 sbelikov Exp $ # .Copyright (C) 2000 TUCOWS.com Inc. # .Created: 11/19/1999 # .Contactid: --- 1,5 ---- #!/usr/bin/perl ! # $Id: XML_Client.pm,v 1.113 2008/03/12 17:07:47 sbelikov Exp $ # .Copyright (C) 2000 TUCOWS.com Inc. # .Created: 11/19/1999 # .Contactid: *************** *** 406,412 **** if ($syntaxError = check_domain_syntax($domain)) { $problem_fields{Domain} = $domain . " - " . $syntaxError; } ! if ( $domain =~ /\.us$/ ) { if ( !$data->{app_purpose} ) { push @missing_fields, "Domain Name Application Purpose"; --- 406,412 ---- if ($syntaxError = check_domain_syntax($domain)) { $problem_fields{Domain} = $domain . " - " . $syntaxError; } ! if ( $domain =~ /\.us$/ ) { if ( !$data->{app_purpose} ) { push @missing_fields, "Domain Name Application Purpose"; *************** *** 652,658 **** $problem_fields{"$contact_types{$type} Email"} = $data->{"${type}_email"}; } ! if ( $data->{domain} =~ /\.(info|biz|name|us|de)/ ) { if ($data->{"${type}_phone"} !~ /^\+\d{1,3}\.\d{1,12}( *x\d{1,4})?$/){ # tell the registrant about the bad phone number $problem_fields{"$contact_types{$type} Phone"} = --- 652,658 ---- $problem_fields{"$contact_types{$type} Email"} = $data->{"${type}_email"}; } ! if ( $data->{domain} =~ /\.(info|biz|name|us|de|asia)/ ) { if ($data->{"${type}_phone"} !~ /^\+\d{1,3}\.\d{1,12}( *x\d{1,4})?$/){ # tell the registrant about the bad phone number $problem_fields{"$contact_types{$type} Phone"} = Only in opensrs-client-3.0.0/templates/manage: asia_ced_form.html diff -r -c opensrs-client-2.9.9/templates/manage/domain_auth_code_form.html opensrs-client-3.0.0/templates/manage/domain_auth_code_form.html *** opensrs-client-2.9.9/templates/manage/domain_auth_code_form.html Tue Aug 21 18:32:40 2007 --- opensrs-client-3.0.0/templates/manage/domain_auth_code_form.html Tue Mar 18 14:31:14 2008 *************** *** 8,15 **** Domain Auth Code ! !
must contain between 6 and 16 characters
--- 8,15 ---- Domain Auth Code ! !
must contain between 1 and 32 characters
diff -r -c opensrs-client-2.9.9/templates/manage/main_menu.html opensrs-client-3.0.0/templates/manage/main_menu.html *** opensrs-client-2.9.9/templates/manage/main_menu.html Tue Aug 21 18:32:40 2007 --- opensrs-client-3.0.0/templates/manage/main_menu.html Tue Mar 18 14:31:14 2008 *************** *** 53,59 **** {{f_modify_domain_extras}}
This page contains non-classifiable domain data like: domain auth info, ! forwarding email address, nexus data and domain validation.

{{f_modify_whois_rsp_info}}
--- 53,59 ---- {{f_modify_domain_extras}}
This page contains non-classifiable domain data like: domain auth info, ! forwarding email address, nexus data (.us), ced contact info (.asia) and domain validation.

{{f_modify_whois_rsp_info}}
diff -r -c opensrs-client-2.9.9/templates/manage/modify_ca_org_contact.html opensrs-client-3.0.0/templates/manage/modify_ca_org_contact.html *** opensrs-client-2.9.9/templates/manage/modify_ca_org_contact.html Tue Aug 21 18:32:40 2007 --- opensrs-client-3.0.0/templates/manage/modify_ca_org_contact.html Tue Mar 18 14:31:14 2008 *************** *** 32,43 **** - CIRA Member: - {{member_field}} - - - - Description: --- 32,37 ---- *************** *** 55,61 **** * Setting the CWA (Change Without Approval) flag will allow your registrar (Tucows) to modify your email address without submitting the request to the registry ! (CIRA) for processing. If you set this flag to yes, you will be required to confirm this change at

https://registrants.cira.ca/user --- 49,56 ---- * Setting the CWA (Change Without Approval) flag will allow your registrar (Tucows) to modify your email address without submitting the request to the registry ! (CIRA) for processing. If you set this flag to yes, you will be required to ! confirm this change at:

https://registrants.cira.ca/user *************** *** 63,68 **** --- 58,67 ---- + + + +
diff -r -c opensrs-client-2.9.9/templates/manage/modify_domain_extras.html opensrs-client-3.0.0/templates/manage/modify_domain_extras.html *** opensrs-client-2.9.9/templates/manage/modify_domain_extras.html Tue Aug 21 18:32:40 2007 --- opensrs-client-3.0.0/templates/manage/modify_domain_extras.html Tue Mar 18 14:31:14 2008 *************** *** 11,16 **** --- 11,17 ---- {{domain_auth_code_form}} {{forwarding_email_form}} {{us_nexus_form}} + {{asia_ced_form}} {{trademark_form}} {{dns_error_form}} {{uk_whois_opt_form}} diff -r -c opensrs-client-2.9.9/templates/reg_system/bulk_order.html opensrs-client-3.0.0/templates/reg_system/bulk_order.html *** opensrs-client-2.9.9/templates/reg_system/bulk_order.html Tue Aug 21 18:32:40 2007 --- opensrs-client-3.0.0/templates/reg_system/bulk_order.html Tue Mar 18 14:31:14 2008 *************** *** 126,132 **** Phone Number: !
(eg. +1.4165551122x1234 for .info/.biz/.us/.name/.cn/.org domains)
--- 126,132 ---- Phone Number: !
(eg. +1.4165551122x1234 for .info/.biz/.us/.name/.cn/.org/.asia domains)
*************** *** 134,140 **** *optional*
Fax Number: !
(eg. +1.4165551122x1234 for .info/.biz/.us/.name/.cn/.org domains)
--- 134,140 ---- *optional*
Fax Number: !
(eg. +1.4165551122x1234 for .info/.biz/.us/.name/.cn/.org/.asia domains)
*************** *** 200,206 **** Phone Number: !
(eg. +1.4165551122x1234 for .info/.biz/.us/.name/.cn/.org domains)
--- 200,206 ---- Phone Number: !
(eg. +1.4165551122x1234 for .info/.biz/.us/.name/.cn/.org/.asia domains)
*************** *** 208,214 **** *optional* Fax Number: !
(eg. +1.4165551122x1234 for .info/.biz/.us/.name/.cn/.org domains)
--- 208,214 ---- *optional* Fax Number: !
(eg. +1.4165551122x1234 for .info/.biz/.us/.name/.cn/.org/.asia domains)
*************** *** 277,283 **** Phone Number: !
(eg. +1.4165551122x1234 for .info/.biz/.us/.name/.cn/.org domains)
--- 277,283 ---- Phone Number: !
(eg. +1.4165551122x1234 for .info/.biz/.us/.name/.cn/.org/.asia domains)
*************** *** 285,291 **** *optional* Fax Number: !
(eg. +1.4165551122x1234 for .info/.biz/.us/.name/.cn/.org domains)
--- 285,291 ---- *optional* Fax Number: !
(eg. +1.4165551122x1234 for .info/.biz/.us/.name/.cn/.org/.asia domains)
Only in opensrs-client-3.0.0/templates/reg_system: bulk_order_asia.html diff -r -c opensrs-client-2.9.9/templates/reg_system/bulk_transfer.html opensrs-client-3.0.0/templates/reg_system/bulk_transfer.html *** opensrs-client-2.9.9/templates/reg_system/bulk_transfer.html Tue Aug 21 18:32:40 2007 --- opensrs-client-3.0.0/templates/reg_system/bulk_transfer.html Tue Mar 18 14:31:14 2008 *************** *** 118,124 **** Phone Number: !
(eg. +1.4165551122x1234 for .info/.biz/.us/.name/.cn/.org domains)
--- 118,124 ---- Phone Number: !
(eg. +1.4165551122x1234 for .info/.biz/.us/.name/.cn/.org/.asia domains)
*************** *** 126,132 **** *optional* Fax Number: !
(eg. +1.4165551122x1234 for .info/.biz/.us/.name/.cn/.org domains)
--- 126,132 ---- *optional* Fax Number: !
(eg. +1.4165551122x1234 for .info/.biz/.us/.name/.cn/.org/.asia domains)
*************** *** 192,198 **** Phone Number: !
(eg. +1.4165551122x1234 for .info/.biz/.us/.name/.cn/.org domains)
--- 192,198 ---- Phone Number: !
(eg. +1.4165551122x1234 for .info/.biz/.us/.name/.cn/.org/.asia domains)
*************** *** 200,206 **** *optional* Fax Number: !
(eg. +1.4165551122x1234 for .info/.biz/.us/.name/.cn/.org domains)
--- 200,206 ---- *optional* Fax Number: !
(eg. +1.4165551122x1234 for .info/.biz/.us/.name/.cn/.org/.asia domains)
*************** *** 268,274 **** Phone Number: !
(eg. +1.4165551122x1234 for .info/.biz/.us/.name/.cn/.org domains)
--- 268,274 ---- Phone Number: !
(eg. +1.4165551122x1234 for .info/.biz/.us/.name/.cn/.org/.asia domains)
*************** *** 276,282 **** *optional* Fax Number: !
(eg. +1.4165551122x1234 for .info/.biz/.us/.name/.cn/.org domains)
--- 276,282 ---- *optional* Fax Number: !
(eg. +1.4165551122x1234 for .info/.biz/.us/.name/.cn/.org/.asia domains)
diff -r -c opensrs-client-2.9.9/templates/reg_system/order.html opensrs-client-3.0.0/templates/reg_system/order.html *** opensrs-client-2.9.9/templates/reg_system/order.html Tue Aug 21 18:32:40 2007 --- opensrs-client-3.0.0/templates/reg_system/order.html Tue Mar 18 14:31:14 2008 *************** *** 116,122 **** Phone Number: !
(eg. +1.4165551122x1234 for .info/.biz/.us/.name/.cn/.org domains)
--- 116,122 ---- Phone Number: !
(eg. +1.4165551122x1234 for .info/.biz/.us/.name/.cn/.org/.asia domains)
*************** *** 124,130 **** *optional* Fax Number: !
(eg. +1.4165551122x1234 for .info/.biz/.us/.name/.cn/.org domains)
--- 124,130 ---- *optional* Fax Number: !
(eg. +1.4165551122x1234 for .info/.biz/.us/.name/.cn/.org/.asia domains)
*************** *** 190,196 **** Phone Number: !
(eg. +1.4165551122x1234 for .info/.biz/.us/.name/.cn/.org domains)
--- 190,196 ---- Phone Number: !
(eg. +1.4165551122x1234 for .info/.biz/.us/.name/.cn/.org/.asia domains)
*************** *** 198,204 **** *optional* Fax Number: !
(eg. +1.4165551122x1234 for .info/.biz/.us/.name/.cn/.org domains)
--- 198,204 ---- *optional* Fax Number: !
(eg. +1.4165551122x1234 for .info/.biz/.us/.name/.cn/.org/.asia domains)
*************** *** 266,272 **** Phone Number: !
(eg. +1.4165551122x1234 for .info/.biz/.us/.name/.cn/.org domains)
--- 266,272 ---- Phone Number: !
(eg. +1.4165551122x1234 for .info/.biz/.us/.name/.cn/.org/.asia domains)
*************** *** 274,280 **** *optional* Fax Number: !
(eg. +1.4165551122x1234 for .info/.biz/.us/.name/.cn/.org domains)
--- 274,280 ---- *optional* Fax Number: !
(eg. +1.4165551122x1234 for .info/.biz/.us/.name/.cn/.org/.asia domains)
Only in opensrs-client-3.0.0/templates/reg_system: order_asia.html Only in opensrs-client-3.0.0/templates/reg_system: verify_asia.html diff -r -c opensrs-client-2.9.9/templates/renew/renew_domain_menu.html opensrs-client-3.0.0/templates/renew/renew_domain_menu.html *** opensrs-client-2.9.9/templates/renew/renew_domain_menu.html Tue Aug 21 18:32:40 2007 --- opensrs-client-3.0.0/templates/renew/renew_domain_menu.html Tue Mar 18 14:31:14 2008 *************** *** 62,68 **** !
* (only applicable for ".net", ".com", ".org", ".tv", ".info", ".biz", ".vc", ".name", ".cc", ".ca", ".de", ".be", ".eu" and ".uk" domains)

** (2 years only for ".uk" and 1 year for ".de", ".be" and ".eu" domains) --- 62,69 ---- !
* (only applicable for ".net", ".com", ".org", ".tv", ".info", ".biz", ".vc", ".name", ".cc", ".ca", ".de", ".be", ! ".eu", ".uk", and ".asia" domains)

** (2 years only for ".uk" and 1 year for ".de", ".be" and ".eu" domains) diff -r -c opensrs-client-2.9.9/templates/renew/renew_domain_menu_name.html opensrs-client-3.0.0/templates/renew/renew_domain_menu_name.html *** opensrs-client-2.9.9/templates/renew/renew_domain_menu_name.html Tue Aug 21 18:32:40 2007 --- opensrs-client-3.0.0/templates/renew/renew_domain_menu_name.html Tue Mar 18 14:31:14 2008 *************** *** 63,69 **** !
* (only applicable for ".net", ".com", ".org", ".tv", ".info", ".biz", ".vc", ".name", ".cc" and ".ca" domains)
** (If present, email forwarding will be renewed automatically with the domain) Logout --- 63,69 ---- !
* (only applicable for ".net", ".com", ".org", ".tv", ".info", ".biz", ".vc", ".name", ".cc", ".ca", and ".asia" domains)
** (If present, email forwarding will be renewed automatically with the domain) Logout diff -r -c opensrs-client-2.9.9/templates/whois_privacy/whois_privacy_menu.html opensrs-client-3.0.0/templates/whois_privacy/whois_privacy_menu.html *** opensrs-client-2.9.9/templates/whois_privacy/whois_privacy_menu.html Tue Aug 21 18:32:40 2007 --- opensrs-client-3.0.0/templates/whois_privacy/whois_privacy_menu.html Tue Mar 18 14:31:14 2008 *************** *** 36,42 **** !
* ( only applicable for .com, .net, .org, .biz, .cc, .tv, and .info domains )
Logout --- 36,42 ---- !
* ( only applicable for .com, .net, .org, .biz, .cc, .tv, .info, and .asia domains )
Logout opensrs-client-3.0.0/ChangeLog0000644017777601777760000010327710770014202017315 0ustar nobodynogroup000000000000002008/02/28 v3.0.0 - Added ability for .ASIA TLD (all configurations, scripts, and templates) 2007/08/21 v2.9.9 - cgi/manage.cgi * whois privacy is no longer a paid service - templates/manage/whois_privacy_form.html * whois privacy is no longer a paid service * typo fixed - templates/reg_system/reg_period_hints.html * updated .mobi min/max registration period 2007/05/30 v2.9.8 - lib/OpenSRS/Languamge.pm * added language codes for .org .info .biz 2006/11/09 v2.9.7 - .DE compliance changes * .DE domains now have an owner (called "Holder" in whois response) 2006/09/20 v2.9.6 - manage.cgi, renew.cgi, xpackmange.cgi * separate link to recover subuser password - cgi/verify_install.cgi * Crypt::CBC::VERSION 2.17 correct usage - cgi/reg_system.cgi, cgi/manage.cgi, cgi/xpackmanage.cgi * MOBI support * EU contact set requirements - owner org_name not mandatory * ES support 2006/03/29 v2.9.5 - cgi/manage.cgi * EU/BE support - cgi/manage.cgi * EU/BE support - lib/OpenSRS/CBC_Connector.pm * Crypt::CBC::VERSION 2.17 correct usage 2005/11/15 v2.9.4 -lib/XML_Codec.pm * perl 5.8 utf-8 workaround for XML::Parser utf-8 contamination client now can work under perl >= 5.008 - cgi/verify_install.cgi * perl 5.8/5.6 Crypt:CBC vs CBC for DES encryption - lib/OpenSRS/CBC_Connector.pm * perl 5.8/5.6 Crypt:CBC vs CBC for DES encryption -client/etc/OpenSRS.conf * HTTP default encoding to has more control over what is sent by web-server (under mod_perl/CGI.pm,...) -cgi/ca_reg.cgi * if Country is CA - check the province/territory -cgi/manage.cgi * HTTP charset header as per OpenSRS.conf * misspelled word 'changeble' to 'changeable' for backward compatibility the API response contains both version of the word -cgi/renew.cgi * when .CA domain renewed then admin contact is used instead of owner 2005/11/15 v2.9.3 -cgi/manage.cgi * .uk - removed tech contact admin/billing - only first/last name and email mandatory -cgi/reg_system.cgi * .uk - tech contact optional admin/billing - only first/last name and email mandatory 2005/09/02 v2.9.2 - cgi/xpackmanage.cgi * requests in progress for XPACK tlds - lib/OpenSRS/Util/Canada.pm (ca_reg.cgi) * Municipality prefixes (removed township, district, police) - lib/OpenSRS/Language.pm (reg_system.cgi) * allowed languages for .ORG IDN domains - cgi/dns_manage.cgi * fixed toggling of the "URL Frame" option in Domain Forwarding - cgi/wsb.cgi * now passes user first and last name to Websiste Builder * modified validation of FTP username * syntax change from Brand URL to Brand Hostname 2005/05/06 v2.9.1 - cgi/xpackmanage.cgi * new TLD added (mx dk pl) * country code list based on ISO list unified usage of country codes * bug-fixes and code clean-up 2005/05/06 v2.9 - cgi/manage.cgi * Whois privacy on/off - cgi/reg_system.cgi * new flag f_whois_privacy to register Whois privacy with domain registration/transfer - cgi/renew.cgi * Whois privacy Enabled/Disabled displaying - cgi/whois_privacy.cgi * Standalone Whois privacy registration 2005/04/07 v2.8.9 - cgi/xpackmange.cgi * new TLD added (it, at, be) - cgi/wsb.cgi * Website bulder reference implementation script 2005/01/28 v2.8.8 - lib/OpenSRS/XML_Client.pm * new API call to cancel new .CA order that has not been confirmed by registrant. - etc/OpenSRS.conf * new field 'cwa' in CA_EXTRA_FIELDS - cgi/manage.cgi * setting of change Without Approval (CWA) flag through organization contact changes screen for .CA. * .CC/.TV back to regular manage.cgi * switch to new cgi to manage .NL/.FR/.CH domains (xpackmanage.cgi) * Simplified for to change nameserver for domain * Inaccurate whois warning -cgi/reg_syste.cgi * .TV registry do not report premium .TV domains as available therefore functionality removed * bulk orders for .TV * IDN .ORG/.BIZ/.CC/.TV 2004/11/12 v2.8.7 - cgi/reg_system.cgi * bug fix (language tag is not required for transfer of IDN domains) - cgi/ca_reg.cgi * new CIRA web whois url for conflicting domain names - cgi/manage.cgi * temporary switch to new cgi to manage .CC/.TV domains (xpackmanage.cgi) 2004/10/04 v2.8.6 - cgi/emaildefense.cgi * Bug fixes - lib/OpenSRS/CBC_Connector.pm * Detailed output for 'Unrecognized Peer' error - lib/OpenSRS/TPP_Client.pm * Protocol version upgrade - lib/OpenSRS/XML_Client.pm * new API call to check .CA new domain order status * new API call to get list of domains with expiration date within specified range. List of domains limited to the RSP. No registrant authentication is required 2004/08/23 v2.8.5 - reg_system.cgi * IDN .DE support - renew.cgi * Bug fixes 2004/07/13 v2.8.4 - OpenSRS.conf * new settings for OpenSRS conversion server connection: REMOTE_IDN_HOST REMOTE_IDN_PORT IDN_ENCODING_TYPE IDN_CONVERSION_TOOL_LINK * removed $UNIVERSAL_ENCODING_TYPE. - verify_install.pl *includes new tests for IDN conversion support: 1. Check if IDN conversion library locally installed 2. Check connection to OSRS IDN conversion server 3. Check conversion from Punycode to Native 4. Check conversion from Native to Punycode - manage.cgi * removed IDN and RACE conversions. Punycode domain name must be used to manage domains. - renew.cgi * removed IDN and RACE conversions. Punycode domain name must be used to renew domains. # send password feature implemented (similar to manage.cgi) - reg_system.cgi * replaced RACE conversions with IDN conversions - RACE.cgi REMOVED - Punycode.cgi ADDED - OpenSRS::Language.pm * utf8_to_puny renamed to native_to_puny * puny_to_utf8 renamed to puny_to_native * Net::LibIDN not required to be installed locally (OSRS IDN conversion service will be used if Net::LibIDN not present) - directory templates/RACE renamed to templates/PUNYCODE - antispam.cgi * Email defense client implementation - OpenSRS::Util::Session.pm * fixed a bug with serialization with Data::Dumper with references to the same object 2004/05/21 v2.8.3.1 -reg_system.cgi * TLD and ccTLD specific contact validation functionality restored (was broken in 2.8.2.1) * .UK transfer with contact change 2004/05/06 v2.8.3 This distribution contains unsupported IDN functionality (see 2.8.2.1) - manage.cgi * Option to unlock domain befor enameserver changes * UK whois opt-out * UK Domain tag change request * Bulk contact update report email field - reg_system.cgi * UK transfers in with(out) contact changes. - renew.cgi * send password feature as in manage.cgi - verify_install.cgi * check for optional modules - OpenSRS.conf * new .UK tlds bug fixes for manage.cgi, reg_cert.cgi, CBC_Connector.pm, HTTPS_Connector.pm 2004/04/12 v2.8.2.1-unsupported - RACE.cgi converts IDN names UTF-*, RACE , Punycode Net::LibIDN perl package is a prerequisite (http://www.gnu.org/software/libidn/) - reg_system.cgi convert UTF-8 name into punycode OpenSRS::Langauge.pm implements (Net::LibIDN dependent) utf8_to_puny() puny_to_utf8() RACE encoding support removed encoding_type field in API sw_register may contain language tag 2004/03/31 v2.8.2 - reg_email.cgi has been modified not to use query email as the means to obtain contact information. Instead we're using query contact command. - Bug fix in RACE converstion tables (affected Greek alphabet) - Bug fix in XML_Codec.pm. During data convertion to XML the source data were changed and this cuased a problem with resubmiting the request with &"'<> symbols in data - dns_manage.cgi * '.' Automatically added for record entries * Improved error messaging * Enhanced Zone Retrieve functionality * Domain forwarding optionally set for www subdomain * Additional entry option for MX and A records * Improved navigation between zone management * Various bug fixes 2004/01/13 v2.8.1 - changes to manage.cgi for uk 'domains extra': added option to hide/display personal contact information in Nominet's whois - removed communication layer from TPP_Client.pm and XML_Client.pm and added new packages for communication: CBC_Communicator.pm and HTTPS_Communicator.pm - new flags in OpenSRS.conf: connection_type and REMOTE_HTTPS_PORT. - changes to verify_install.pl to cover testing of different types of connection [HTTPS,CBC]. - changes to reg_email.cgi to replace crypted string method of keeping order data with session variables. - new configuration flags $F_SHOW_CC_FIELDS for reg_system.cgi, reg_email.cgi, reg_cert.cgi, ca_reg.cgi - bug fixes manage.cgi - list of countries based on new package lib/OpenSRS/Country (derived from CPAN Locale::Country) - flag $MANAGE{show_auto_renew} - fixed sorting feature in view expiring/expired domains reg_email.cgi - session as in ca_reg.cgi and templates changes reg_system.cgi - list of countries based on new package lib/OpenSRS/Country (derived from CPAN Locale::Country) renew.cgi - invalid username/passowrd error handling verify_install.cgi -check authentication for CBC::Blowfish and HTTPS 2003/12/15 v2.8.0 - changes to reg_email, reg_email's templates, and Email.conf - changes to reg_cert, and cert_info.html template, to display warning that CSR for IIS should be replaced with the new CSR when renewing the cert - restored the commented-out 'process => handle' line for bulk transfer 2003/08/29 v2.78 - minor bug fixes 2003/07/16 v2.77 - various bug fixes. - added a number of new server types to Cert.conf 2003/06/09 v2.76 - added .de transfer and renewal functionality - .de owner info can now be modified 2003/04/10 v2.75 - added .de registration/management capabilities - misc. changes to the reg_cert's templates - new 'renewals_enabled' config parameter added to etc/Cert.conf - renewal handling added to reg_cert.cgi - reg_cert.cgi now uses cookie-based authentication - new configuration file etc/Renewals.conf used (by tpp_renew.cgi) - tpp_renew.cgi added (it works in conjunction with reg_cert.cgi) - get_renewable_items() and get_item() calls added to TPP_Client.pm - "Special Intrustions" handling in reg_cert.cgi - Fix spelling of "Organizaiton" in manage.cgi - Added contact reusability to reg_cert.cgi - get_user_contacts() call added to TPP_Client.pm - New syntax for "get approvers list" api call in reg_certs.cgi - Moved %EMAIL_REG_PERIODS from TPP_Client.pm to Email.conf - Added response_converter to TPP_Client creation in reg_email.cgi - Removed sub build_list_from_file in TPP_Client.pm - Replaced CSR generation instructions link with alink to a white labled version 2003/03/14 v2.74 - Added .uk renewal capability - Changed $RENEW{capability}->{.uk} = 1 in OpenSRS.conf - Modified renew_domain_menu.html, view_expire_domains.html to add some information for .uk - Added ability to set-up handling of missadressed emails when purchasing first email account on particular domain - reg_email.cgi 2003/03/10 v2.73 - Changed template templates/ca_reg/complete_municipal.html 2003/02/27 v2.72 - Added a capability to register second level .cn domains. - Updates of "Thank you notes" for email purchase. Both text and html versions have been updated 2003/02/24 v 2.71 - IMPORTANT! reg_system.cgi: remove support for old, coupon based certs purchasing system. - Added support for up to 100M email boxes for email client - Miscelaneous bug fixes 2003/02/10 v2.7 - Miscelaneous bug fixes - Email and certs client are now included - In Email and Cert client, contact_set attribute has been moved one level up from product_data to create_items. Until now, the server was accepting both possibilities, from now on it will accept only the proper one. 2002/12/10 v2.62 - Added .name renewal capability - renew.cgi now displays forwarding email information with a new html template: renew_domain_menu_name.html - Removed .name from renew_domain_menu.html - Changed $RENEW{capability}->{.name} = 1 in OpenSRS.conf 2002/12/10 v2.61 - Added version number to OpenSRS.conf file. This is used by verify_install.cgi to report client version. Note that this should never be modified manually, else it will cause a delay or inaccuracies in getting a support response. - Added $manage{password_send_to} and $manage{password_send_subuser} to etc/OpenSRS.conf. These work along with allow_password_requests to determine which contact the password is sent to, and whether the main or the sub-user password is sent. - Changed url from mailhelp.webmaillogin.com to help.webmaillogin.com in templates/reg_email/register_results.html 2002/11/22 v2.6 - Added registration script for Digital Certificates. New files: cgi/reg_cert.cgi, cgi/cert.css, etc/Cert.conf, templates/reg_cert/* 2002/11/15 v2.59 - Added flag $REG_SYSTEM{ F_SUPPORT_CERTS } to etc/OpenSRS.conf. If set, purchase certificate operations will be allowed from within reg_system.cgi. - It is recommended that you use the latest version of Digest::MD5 with the ca_reg.cgi component. Session handling works best with v2.20 or higher. - new reference implementation for registering .ca domains (ca_reg.cgi). New configuration parameter added (OpenSRS.conf) to specify log files location. New attributes added to sw_register command to specify how to register .ca domain. - fixed bug with sending email from reg_system.cgi, renew.cgi when running under Apache::Registry (OpenSRS/Util/Common.pm). - New attribute added into response on sw_register command (admin_email address). The attribure is used to send 'thank_you' email when new .ca domain is registered for an existing CIRA registrant. The attribute is returned for all tlds 2002/08/27 v2.58 - Modified scripts to use get_domain, type => expire_action and modify_domain, data => expire_action instead of the deprecated get_domain, type => auto_renewal_flag and modify_domain, data => auto_renew - Changed renew.cgi to return an error when trying to login with a domain not sponsored by the current reseller. - Changed manage.cgi's renewal views to only allow renewal actions on domains through the current reseller. 2002/07/11 v2.57 - Support for transaction queuing on supplier outages (controlled by setting F_QUEUE_SUPPLIER_UNAVAILABLE config variable to 1) 2002/06/20 v2.56 - Added optional logging of XML communication to/from OpenSRS. This is controlled by $OPENSRS{ xml_logfile } variable in etc/OpenSRS.conf. - Command-line script for bulk locking/unlocking of domains added ( /bin/bulk_lock.pl ). Run it with no arguments for a usage statement. - Updated .name forwarding email validation in XML_Client.pm to allow forwarding to another .name email address 2002/05/08 v2.55 - Enabling .name synchronous registrations via reg_system.cgi: created new .name-specific templates (order_name, verify_name) and coding to CGI. Bulk registrations are not possible through default reg_system.cgi. - Removed reg_system.name CGI and templates - Small improvement to error reporting in manage.cgi for contact changes. - Changed client license from GPL to LGPL - Added '.us' to list of TLDs that can renew (OpenSRS.conf -> %RENEW hash) 2002/05/08 v2.54 - Bulk .us order capable with action=bulk_order_us - Added Nexus validation to reg_system.cgi for .us registrations - Enhanced reg_system.cgi to accept Nexus data from the server when basing new domains on existing .us ones. - Introduced RETRY_DOMAIN_LOOKUP flag to lib/OpenSRS/XML_Client.pm If RETRY_DOMAIN_LOOKUP is set (default) then try to resend lookup request on communication errors. 2002/04/23 v2.53 - introduced realtime .us registrations via reg_system.cgi - removed reg_system.us.cgi - changes to manage.cgi (and templates): - added new "Domain Extras" navigation link - Moved Auth Info (.info, .biz and .us) and Forwarding Email (.name) to "Domain Extras" page - introduced capability to modify .us nexus information in the "Domain Extras" page - changes to OpenSRS.conf: - added .com.vc, .org.vc and .net.vc to default list of possible TLDs - removed .us from the CANT_SUPPORT hash - added .vc to OPENSRS_AUTHORITY hash - added "allow_domain_locking" flag to MANAGE hash 2002/03/19 v2.52 - Modified reg_system.us.cgi to include non-trademark preregistrations. Can be executed by specifying flag_tm=0 in URL. if flag_tm=1 is specified, the same trademark process will be executed as in version 2.51 If no parameters are supplied, flag_tm=1 will be assumed. - Removed restriction of US address for owner contact on dot us preregistrations - Changed required trademark information for .us prereg from owner first and last name to owner organization as per change in registry requirements - ability to place domains on lock (may not be enabled server- side yet so currently unusable) - added affiliate_id variable to renew.cgi and API to be used as attribute of renew order - Supports transfers of multi-lingual domains (must have $USE_RACE enabled, Perl 5.6 or above, and UTF-8 browser encoding type) Additional information provided, when selecting another domain in the same profile - gives a listing of domains, their expiry dates and auto-renew settings - if $MANAGE{ allow_renewals } is set in the OpenSRS.conf file, additionally allows renewal of domain and/or setting of auto-renew flag 2002/02/28 v2.51 Introduced reg_system.us.cgi for .us trademark preregistrations 2002/02/13 v2.50 Introduced .biz client for .Biz Round Robin functionality - added reg_system.biz.cgi and various html files 2002/02/05 v2.49 Introduced initial .name manageability into MWI. - ability to manage .name domain nameservers and forwarding email address (if it was purchased) 2002/01/22 v2.48 Introduced admin contact section for sw_register command - admin contact section added - templates for reg_system.cgi/register.cgi changed - XML_Client (verify contacts) changed - reg_system.name.cgi changed to work with new XML_Client NOTES: XML_Client not compatible with old (version < 2.48 ) reg_system.cgi/register.cgi/reg_system.name.cgi 2002/01/09 v2.47 Introduced .name preregistration capability: - added reg_system.name.cgi and templates - changed XML_Client.pm::check_domain_syntax to include .name and allow for 'same as admin' type contact validation - added .name to $OPENSRS_TLDS_REGEX 2001/12/10 v2.46 Supports transfers for .info. Supports renewals for .info/.biz/.tv API for renew domain, sw_register now accepts an optional attribute 'handle'. - valid values are 'save' or 'process' and will override process immediate flag - Ability to view or modify .info or .biz domain auth code - Renewals returns order ID - Ability to e-mail registrant for forgotten username or password. This can be turned on or off in the config file. - Added client-side phone and fax number checking for .biz and .info - Ability to send out mail for renewal and certificate orders - Management of RSP whois info 2001/11/16 v2.45 Added a template for .ca transfers. 2001/07/27 v2.42 Changed XML_Client.pm to use "Crypt::CBC" instead of old version of CBC. - removed CBC.pm from package, since it's not being used anymore. - be aware that you might need to install "Crypt::CBC" from CPAN. Removed Client.pm, since it's not being used anymore. Add new version of verify_install script, contributed by Mark. 2001/07/05 v2.41 (unsuported) Enabled .info landrush preregistrations. Also added .biz preregistrations capabilities. - added capability of basing an order on a previously preregistered order. - added reg_system.biz - now needs Locale::Country module. It is supplied in the code (tarball) or can be taken from CPAN. Also it is included in the libs directory of the client. - modified templates, replaced the hardcoded country list for reg_system.info, added landrush support. 2001/06/19 v2.4 Enabled .cc registrations. Enhanced transfer response to include the transfer state. - fixed .info bugs - added "Use Socket" to OpenSRS.conf for NT style installations. - fixed various typos and grammar fixes - sub user accounts in manage interface now show messages 2001/06/05 v2.34 (unsuported) Added the capability of preregistering .info domains via a brand new reg_system.info.cgi. The client now requires HTML::Template module. - fixed purchasing of web certs - fixed registration of multilingual domains in the same profile - fixed creation of multilingual nameservers - fixed new renew date in renew.cgi - fixed change ownership username in manage.cgi to be case insensitive 2001/04/20 v2.33 Added %RACESETTINGS to "use vars qw" Must get Storable.pm from CPAN Added $USE_RACE setting to OpenSRS.conf to disable RACE (must have Perl 5.6 or higher in order to utilize RACE in this version). 2001/04/19 v2.33 Introduced the new RACE. From now on all the pages are and should be encoded in UTF8. Note that the Unicode::Map module is no longer needed. Unicode::String module is needed only for RACE.cgi (not needed for RACE.pm). Added $UNIVERSAL_ENCODING_TYPE global constant in OpenSRS.conf. Valid values for the encoding_type attribute are "" for ASCII and "utf-8" for everything else. - fixed .ca bulk orders - fixed registration verification page to include domain description - fixed the green asterisk under renew domain menu - fixed .tv high profile registration issues - renewals now respect the process orders immediately flag. 2001/02/10 v2.32 Enhancements to reg_system.cgi to support digital certificate purchases. Includes new templates for reg_system.cgi, and new API call added to XML_Client.pm. 2001/01/26 v2.31 Enhancements to reg_system.cgi to support .vc,.tv domains. Includes new API call added to XML_Client.pm, and few new functions in reg_system to support .tv, as well as new post_lookup hash in OpenSRS.conf. Also created and made changes to reg_system templates to support .tv registrations. Enhancements to reg_system.cgi to support new returns from OpenSRS server for lookups. This goes with .ca registration going real-time. Also added new reg_system template which forces registrant to link a new domain to an existing profile. 2001/01/02 Added client Renew CGI and templates. 2000/12/19 Enhancements to manage.cgi to support .ca domains. Includes new templates for manage.cgi. Added new Waiting Request History functionality to view previous activity on domains with asynchronous registries Added new CustomDebug.pm utility package for debugging. 2000/10/26 Added RACE.cgi (a cgi script for verifying the RACE encoding) 2000/10/24 Added support for multi-lingual domain names - added new RACE.pm package and RACE.conf file - new dependencies on Unicode::Map and Unicode::String CPAN packages - added maps directory which contains customized Unicode maps required for OpenSRS. These must be copied to the {perlInstallation}/Unicode/Map/{languageGroup} directory. The first two maps (BIG5 and KSC5601-1992) are part of the EASTASIA group. - added encoding_types list file in templates - added check for bad IP return from server in verify_install.cgi - XML_Client.pm version changed to "2.2.1b" Added support for suggesting the name of the domain. Use RELATED_TLDS to specify catchy suffixes to domain names 2000/09/22 - removed addition of password validation from previous distribution - bug fixes to .ca registrations 2000/09/14 Changes to handle .ca registration: - extra fields - new .ca-specific templates - both "pre" and "advance" registration periods - handle "ca_prereg" status on domain lookups Changes to XML_Client.pm and reg_system.cgi and manage.cgi to prevent registrants from using apostrophes in passwords In XML_Client.pm, don't send quit command unless the socket is already open (eliminates useless network traffic) reg_system.cgi: impliment email fix provided by retsiger reseller (Thanks!) manage.cgi/OpenSRS.conf: tweaked cookie management to differentiate between live and rite environments OpenSRS.conf/XML_Client.pm: moved $RELATED_TLDS and $OPENSRS_TLDS_REGEX from global definition to %OPENSRS hash and make XML_Client.pm no longer dependent on the conf file. XML_Client.pm: removed unused parse_lookup_response(), added comments to getRelatedTlds() method. reg_system.cgi: removed use of Data::Dumper XML_Codec.pm: fix to encode and decode high-end ASCII characters 2000/09/09 Changes for release of OpenSRS v2.2: - new XML_Client.pm, removed Client.pm - new OPS.pm and XML_Codec.pm - new dependencies on XML::Parser - rewrote client API in XML - support for .uk registrations (asyncronous) - changes to manage.cgi interface/templates to support asyncronous requests - new Logout link in nav bar in manage.cgi - verify_install.cgi reports on required XML::Parser package 2000/07/17 Alterations to verify_install.cgi. Script will now report: - Referring URL - Client IP address - OS information (uname -a, if applicable) - Client Version - Hostname client is connecting to - Server Port - Reseller's username - Length of Private Key - Selected Encryption Method - Versions of Perl Modules installed - Will check to ensure selected Encryption method has corresponding installed Perl Module - Better error messages when not able to login CLIENT RELEASE 2000/07/06 Update Crypt::CBC to 1.25 (latest). Cosmetic changes to reg_system.cgi 2000/06/29 Added ability to process bulk transfers in reg_system.cgi. This can be accessed by calling reg_system.cgi?action=bulk_transfer. Fixed transfer validation problem where nameserver fields were being expected based on the client configuration file, although nameservers shouldn't be required for transfers. 2000/06/22 Updated manage.cgi to actually cancel changes if an end-user hits the 'Cancel' button. 2000/05/09 Added new response codes to doc/return_codes.txt 2000/06/05 Updated OpenSRS::Client::DESTROY() so it undef's several variables that need to be destroyed if a cgi exits without calling logout(). This is necessary for mod_perl to function properly. 2000/05/30 Made cgi scripts fully mod_perl compliant: 1) Removed 'my' declarations around global variables. Because of the way mod_perl works, global variables in the main cgi can't be 'my' variables. 2) Passed \%in to cgi-lib's ReadParse to make it mod_perl friendly. 3) Use 'do' instead of 'require' when loading in the configuration file. Otherwise, only the first execution of the cgi would have access to the conf files contents, due to the way 'require' works. 4) Initialize all global variables at the top of the cgi to make we aren't holding onto any data from the previous run. 5) Close sockets in Client::logout(). Moved OpenSRS module into different namespace: OpenSRS::Client. Made configuration file pass 'use strict' by 'use vars.' 2000/05/18 Don't escape ' as ' Add note to perl 5.6.0 users in INSTALL CLIENT RELEASE 2000/04/12 Return codes are now fully documented. Please see doc/return_codes.txt for a more detailed description. sw_register now returns the result of the registration attempt if your reseller profile is set to automatically process new orders. The field name is "registration_code=" where code is the result code. 2000/04/11 Only require 'state' field if country is US or CA. 2000/04/10 Fields prefixed with p_ (p for private) will not be sent to the OpenSRS server. This should help with custom client installs where there might be sensitive data being passed through the client cgis. Involved in this change was the renaming of the credit card fields in reg_system.cgi. 2000/04/07 Gave manage.cgi the ability to delete unused nameservers. 2000/04/06 Enhanced client library to optionally use Crypt::Blowfish instead of Crypt::DES. 2000/04/04 Reworked encryption system to be compatible with newer versions of Crypt:CBC. Future versions of the client will include CBC.pm to avoid version conflicts and confusion. Gave manage.cgi the ability to rename a nameserver's hostname as well as change its ip address. 2000/03/31 Enhance reg_system.cgi to optionally allow clients to provide custom tech contact and nameserver information. 2000/03/30 Store and display the last login time and ip for manage.cgi 2000/03/29 Allow phone numbers to begin with a '+'. 2000/03/28 Converted client library into a module. Cleaned up interface between cgis and module. Only export subs and vars if the cgis ask. 2000/03/27 - CLIENT RELEASE Reworked client conf file to ensure that all required fields are passed directly to OpenSRS.pl during OPENSRS_LOGIN(). This avoids having to reach into main's namespace to get the data we need and should silence a few complaints. :) This means that OPENSRS_LOGIN() should be passed %OPENSRS instead of just the username and private key. Renamed $PATH_HOME to $PATH_SOURCE in conf file for clarity. 2000/03/22 Cleaned up reg_system.cgi: enhanced standard methods to handle bulk orders enhanced standard templates to handle bulk orders removed obsolete templates and methods Adjusted reg_system.cgi register() to do lookups on domains before it sends down the request to register them. 2000/03/20 New feature: domain transfers. 2000/03/17 Cleaned up profile setup flow in reg_system.cgi 2000/03/14 Fixed an oversight when doing domain lookups which caused the reseller username to not get passed properly. This was causing problems with lookup statistics. 2000/02/22 New feature: domain ownership changes. Restructured manage.cgi templates a bit. 2000/02/17 Only require postal code for United States and Canada. 2000/02/09 Update client library and cgis to handle problems connecting to the server more gracefully. Parse the message coming back from the server and return the error if one is given. This should help in debugging problem clients. 2000/02/06 Enhanced reg_system to return available domains with other tld extensions. E.g., if test.com is queried and test.org and test.net are also available, they will show as available. 2000/02/05 Fixed error in countries template. Thailand should be TH, not TM. 2000/01/13 Configuration file change: $PRIVATE_KEY replaces $PASSWORD. $USERNAME and $PRIVATE_KEY can be passed through new OPENSRS_LOGIN() method, or will be read directly from conf file for backward compatibility. $AUTH_TYPE is now obsolete. DES encryption is required on all versions greater than 2.0. 2000/01/13 Changed field name master_domain to reg_domain in templates/register/ register.html for consistency. This is a backwards compatible change. 2000/01/12 Changed manage.cgi to use a maxlength of 20 for the account password. 2000/01/12 Documentation enhancements 2000/01/11 Move debugging defines into conf file. 2000/01/10 Generate credit card expiration years dynamically in reg_system.cgi. 2000/01/07 Remove control characters from a few of the templates. New feature: registration period, which specifies the number of years for which to register a domain. Fixed bulk_verify.html template which had named owner_first_name, owner_last_name, owner_org_name without the owner_ prefix. ################################################################## ## Since pre-release 1 Fields changed: firstname => first_name lastname => last_name telephone => phone zip => postal_code organization => org_name Moved permission defines into hash %PERMISSIONS. SEND_COMMAND parses response code and text, and returns the resultant data with: $data{_is_success} indicating a successful command. $data{_response_code} storing the numeric code returned. $data{_response_text} storing the response text returned. get_nameservers returns the fqdn's of the nameserver's joined by \0. E.g., @nameservers = split /\0/, $data{fqdn} get_domains returns the domain_names's of the domains's joined by \0. E.g., @domains = split /\0/, $data{domain} Split up templates under different subdirectories. Update conf file: Renamed template variables. Moved remote_host/remote_port into hashes. Change client/server communication slightly: We no longer prepend data with a space. Merged in registration management client sources and templates. New features: deleting subuser paging implemented when viewing domains top navbar and secure_menu.html are generated dymanically per the user's permission level registration management integration modifying a nameserver's ip address client can change profile password Cleaned up handling of user permissions. Encryption system added. Controlled via OpenSRS.conf file. New required perl modules: Digest::MD5, Crypt::CBC, Crypt::DES Optomize client/server interaction so we only open the socket and authenticate the reseller once per session. This allows for multiple commands to be sent and parsed without opening a new socket each time. Flags "billing_use_admin_info" and "tech_use_admin_info" are handled via the client now and not the server. opensrs-client-3.0.0/LICENSE0000644017777601777760000006347610770014202016556 0ustar nobodynogroup00000000000000 GNU LESSER GENERAL PUBLIC LICENSE Version 2.1, February 1999 Copyright (C) 1991, 1999 Free Software Foundation, Inc. 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. [This is the first released version of the Lesser GPL. It also counts as the successor of the GNU Library Public License, version 2, hence the version number 2.1.] Preamble The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public Licenses are intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This license, the Lesser General Public License, applies to some specially designated software packages--typically libraries--of the Free Software Foundation and other authors who decide to use it. You can use it too, but we suggest you first think carefully about whether this license or the ordinary General Public License is the better strategy to use in any particular case, based on the explanations below. When we speak of free software, we are referring to freedom of use, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish); that you receive source code or can get it if you want it; that you can change the software and use pieces of it in new free programs; and that you are informed that you can do these things. To protect your rights, we need to make restrictions that forbid distributors to deny you these rights or to ask you to surrender these rights. These restrictions translate to certain responsibilities for you if you distribute copies of the library or if you modify it. For example, if you distribute copies of the library, whether gratis or for a fee, you must give the recipients all the rights that we gave you. You must make sure that they, too, receive or can get the source code. If you link other code with the library, you must provide complete object files to the recipients, so that they can relink them with the library after making changes to the library and recompiling it. And you must show them these terms so they know their rights. We protect your rights with a two-step method: (1) we copyright the library, and (2) we offer you this license, which gives you legal permission to copy, distribute and/or modify the library. To protect each distributor, we want to make it very clear that there is no warranty for the free library. Also, if the library is modified by someone else and passed on, the recipients should know that what they have is not the original version, so that the original author's reputation will not be affected by problems that might be introduced by others. Finally, software patents pose a constant threat to the existence of any free program. We wish to make sure that a company cannot effectively restrict the users of a free program by obtaining a restrictive license from a patent holder. Therefore, we insist that any patent license obtained for a version of the library must be consistent with the full freedom of use specified in this license. Most GNU software, including some libraries, is covered by the ordinary GNU General Public License. This license, the GNU Lesser General Public License, applies to certain designated libraries, and is quite different from the ordinary General Public License. We use this license for certain libraries in order to permit linking those libraries into non-free programs. When a program is linked with a library, whether statically or using a shared library, the combination of the two is legally speaking a combined work, a derivative of the original library. The ordinary General Public License therefore permits such linking only if the entire combination fits its criteria of freedom. The Lesser General Public License permits more lax criteria for linking other code with the library. We call this license the "Lesser" General Public License because it does Less to protect the user's freedom than the ordinary General Public License. It also provides other free software developers Less of an advantage over competing non-free programs. These disadvantages are the reason we use the ordinary General Public License for many libraries. However, the Lesser license provides advantages in certain special circumstances. For example, on rare occasions, there may be a special need to encourage the widest possible use of a certain library, so that it becomes a de-facto standard. To achieve this, non-free programs must be allowed to use the library. A more frequent case is that a free library does the same job as widely used non-free libraries. In this case, there is little to gain by limiting the free library to free software only, so we use the Lesser General Public License. In other cases, permission to use a particular library in non-free programs enables a greater number of people to use a large body of free software. For example, permission to use the GNU C Library in non-free programs enables many more people to use the whole GNU operating system, as well as its variant, the GNU/Linux operating system. Although the Lesser General Public License is Less protective of the users' freedom, it does ensure that the user of a program that is linked with the Library has the freedom and the wherewithal to run that program using a modified version of the Library. The precise terms and conditions for copying, distribution and modification follow. Pay close attention to the difference between a "work based on the library" and a "work that uses the library". The former contains code derived from the library, whereas the latter must be combined with the library in order to run. GNU LESSER GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. This License Agreement applies to any software library or other program which contains a notice placed by the copyright holder or other authorized party saying it may be distributed under the terms of this Lesser General Public License (also called "this License"). Each licensee is addressed as "you". A "library" means a collection of software functions and/or data prepared so as to be conveniently linked with application programs (which use some of those functions and data) to form executables. The "Library", below, refers to any such software library or work which has been distributed under these terms. A "work based on the Library" means either the Library or any derivative work under copyright law: that is to say, a work containing the Library or a portion of it, either verbatim or with modifications and/or translated straightforwardly into another language. (Hereinafter, translation is included without limitation in the term "modification".) "Source code" for a work means the preferred form of the work for making modifications to it. For a library, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the library. Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running a program using the Library is not restricted, and output from such a program is covered only if its contents constitute a work based on the Library (independent of the use of the Library in a tool for writing it). Whether that is true depends on what the Library does and what the program that uses the Library does. 1. You may copy and distribute verbatim copies of the Library's complete 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 License and to the absence of any warranty; and distribute a copy of this License along with the Library. 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. 2. You may modify your copy or copies of the Library or any portion of it, thus forming a work based on the Library, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: a) The modified work must itself be a software library. b) You must cause the files modified to carry prominent notices stating that you changed the files and the date of any change. c) You must cause the whole of the work to be licensed at no charge to all third parties under the terms of this License. d) If a facility in the modified Library refers to a function or a table of data to be supplied by an application program that uses the facility, other than as an argument passed when the facility is invoked, then you must make a good faith effort to ensure that, in the event an application does not supply such function or table, the facility still operates, and performs whatever part of its purpose remains meaningful. (For example, a function in a library to compute square roots has a purpose that is entirely well-defined independent of the application. Therefore, Subsection 2d requires that any application-supplied function or table used by this function must be optional: if the application does not supply it, the square root function must still compute square roots.) These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Library, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Library, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Library. In addition, mere aggregation of another work not based on the Library with the Library (or with a work based on the Library) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. 3. You may opt to apply the terms of the ordinary GNU General Public License instead of this License to a given copy of the Library. To do this, you must alter all the notices that refer to this License, so that they refer to the ordinary GNU General Public License, version 2, instead of to this License. (If a newer version than version 2 of the ordinary GNU General Public License has appeared, then you can specify that version instead if you wish.) Do not make any other change in these notices. Once this change is made in a given copy, it is irreversible for that copy, so the ordinary GNU General Public License applies to all subsequent copies and derivative works made from that copy. This option is useful when you wish to copy part of the code of the Library into a program that is not a library. 4. You may copy and distribute the Library (or a portion or derivative of it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange. If distribution of object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place satisfies the requirement to distribute the source code, even though third parties are not compelled to copy the source along with the object code. 5. A program that contains no derivative of any portion of the Library, but is designed to work with the Library by being compiled or linked with it, is called a "work that uses the Library". Such a work, in isolation, is not a derivative work of the Library, and therefore falls outside the scope of this License. However, linking a "work that uses the Library" with the Library creates an executable that is a derivative of the Library (because it contains portions of the Library), rather than a "work that uses the library". The executable is therefore covered by this License. Section 6 states terms for distribution of such executables. When a "work that uses the Library" uses material from a header file that is part of the Library, the object code for the work may be a derivative work of the Library even though the source code is not. Whether this is true is especially significant if the work can be linked without the Library, or if the work is itself a library. The threshold for this to be true is not precisely defined by law. If such an object file uses only numerical parameters, data structure layouts and accessors, and small macros and small inline functions (ten lines or less in length), then the use of the object file is unrestricted, regardless of whether it is legally a derivative work. (Executables containing this object code plus portions of the Library will still fall under Section 6.) Otherwise, if the work is a derivative of the Library, you may distribute the object code for the work under the terms of Section 6. Any executables containing that work also fall under Section 6, whether or not they are linked directly with the Library itself. 6. As an exception to the Sections above, you may also combine or link a "work that uses the Library" with the Library to produce a work containing portions of the Library, and distribute that work under terms of your choice, provided that the terms permit modification of the work for the customer's own use and reverse engineering for debugging such modifications. You must give prominent notice with each copy of the work that the Library is used in it and that the Library and its use are covered by this License. You must supply a copy of this License. If the work during execution displays copyright notices, you must include the copyright notice for the Library among them, as well as a reference directing the user to the copy of this License. Also, you must do one of these things: a) Accompany the work with the complete corresponding machine-readable source code for the Library including whatever changes were used in the work (which must be distributed under Sections 1 and 2 above); and, if the work is an executable linked with the Library, with the complete machine-readable "work that uses the Library", as object code and/or source code, so that the user can modify the Library and then relink to produce a modified executable containing the modified Library. (It is understood that the user who changes the contents of definitions files in the Library will not necessarily be able to recompile the application to use the modified definitions.) b) Use a suitable shared library mechanism for linking with the Library. A suitable mechanism is one that (1) uses at run time a copy of the library already present on the user's computer system, rather than copying library functions into the executable, and (2) will operate properly with a modified version of the library, if the user installs one, as long as the modified version is interface-compatible with the version that the work was made with. c) Accompany the work with a written offer, valid for at least three years, to give the same user the materials specified in Subsection 6a, above, for a charge no more than the cost of performing this distribution. d) If distribution of the work is made by offering access to copy from a designated place, offer equivalent access to copy the above specified materials from the same place. e) Verify that the user has already received a copy of these materials or that you have already sent this user a copy. For an executable, the required form of the "work that uses the Library" must include any data and utility programs needed for reproducing the executable from it. However, as a special exception, the materials to be distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. It may happen that this requirement contradicts the license restrictions of other proprietary libraries that do not normally accompany the operating system. Such a contradiction means you cannot use both them and the Library together in an executable that you distribute. 7. You may place library facilities that are a work based on the Library side-by-side in a single library together with other library facilities not covered by this License, and distribute such a combined library, provided that the separate distribution of the work based on the Library and of the other library facilities is otherwise permitted, and provided that you do these two things: a) Accompany the combined library with a copy of the same work based on the Library, uncombined with any other library facilities. This must be distributed under the terms of the Sections above. b) Give prominent notice with the combined library of the fact that part of it is a work based on the Library, and explaining where to find the accompanying uncombined form of the same work. 8. You may not copy, modify, sublicense, link with, or distribute the Library except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense, link with, or distribute the Library is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. 9. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Library or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Library (or any work based on the Library), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Library or works based on it. 10. Each time you redistribute the Library (or any work based on the Library), the recipient automatically receives a license from the original licensor to copy, distribute, link with or modify the Library subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties with this License. 11. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Library at all. For example, if a patent license would not permit royalty-free redistribution of the Library by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Library. If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply, and the section as a whole is intended to apply in other circumstances. It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. 12. If the distribution and/or use of the Library is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Library under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. 13. The Free Software Foundation may publish revised and/or new versions of the Lesser 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 Library specifies a version number of this 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 Library does not specify a license version number, you may choose any version ever published by the Free Software Foundation. 14. If you wish to incorporate parts of the Library into other free programs whose distribution conditions are incompatible with these, 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 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE LIBRARY "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 LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 16. 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 LIBRARY 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 LIBRARY (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 LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Libraries If you develop a new library, and you want it to be of the greatest possible use to the public, we recommend making it free software that everyone can redistribute and change. You can do so by permitting redistribution under these terms (or, alternatively, under the terms of the ordinary General Public License). To apply these terms, attach the following notices to the library. 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. Copyright (C) This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Also add information on how to contact you by electronic and paper mail. You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the library, if necessary. Here is a sample; alter the names: Yoyodyne, Inc., hereby disclaims all copyright interest in the library `Frob' (a library for tweaking knobs) written by James Random Hacker. , 1 April 1990 Ty Coon, President of Vice That's all there is to it! opensrs-client-3.0.0/README0000644017777601777760000000037510770014202016416 0ustar nobodynogroup00000000000000Installation: ------------- Please see documents at: https://rrc.tucows.com/documentation New features: ------------- Please see ChangeLog. For extra information on the client API, please see the documents at: https://rrc.tucows.com/documentation opensrs-client-3.0.0/bin/0000755017777601777760000000000010770014215016305 5ustar nobodynogroup00000000000000opensrs-client-3.0.0/bin/bulk_lock.pl0000755017777601777760000000747510770014202020623 0ustar nobodynogroup00000000000000#!/usr/bin/perl BEGIN { do "/OpenSRS.conf"; # when running against live system, this must go through batch pool, rather # than the normal one $OPENSRS{ REMOTE_HOST } = "horizon.opensrs.net"; # TEST # $OPENSRS{ REMOTE_HOST } = "batch.opensrs.net"; # LIVE } use strict; use lib $PATH_LIB; use OpenSRS::XML_Client; use Getopt::Long; my ( $lock, $unlock, $infile, $csvfile ); GetOptions( "lock" => \$lock, "unlock" => \$unlock, "infile=s" => \$infile, "csvfile=s" => \$csvfile, ) or usage(); if ( not $lock xor $unlock ) { usage( "One of --lock or --unlock must be specified" ); } my $lock_state = $lock ? 1 : 0; if ( $infile and $csvfile ) { usage( "Only one of --infile and --csvfile can be specified"); } my @domain_list = get_domain_list(); if ( not scalar @domain_list ) { usage( "No domains specified" ); } my $XML_Client = OpenSRS::XML_Client->new( %OPENSRS ); $XML_Client->login; open GOOD, ">logfile.good" or die "Can't open logfile.good for writing: $!"; open BAD, ">logfile.bad" or die "Can't open logfile.bad for writing: $!"; open SKIP, ">logfile.skip" or die "Can't open logfile.skip for writing: $!"; foreach my $fh ( \*GOOD, \*BAD, \*SKIP ) { my $oldfh = select $fh; $| = 1; select $oldfh; } foreach my $domain ( @domain_list ) { my $resp = $XML_Client->send_cmd( { action => 'modify', object => 'domain', attributes => { data => 'status', domain_name => $domain, lock_state => $lock_state, }, } ); print "$domain: $resp->{ response_text }\n"; if ( not $resp->{ is_success } ) { if ( $resp->{ response_code } == 450 ) { # tld doesn't support locking, or status can't be updated print SKIP "$domain: $resp->{ response_text }\n"; } else { # domain info not found, or invalid request print BAD "$domain: $resp->{ response_text }\n"; } } else { print GOOD "$domain: $resp->{ response_text }\n"; } sleep 1; } $XML_Client->logout; print "\nCompleted\n"; sub get_domain_list { my $fh; my $file = $infile || $csvfile || undef; if ( defined $file ) { open $fh, $file or usage( "Can't open $file for reading: $!" ); } else { $fh = \*STDIN; }; my @domain_list = <$fh>; # for csv-files, a bit of mangling is required. if ( defined $csvfile ) { # the first item in list is a field specifier. Ignore it. shift @domain_list; # for the remainder of the file, the domain name is the 3rd field. @domain_list = map { (split /,/)[2] } @domain_list; } @domain_list = map { s/(^\s+)|(\s+$)//g; /^(\S+)/; $1 } grep { /\S/ } @domain_list; return @domain_list; } sub usage { my $message = shift; print < [--infile=|--csvfile=] where: - one of --lock or --unlock must be specified. Domain status will be set to this state. - if --infile is specified, file given should contain a list of domains to lock/unlock, one per line. - if --csvfile is specified, the file given should contain a CSV format list of domains, as supplied through RWI 'Search domains->Results to File'. - if neither --infile nor --csvfile are specified, the domain list will be accepted on standard input, and should consist of only a single domain per line the following logfiles will be created logfile.good list of domains for which lock status successfully updated logfile.bad list of domains for which lock status could not be set due to internal problem (usually bad command, or domain not found) logfile.skip list of domains for which the lock status could not be set due to non-error condition (usually if the domain is with another reseller, TLD does not support domain locking, or the domain is locked at the registry level) EOF exit; } opensrs-client-3.0.0/cgi/0000755017777601777760000000000010770014215016277 5ustar nobodynogroup00000000000000opensrs-client-3.0.0/cgi/Punycode.cgi0000755017777601777760000001127410770014202020555 0ustar nobodynogroup00000000000000#!/usr/bin/perl # .Copyright (C) 2004 Tucows Inc. # .Created: 04/02/2004 # .Contactid: # .Url: http://www.opensrs.org # .Authors: Vlad Jebelev, Tom Lovasic, Steve Knipe, Vedran Vego # # # This program is free software; you can redistribute it and/or # modify it under the terms of the GNU Lesser General Public # License as published by the Free Software Foundation; either # version 2.1 of the License, 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 # Lesser General Public License for more details. # # You should have received a copy of the GNU Lesser General Public # License along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA use vars qw($cgi $path_templates %in $flag_header_sent %strings); BEGIN { $path_to_config = ""; do "$path_to_config/OpenSRS.conf"; } use warnings; use strict; use lib $PATH_LIB; use CGI ':cgi-lib'; use HTML::Template; use RACE; use OpenSRS::Util::Common; use OpenSRS::Language qw/native_to_puny puny_to_native/; RACE::Initialise(%RACESETTINGS); $cgi = $ENV{SCRIPT_NAME}; $path_templates = "$PATH_TEMPLATES/PUNYCODE"; $flag_header_sent = 0; %strings = (); %in = (); ReadParse(\%in); foreach (keys %in) { $in{$_} =~ s/(^\s+)|(\s+$)//g; } start_up(); my $type = $in{type}; my $text = $in{input}; if ( $text ) { if ($type eq 'NATIVE') { $strings{native} = $text; eval { $strings{race} = native_to_race($text)}; if ( $@ ) { $strings{race} = undef; $strings{error_race} = $@; } eval { $strings{punycode} = native_to_puny($text, \%OPENSRS)}; if ( $@ ) { $strings{punycode} = undef; $strings{error_punycode} = $@; } } elsif ($type eq 'RACE') { eval { $strings{native} = race_to_native($text)}; if ( $@ ) { $strings{native} = undef; $strings{error_native} = $@; } $strings{race} = $text; eval { my $native = race_to_native($text); $strings{punycode} = native_to_puny($native, \%OPENSRS)}; if ( $@ ) { $strings{punycode} = undef; $strings{error_punycode} = $@; } } elsif ($type eq 'PUNYCODE') { eval { $strings{native} = puny_to_native($text, \%OPENSRS)}; if ( $@ ) { $strings{native} = undef; $strings{error_native} = $@; } eval { my $native = puny_to_native($text, \%OPENSRS); $strings{race} = native_to_race($native)}; if ( $@ ) { $strings{race} = undef; $strings{error_race} = $@; } $strings{punycode} = $text; } } main_menu(); exit; sub native_to_race { my ( $str ) = @_; my $conv = RACE::DoRACE( Domain => $str, EncodingType => $OPENSRS{IDN_ENCODING_TYPE}); if ($conv->{Error}){ die $conv->{Error}."\n"; } return $conv->{ConvertedDomain}; } sub race_to_native { my ( $str ) = @_; my $conv = RACE::UndoRACE( Domain => $str, EncodingType => $OPENSRS{IDN_ENCODING_TYPE}); if ($conv->{Error}){ die $conv->{Error}."\n"; } return $conv->{OriginalDomain}; } sub main_menu { my (%HTML); print_form(template => "$path_templates/base.html", data => { %in, %strings, encoding => uc $OPENSRS{IDN_ENCODING_TYPE}, show_results => (scalar(keys %strings) > 0 ? 1 : 0), show_race => ($in{type} ne 'RACE' && exists $strings{race}), show_native => ($in{type} ne 'NATIVE' && exists $strings{native}), show_punycode => ($in{type} ne 'PUNYCODE' && exists $strings{punycode}), }); } sub print_form { my %args = @_; $args{title} = $args{title} || 'IDN Converter'; my $template = HTML::Template->new( cache => 1, filename => $args{template}, die_on_bad_params => 0, ); $template->param( CGI => $cgi, %{ $args{data} }, ); if (not $args{not_framed}) { my $content = $template->output; $template = HTML::Template->new( cache => 1, filename => "$path_templates/base.html", die_on_bad_params => 0, ); $template->param(CONTENT => $content); } $template->param( CGI => $cgi, %{ $args{data} }, ); print_header(); print $template->output; } # print html header sub print_header { my %cookies = @_; return if $flag_header_sent; print "Content-type: text/html\r\n"; foreach my $key (keys %cookies) { printf "Set-Cookie: %s=%s; PATH=;\r\n", $key, $cookies{$key}; } print "\r\n"; $flag_header_sent = 1; } sub start_up { OpenSRS::Util::Common::initialize( path_templates => $PATH_TEMPLATES, mail_settings => \%MAIL_SETTINGS ); } opensrs-client-3.0.0/cgi/ca_reg.cgi0000755017777601777760000011100310770014202020176 0ustar nobodynogroup00000000000000#!/usr/bin/perl # .Copyright (C) 1999-2002 TUCOWS.com Inc. # .Created: 11/19/1999 # .Contactid: # .Url: http://www.opensrs.org # .Originally Developed by: # Tucows/OpenSRS # .Authors: Evgeniy Pirogov # # # This program is free software; you can redistribute it and/or # modify it under the terms of the GNU Lesser General Public # License as published by the Free Software Foundation; either # version 2.1 of the License, 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 # Lesser General Public License for more details. # # You should have received a copy of the GNU Lesser General Public # License along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA # pull in conf file with defined values # XXX NOTE XXX Update this configuration file use vars qw/$path_to_config $q $session %in $path_templates $error/; BEGIN { $path_to_config = ''; do "$path_to_config/OpenSRS.conf"; } use lib $PATH_LIB; use OpenSRS::Util::ConfigJar "$path_to_config/OpenSRS.conf"; use strict; use CGI qw(); use HTML::Template; use Core::Exception; use OpenSRS::XML_Client; use OpenSRS::Util::Common qw/locale_build_country_list build_select_menu CODE_2_Country send_email/; use OpenSRS::Util::Error; use OpenSRS::Util::Canada qw/@municipal_prefix legal_type_list %canada_legal_types %legal_types %lang_pref %legal_type_groups help_icon %canada_province/; use OpenSRS::Util::Logger '$Log';# => "$PATH_LOG/ca_reg.txt", qw/info error debug/; use OpenSRS::Util::Logger '$Billing';# => "$PATH_LOG/billing_ca.txt", qw/info/; use OpenSRS::Util::Session; use Data::Dumper; use constant CC_TYPES => { visa => "Visa", mastercard => "Mastercard", amex => "American Express", discover => "Discover", }; use constant ACTION_MAP => { show_lookup => \&show_lookup, lookup => \&lookup, blocker_ok => \&blocker_ok, legal_type_quiz => \&legal_type_quiz, legal_type_quiz2 => \&legal_type_quiz2, verify_legal_type => \&verify_legal_type, setup_contact => \&setup_contact, setup_contact2 => \&setup_contact2, setup_profile => \&setup_profile, create_new_profile => \&create_new_profile, link_osrs_profile => \&link_osrs_profile, how_to_link_ca => \&how_to_link_ca, link_ca_domain => \&link_ca_domain, link_ca_domain2 => \&link_ca_domain2, verify_order => \&verify_order, submit_order => \&submit_order, help => \&help, help_icon => \&help_icon, }; $q = new CGI; try { %in = $q->Vars; undef $error; $session = OpenSRS::Util::Session->restore( $in{session}, $in{sign}, $OPENSRS{private_key}); $Log->debug('restored session %s', Dumper($session)); $session->{history} = [] unless ref $session->{history} eq 'ARRAY'; delete $in{session}; delete $in{sign}; $Log->debug('got from web %s', Dumper(\%in)); $path_templates = "$PATH_TEMPLATES/ca_reg"; local $ENV{HTML_TEMPLATE_ROOT} = "$PATH_TEMPLATES/ca_reg"; my $action = $in{action}; delete $in{action}; my $back = $in{back}||0; delete $in{back}; if ($back){ $Log->debug('back buton pressed'); shift @{$session->{history}}; my $state = shift @{$session->{history}}; if ($state) { $action = $state->{action}; %in = %{$state->{in}}; } else { $action = ''; $in{affiliate_id} = $session->{affiliate_id}; } } $action ||= 'show_lookup'; $Log->debug('try to process action %s with %s', $action, Dumper(\%in)); unless (ACTION_MAP->{$action}){ throw 'web',"Invalid Action '%s'",$action; } my ($template,@ret_data) = &{ACTION_MAP->{$action}}(); if (defined $error){ my $state = ${$session->{history}}[0]; my %error_in = (%in); if ($state){ $action = $state->{action}; %in = %{$state->{in}}; } else { $action = 'show_lookup'; $in{affiliate_id} = $session->{affiliate_id}; } ($template,@ret_data) = &{ACTION_MAP->{$action}}(); push @ret_data,%error_in,%$error; } else { unshift @{$session->{history}},{action => $action, in=>{%in}}; } my %data = (cgi => $q->url,@ret_data) ; if ($template) { $template = HTML::Template->new( filename => $template, die_on_bad_params => 0); $template->param(%data); $template->param($session->dump($OPENSRS{private_key})); # if ($REG_SYSTEM{debug}){ # $template->param(dumper => scalar Dumper(\%data,$session)); # } print $q->header; print $template->output; } } catch { dev => sub { my $E = shift; $Log->fatal("dev error %s",$E->dump); print $q->header; error_output($E->info); }, _other => sub { my $E = shift; $Log->error("other %s",$E->dump); print $q->header; error_output(); }, }; exit; sub show_lookup { $session->{history} = []; return 'lookup.html', municipality_list => [ map { {prefix=>$_} } @municipal_prefix], @_; } sub lookup { $session->{affiliate_id} = $in{affiliate_id}; my $client = new OpenSRS::XML_Client( %OPENSRS, lookup_all_tlds => 0); $client->login; #do lookup and see my @parts = (); push @parts => $in{prefix} if $in{prefix}; push @parts => $in{root}; push @parts => $in{suffix}; my $domain = join (".",@parts); $session->add( domain => $domain); $session->add( prefix => $in{prefix}); my $response = $client->send_cmd({ action => 'lookup', object => 'domain', attributes => { domain => $domain, affiliate_id => $in{affiliate_id} } }); $Log->debug('Got this lookup %s',Dumper($response)); #problem with is_success and noserice #has to check for noservice before is_success if ( $response->{attributes}{status} eq 'invalid' and $response->{attributes}{noservice} and $F_QUEUE_SUPPLIER_UNAVAILABLE) { #it may be blocker or municipal - we don't know here because of outage #let's pray it will be regular domain without addinional headache #if you don't want to deal with .ca when CIRA is out - #just comment out following return $session->add( ca_reg_type => 'regular', ); return 'new_ca_domain.html', domain => $session->{domain}, period => $session->{period}, linked => $session->{linked}, allow_auto_renew => $REG_SYSTEM{allow_auto_renew}, auto_renew => $session->{auto_renew}, isa_trademark => $session->{isa_trademark}; } #error unless ($response->{is_success} or $F_QUEUE_SUPPLIER_UNAVAILABLE ){ throw 'comm','Communication error %s',Dumper($response); } if ($response->{attributes}{status} eq 'available'){ #available if ($response->{response_code} == 247){ #municipal $session->add( ca_reg_type => 'municipal', ); return 'new_municipal_domain.html', domain => $session->{domain}, period => $session->{period}, linked => $session->{linked}, auto_renew => $session->{auto_renew}, allow_auto_renew => $REG_SYSTEM{allow_auto_renew}; } elsif ($response->{response_code} == 246){ #blocker my $blockers = $client->send_cmd({ action => 'get_ca_blocker_list', object => 'domain', attributes => { domain => $domain, } }); $Log->debug('Blocker list %s',Dumper($blockers)); my @blockers = (); if ( $blockers->{is_success} and ref $blockers->{attributes}{blocker_list} eq 'HASH'){ @blockers = map {{name => $_ }} keys %{$blockers->{attributes}{blocker_list}}; } return 'blocked_domain.html', domain => $domain, blockers => \@blockers; } else { #regular domain; $session->add( ca_reg_type => 'regular', ); return 'new_ca_domain.html', domain => $session->{domain}, period => $session->{period}, linked => $session->{linked}, allow_auto_renew => $REG_SYSTEM{allow_auto_renew}, auto_renew => $session->{auto_renew}, isa_trademark => $session->{isa_trademark}; } } #invalid $error->{error} = $response->{response_text}; } sub blocker_ok{ if ($in{has_permission} =~ /yes/i){ $session->add(ca_reg_type => 'blocker'); return 'new_ca_domain.html', domain => $session->{domain}, period => $session->{period}, linked => $session->{linked}, allow_auto_renew => $REG_SYSTEM{allow_auto_renew}, auto_renew => $session->{auto_renew}, isa_trademark => $session->{isa_trademark}; } return show_lookup( error => qq/ Sorry,
You may not register this domain unless you are able
to obtain permission from the owner(s) of the
blocking domain(s)
/); } sub legal_type_quiz { $session->add(period => $in{period}); $session->add(isa_trademark => $in{isa_trademark}); $session->add(linked => $in{linked}); $session->add(auto_renew => $REG_SYSTEM{allow_auto_renew} && $in{auto_renew}); unless ($in{period}){ $error->{error} = q/Invalid period specified/; $error->{error_period} = 1; return; } if ($in{linked}){ return how_to_link_ca(); } if ($session->{ca_reg_type} eq 'municipal'){ my %legal_type_group = legal_type_list('government'); return 'government_org_name.html', reg_name => $session->{reg_name}, reg_desc => $session->{reg_desc}, legal_type_list => $legal_type_group{list}; } return 'legal_type_questionnaire.html', $session->{legal_t}.'_legal_t' => 1; } sub legal_type_quiz2 { unless ($in{legal_t}){ $error->{error} = qq/You haven't selected legal type group/; return; } if ($in{legal_t} ne $session->{legal_t}){ $session->add(legal_type => undef); } $session->add(legal_t => $in{legal_t}); my %legal_type_group = legal_type_list($in{legal_t}); my $Choose_Legal_Type = $legal_type_group{'choose_legal_type'} || 'Choose Legal Type'; my $legal_type_list = $legal_type_group{'list'}; return 'choose_legal_type.html', Choose_Legal_Type => $Choose_Legal_Type, legal_type_list => $legal_type_list, legal_type => $session->{legal_type}, long => $canada_legal_types{$session->{legal_type}}, reg_name => $session->{reg_name}, reg_desc => $session->{reg_desc}, legal_t => $in{legal_t}, intro => $legal_type_groups{$in{legal_t}}{intro}; } sub verify_legal_type { $in{reg_name} =~ s/^\s+//; $in{reg_name} =~ s/\s+$//; $in{reg_desc} =~ s/^\s+//; $in{reg_desc} =~ s/\s+$//; $session->add(reg_name => $in{reg_name}); $session->add(reg_desc => $in{reg_desc}); $session->add(legal_type => $in{legal_type}); my %error; if ($in{reg_name} eq ''){ $error{error} = "Registrant name can't be empty"; $error{error_reg_name} = 1; } if (!exists $canada_legal_types{$in{legal_type}}){ $error{error} .= "
\nYou haven't specified legal type"; $error{error_legal_type} = 1; } if (keys %error){ $error = \%error; return; } return 'verify_reg_name.html', reg_name => $in{reg_name}, legal_t => $session->{legal_t}, %{$legal_types{$in{legal_type}}}; } sub setup_contact { $in{reg_name} =~ s/^\s+//; $in{reg_name} =~ s/\s+$//; $session->add(reg_name => $in{reg_name}); $session->add(data_source => 'manual') unless $session->{data_source}; if ($in{reg_name} eq ''){ $error->{error} = "Registrant name can't be empty"; $error->{error_reg_name} = 1; return; } return 'ret_domain_info.html', source_domain => $session->{source_domain}, source_username => $session->{source_username}, source_password => $session->{souce_password}, "data_source_".$session->{data_source} => 1; } sub get_info_from_osrs { my ($domain,$username,$password) = @_; my $client = new OpenSRS::XML_Client( %OPENSRS); $client->login; my $response = $client->send_cmd({ action => "get", object => "domain", attributes => { type => "all_info", reg_username => $username, reg_password => $password, domain => $domain, } }); $Log->debug('got from opensrs %s',Dumper($response)); if (not $response->{is_success}) { return (is_success => 0, error => "Failed attempt: ". $response->{response_text}); } my %hash = (is_success => 1, reg_name => $response->{attributes}{contact_set}{owner}{org_name}); foreach my $field (qw/ org_name first_name last_name address1 address2 city country state postal_code phone fax email/){ $hash{"admin_$field"} = $response->{attributes}{contact_set}{admin}{$field}; $hash{"tech_$field"} = $response->{attributes}{contact_set}{tech}{$field}; } my $fqdnCounter = 1; foreach my $nameserver ( @{$response->{attributes}{nameserver_list}}) { $hash{"fqdn$fqdnCounter"} = $nameserver->{name}; $fqdnCounter++; } if ($domain =~ /\.ca/){ $hash{'legal_type'} = $response->{attributes}{legal_type}; $hash{'cira_member'} = ($response->{attributes}{member} eq 'Y'?1:0); $hash{'reg_desc'} = $response->{attributes}{domain_description}; $hash{'reg_name'} = $response->{attributes}{contact_set}{owner}{org_name}; $hash{"admin_pref_language"} = $response->{attributes}{contact_set}{admin}{lang_pref}; $hash{"tech_pref_language"} = $response->{attributes}{contact_set}{tech}{lang_pref}; } return %hash; } sub setup_contact2{ my %HTML = (custom_dns => $REG_SYSTEM{custom_nameservers}, custom_tech => $REG_SYSTEM{custom_tech_contact}); $session->add(data_source => $in{data_source}); if ($in{data_source} eq 'domain'){ #retreive info from OpenSRS unless ($in{source_domain} and $in{source_username} and $in{source_password}){ $error->{error} = 'Domain, username and password are required to retreive information '; $error->{error_source_domain} = !$in{source_domain}; $error->{error_source_username} = !$in{source_username}; $error->{error_source_password} = !$in{source_password}; return; } $session->add(source_domain => $in{source_domain}); $session->add(source_username => $in{source_username}); $session->add(source_password => $in{source_password}); my %data = get_info_from_osrs( $in{source_domain}, $in{source_username}, $in{source_password}); unless ($data{is_success}){ $error->{error} = $data{error}; return; } foreach my $field (qw/ org_name first_name last_name address1 address2 city country state postal_code phone fax pref_language email/){ $HTML{"admin_$field"} = $data{"admin_$field"}; } if ($REG_SYSTEM{custom_tech_contact}){ foreach my $field (qw/ org_name first_name last_name address1 address2 city country state postal_code phone fax pref_language email/){ $HTML{"tech_$field"} = $data{"tech_$field"}; } } if ($REG_SYSTEM{custom_nameservers}){ foreach my $i (1..6){ $HTML{"fqdn$i"} = $data{"fqdn$i"}; } } } $HTML{tech_country_list} = locale_build_country_list($session->{tech_country}||$HTML{tech_country}||'CA'); $HTML{admin_country_list} = locale_build_country_list($session->{admin_country}||$HTML{admin_country}||'CA'); $HTML{tech_pref_language} ||= 'EN'; $HTML{admin_pref_language} ||= 'EN'; $HTML{tech_lang_long} = $lang_pref{ $session->{tech_pref_language}|| $HTML{tech_pref_language}||'EN'}; $HTML{admin_lang_long} = $lang_pref{$session->{admin_pref_language}|| $HTML{admin_pref_language}||'EN'}; return 'domain_info.html',%HTML,%$session; } sub setup_profile { $session->add(existing_profile => $in{existing_profile}); $session->add(rant_no => 0); #not existing CIRA's profile $session->add(ca_link_domain => 0); #not linked to CIRA's profile of #existing .ca opensrs domain $session->add(cira_member => $in{cira_member}); $session->add(tec_as_admin => $in{tec_as_admin}); my %error = (error => ''); #save contact info into session #save dns info into session foreach my $field (qw/ org_name first_name last_name address1 address2 city country state postal_code phone fax pref_language email/){ $session->add("admin_$field" => $in{"admin_$field"}); if ($REG_SYSTEM{custom_tech_contact}){ if ($in{tec_as_admin}){ $session->add("tech_$field" => $in{"admin_$field"}); } else { $session->add("tech_$field" => $in{"tech_$field"}); } } } if ($REG_SYSTEM{custom_nameservers}){ my $webfqdnCounter = 1; my $fqdnCounter = 1; while ($webfqdnCounter <= 6){ if ($in{"fqdn$webfqdnCounter"}){ $session->add("fqdn$fqdnCounter" => $in{"fqdn$webfqdnCounter"}); $fqdnCounter++; } $webfqdnCounter++; } } #now check contact and DNS if ($REG_SYSTEM{custom_nameservers}){ unless ($session->{'fqdn1'}){ $error{error} .= 'First DNS is mandatory parameter
'; $error{error_fqdn1} = 1; } unless ($session->{'fqdn2'}){ $error{error} .= 'Second DNS is mandatory parameter
'; $error{error_fqdn2} = 1; } } #now check admin unless ($session->{admin_first_name}){ $error{error} .= 'Admin First name is mandatory parameter
'; $error{error_admin_first_name} = 1; } unless ($session->{admin_last_name}){ $error{error} .= 'Admin Last name is mandatory parameter
'; $error{error_admin_last_name} = 1; } unless ($session->{admin_pref_language}){ $error{error} .= 'Admin Preferred Language is mandatory parameter
'; $error{error_admin_pref_language} =1; } unless ($session->{admin_org_name}){ $error{error} .= 'Admin Organization name is mandatory parameter
'; $error{error_admin_org_name} = 1; } unless ($session->{admin_address1}){ $error{error} .= 'Admin Street address is mandatory parameter
'; $error{error_admin_address1} = 1; } unless ($session->{admin_city}){ $error{error} .= 'Admin City is mandatory parameter
'; $error{error_admin_city} = 1; } unless ($session->{admin_state}){ $error{error} .= 'Admin Province is mandatory parameter
'; $error{error_admin_state} = 1; } unless ($session->{admin_country}){ $error{error} .= 'Admin Country is mandatory parameter
'; $error{error_admin_country} = 1; } if ($session->{admin_country} eq 'CA' and not exists $canada_province{$session->{admin_state}}){ $error{error} .= 'Invalid Canadian Province for Admin contact
'; $error{error_admin_state} = 1; } unless ($session->{admin_postal_code}){ $error{error} .= 'Admin Postal Code is mandatory parameter
'; $error{error_admin_postal_code} = 1; } if ($session->{admin_phone}) { unless (OpenSRS::Syntax::PhoneSyntax($session->{"admin_phone"})){ $error{error} .= 'Invalid Admin Phone format
'; $error{error_admin_phone} = 1; } } else { $error{error} .= 'Admin Phone is mandatory parameter
' ; $error{error_admin_phone} = 1; } if ($session->{admin_email}) { unless (OpenSRS::XML_Client::check_email_syntax($session->{admin_email})){ $error{error} .= 'Invalid Admin Email format
'; $error{error_admin_email} = 1; } } else { $error{error} .= 'Admin Email is mandatory parameter
'; $error{error_admin_email} = 1; } #check tech if custom if ( $REG_SYSTEM{custom_tech_contact} and not $in{tec_as_admin}){ unless ($session->{tech_first_name}){ $error{error} .= 'Tech First name is mandatory parameter
'; $error{error_tech_first_name} = 1; } unless ($session->{tech_last_name}){ $error{error} .= 'Tech Last name is mandatory parameter
'; $error{error_tech_last_name} = 1; } unless ($session->{tech_pref_language}){ $error{error} .= 'Tech Preferred Language is mandatory parameter
'; $error{error_tech_pref_language} =1; } unless ($session->{tech_org_name}){ $error{error} .= 'Tech Organization name is mandatory parameter
'; $error{error_tech_org_name} = 1; } unless ($session->{tech_address1}){ $error{error} .= 'Tech Street address is mandatory parameter
'; $error{error_tech_address1} = 1; } unless ($session->{tech_city}){ $error{error} .= 'Tech City is mandatory parameter
'; $error{error_tech_city} = 1; } unless ($session->{tech_state}){ $error{error} .= 'Tech Province is mandatory parameter
'; $error{error_tech_state} = 1; } unless ($session->{tech_country}){ $error{error} .= 'Tech Country is mandatory parameter
'; $error{error_tech_country} = 1; } if ($session->{tech_country} eq 'CA' and not exists $canada_province{$session->{tech_state}}){ $error{error} .= 'Invalid Canadian Province for Tech contact
'; $error{error_tech_state} = 1; } unless ($session->{tech_postal_code}){ $error{error} .= 'Tech Postal Code is mandatory parameter
'; $error{error_tech_postal_code} = 1; } if ($session->{tech_phone}) { unless (OpenSRS::Syntax::PhoneSyntax($session->{"tech_phone"})){ $error{error} .= 'Invalid Tech Phone format
'; $error{error_tech_phone} = 1; } } else { $error{error} .= 'Tech Phone is mandatory parameter
' ; $error{error_tech_phone} = 1; } if ($session->{tech_email}) { unless (OpenSRS::XML_Client::check_email_syntax($session->{tech_email})){ $error{error} .= 'Invalid Tech Email format
'; $error{error_tech_email} = 1; } } else { $error{error} .= 'Admin Tech is mandatory parameter
'; $error{error_tech_email} = 1; } } if ($error{error} ){ $error = \%error; return; } #now let see what we need to do with profile if ($in{existing_profile}){ return 'link_osrs_profile.html', reg_username => $session->{reg_username}, reg_domain => $session->{reg_domain}, reg_password => $session->{reg_password} ; } else { return 'new_profile.html', reg_username => $session->{reg_username}, reg_password => $session->{reg_password} ; } } sub create_new_profile{ my %error = (error => ''); if (not $in{reg_username}) { $error{error} .= "No username supplied
"; $error{error_reg_username} = 1; } $session->add(reg_username => $in{reg_username}); if (not $in{reg_password}) { $error{error} .= "No password supplied
"; $error{error_reg_password} = 1; } if ($in{reg_password} ne $in{verify_password}){ $error{error} .= "Password mismatch
"; } if ($in{reg_password} !~ /^[A-Za-z0-9\[\]\(\)!@\$\^,\.~\|=\-\+_\{\}\#]+$/) { $error{error} .= "Invalid password syntax: The only allowed characters are all alphanumerics (A-Z, a-z, 0-9) and symbols []()!@\$^,.~|=-+_{}#
"; $error{error_reg_password} = 1; } if (length $in{reg_password} < 3 || length $in{reg_password} > 20) { $error{error} = "Invalid password length: Password should contain at least 3 and at most 20 characters.
"; $error{error_reg_password} = 1; } if ($error{error}){ $error = \%error; return; } $session->add(reg_password => $in{reg_password}); $session->add(reg_domain => undef); if ( $F_SHOW_CC_FIELDS ) { return show_payment_info(); } else { return verify_order(); } } sub link_osrs_profile{ my %error = (error => ''); if (not $in{reg_username}) { $error{error} .= "No username supplied
"; $error{error_reg_username} = 1; } $session->add(reg_username => $in{reg_username}); if (not $in{reg_password}) { $error{error} .= "No password supplied
"; $error{error_reg_password} = 1; } $session->add(reg_password => $in{reg_password}); if (not $in{reg_domain}) { $error{error} .= "No Domain name supplied
"; $error{error_reg_domain} = 1; } $session->add(reg_domain => $in{reg_domain}); if ($session->{ca_link_domain} and $in{reg_domain} !~ /\.ca$/){ $error{error} .= 'Existing domain has to be .ca domain
'; $error{error_reg_domain} = 1; } if ($error{error}){ $error = \%error; return; } my $client = new OpenSRS::XML_Client( %OPENSRS); $client->login; my $response = $client->send_cmd({ action => "set", object => "cookie", attributes => { domain => $in{reg_domain}, reg_username => $in{reg_username}, reg_password => $in{reg_password}, } }); $Log->debug('Got from OpenSRS on set cookie %s', Dumper($response)); if (not $response->{is_success}) { $error->{error} = "$response->{response_text}
\n"; return; } if (not $response->{attributes}->{cookie}){ $error->{error} = "Invalid username/password given.
\n"; return; } if ($session->{ca_link_domain}){ my %data = get_info_from_osrs( $in{reg_domain}, $in{reg_username}, $in{reg_password}); unless ($data{is_success}){ $error->{error} = $data{error}; return; } foreach my $field (qw/ org_name first_name last_name address1 address2 city country state postal_code phone fax pref_language email/){ $session->add("admin_$field" => $data{"admin_$field"}); $session->add("tech_$field" => $data{"tech_$field"}); } $session->add('legal_type' => $data{legal_type}); $session->add('cira_member' => $data{cira_member}); $session->add('reg_desc' => $data{reg_desc}); $session->add('reg_name' => $data{reg_name}); $session->add("admin_pref_language" => $data{admin_pref_language}); $session->add("tech_pref_language" => $data{tech_pref_language}); } if ( $F_SHOW_CC_FIELDS ) { return show_payment_info(); } else { return verify_order(); } } sub how_to_link_ca { return 'how_to_link_to_ca.html', ($session->{link_rant}?(link_to_rant => 1):(link_to_domain => 1)); } sub link_ca_domain { if ($in{link_to} eq 'rant'){ $session->add(link_rant => 1); $session->add(link_ca_domain => 0); return 'cira_rant_profile.html', %$session, custom_dns => $REG_SYSTEM{custom_nameservers}; } $session->add(link_rant => 0); $session->add(link_ca_domain => 1); $session->add(existing_profile => 1); return 'cira_reg_profile.html', %$session, custom_dns => $REG_SYSTEM{custom_nameservers}; } sub link_ca_domain2 { my %error = (error => ''); if ($session->{link_ca_domain}){ $session->add(rant_no => 0); $session->add(ca_link_domain => 1); } else { unless ($in{rant_no}) { $error{error} .= "No Registrant Number supplied
"; $error{error_rant_no} = 1; } $session->add(rant_no => $in{rant_no}); $session->add(ca_link_domain => 0); #check that registrant exists my $client = new OpenSRS::XML_Client( %OPENSRS); $client->login; my $response = $client->send_cmd({ action => "query_registrant", object => "ca", attributes => { domain => '.ca', #not gonna work for other TLDs rant_no => $in{rant_no}, } }); unless ($response->{is_success}){ $error->{error} .= $response->{response_text}."
\n"; $error{error_rant_no} = 1; } else { my %data = %{$response->{attributes}}; $session->add(%data); $session->add(reg_name => $data{owner_org_name}); $session->add(admin_pref_language => $data{admin_lang_pref}); $session->add(tech_pref_language => $data{tech_lang_pref}); } } if ($REG_SYSTEM{custom_nameservers}){ my $webfqdnCounter = 1; my $fqdnCounter = 1; while ($webfqdnCounter <= 6){ if ($in{"fqdn$webfqdnCounter"}){ $session->add("fqdn$fqdnCounter" => $in{"fqdn$webfqdnCounter"}); $fqdnCounter++; } $webfqdnCounter++; } #now check contact and DNS if ($REG_SYSTEM{custom_nameservers}){ unless ($session->{'fqdn1'}){ $error{error} .= 'First DNS is mandatory parameter
'; $error{error_fqdn1} = 1; } unless ($session->{'fqdn2'}){ $error{error} .= 'Second DNS is mandatory parameter
'; $error{error_fqdn2} = 1; } } } if ($error{error}){ $error = \%error; return; } if ($session->{ca_link_domain}){ return link_osrs_profile(); } $session->add(existing_profile => $in{existing_profile}); #reset contact informatino from session # just to show that OSRS don't need it from us foreach my $field (qw/ org_name first_name last_name address1 address2 city country state postal_code phone fax pref_language email/){ delete $session->{"admin_$_"}; delete $session->{"tech_$_"}; } if ($in{existing_profile}){ return 'link_osrs_profile.html', reg_username => $session->{reg_username}, reg_domain => $session->{reg_domain}, reg_password => $session->{reg_password} ; } else { return 'new_profile.html', reg_username => $session->{reg_username}, reg_password => $session->{reg_password} ; } } sub show_payment_info{ my %cc_months = map {$_ = sprintf('%02d',$_); $_ => $_ } (0..12); $cc_months{'00'} = '--'; my $year = (localtime)[5]; #Y2K $year -= 100; my %cc_year = map { sprintf('%02d',$_) => 2000+$_} ($year .. $year+5); $year = sprintf('02d%',$year); return 'cc_info.html', p_cc_type => $session->{p_cc_type}, p_cc_num => $session->{p_cc_num}, p_cc_exp_month_list => build_select_menu(\%cc_months,$session->{p_cc_exp_month}||'00'), p_cc_exp_year_list => build_select_menu(\%cc_year,$session->{p_cc_exp_year}|| $year); } sub verify_order{ my %error = (error => ''); if ($REG_SYSTEM{F_VERIFY_CC}) { if (not $in{p_cc_type}){ $error{error} .= "Invalid credit card type.
\n"; $error{error_p_cc_type} = 1; } if (not cc_verify($in{p_cc_num})) { $error{error} .= "Invalid credit card number.
\n"; $error{error_p_cc_num} = 1 ; } if (not cc_exp_verify($in{p_cc_exp_month},$in{p_cc_exp_year})) { $error{error} .= "Invalid credit card expiration: $in{p_cc_exp_month}/$in{p_cc_exp_year}.
\n"; $error{error_p_cc_exp} = 1; } if ($error{error}){ $error = \%error; return; } } $session->add(p_cc_type => $in{p_cc_type}); $session->add(p_cc_num => $in{p_cc_num}); $session->add(p_cc_exp_month => $in{p_cc_exp_month}); $session->add(p_cc_exp_year => $in{p_cc_exp_year}); return 'verify_order.html',%$session, custom_dns => $REG_SYSTEM{custom_nameservers}, custom_tech => $REG_SYSTEM{custom_tech_contact}, admin_country => CODE_2_Country($session->{admin_country}), tech_country => CODE_2_Country($session->{tech_country}), legal_type => $legal_types{$session->{legal_type}}->{long}, p_cc_type => CC_TYPES->{$in{p_cc_type}}, show_cc_fields => $F_SHOW_CC_FIELDS; } sub cc_exp_verify { my ($cc_exp_mon,$cc_exp_yr) = @_; my ($month,$year) = (localtime)[4,5]; $month++; $year += 1900; my $current_month = sprintf("%04d%02d",$year,$month); my $cc_exp = sprintf("%04d%02d",2000+$cc_exp_yr,$cc_exp_mon); if ($current_month > $cc_exp) { return 0; } return 1; } sub cc_verify { my ($number) = @_; my ($i, $sum, $weight); return 0 if $number =~ /[^\d\s\-]/; $number =~ s/\D//g; return 0 unless length($number) >= 13 && 0+$number; for ($i = 0; $i < length($number) - 1; $i++) { $weight = substr($number, -1 * ($i + 2), 1) * (2 - ($i % 2)); $sum += (($weight < 10) ? $weight : ($weight - 9)); } return 1 if substr($number, -1) == (10 - $sum % 10) % 10; return 0; } sub submit_order { #now the game begin #prepare xcp_Request my $xcp_request = { action => 'sw_register', object => 'domain', attributes => { reg_type => 'new', domain => $session->{domain}, auto_renew => ($session->{auto_renew}?1:0), period => $session->{period}, affiliate_id => $session->{affiliate_id}, reg_username => $session->{reg_username}, reg_password => $session->{reg_password}, isa_trademark => $session->{isa_trademark}, ca_link_domain => $session->{ca_link_domain}, rant_no => $session->{rant_no}, #attribute #if value 0, '', undef or #not mentioned at all #then new CIRA profile to be creatd, #otherwise we will try register # domain for that registrant nameserver_list => [], contact_set => { owner => { org_name => $session->{reg_name}, }, admin => { lang_pref => $session->{admin_pref_language}, first_name => $session->{admin_first_name}, last_name => $session->{admin_last_name}, org_name => $session->{admin_org_name}, address1 => $session->{admin_address1}, address2 => $session->{admin_address2}, city => $session->{admin_city}, state => $session->{admin_state}, country => $session->{admin_country}, postal_code => $session->{admin_postal_code}, phone => $session->{admin_phone}, fax => $session->{admin_fax}, email => $session->{admin_email}, }, }, custom_tech_contact => $REG_SYSTEM{custom_tech_contact}, custom_nameservers => $REG_SYSTEM{custom_nameservers}, } }; if ($session->{reg_domain}) { $xcp_request->{attributes}{reg_domain} = $session->{reg_domain}; } if ($session->{rant_no} or $session->{ca_link_domain}){ #existing CIRA profile, OSRS gets info from cira and put into an order $xcp_request->{attributes}{domain_description} = 'Existing CIRA profile'; $xcp_request->{attributes}{legal_type} = 'CCT'; $xcp_request->{attributes}{cira_member} = 'Y'; } else { $xcp_request->{attributes}{domain_description} = $session->{reg_desc}, $xcp_request->{attributes}{legal_type} = $session->{'legal_type'}; $xcp_request->{attributes}{cira_member} = ($session->{cira_member}?'Y':'N'); } if ($REG_SYSTEM{custom_tech_contact}){ my $tech_contact = { lang_pref => $session->{tech_pref_language}, first_name => $session->{tech_first_name}, last_name => $session->{tech_last_name}, org_name => $session->{tech_org_name}, address1 => $session->{tech_address1}, address2 => $session->{tech_address2}, city => $session->{tech_city}, state => $session->{tech_state}, country => $session->{tech_country}, postal_code => $session->{tech_postal_code}, phone => $session->{tech_phone}, fax => $session->{tech_fax}, email => $session->{tech_email}, }; $xcp_request->{attributes}{contact_set}{tech} = $tech_contact; } $xcp_request->{attributes}{contact_set}{billing} = $xcp_request->{attributes}{contact_set}{admin}; #cause CIRA doesn't have it, and we need this section just to by-pass opensrs validation if ($REG_SYSTEM{custom_nameservers}) { my $sortorder = 1; foreach (1..6){ next unless $session->{"fqdn$_"}; push @{$xcp_request->{attributes}{nameserver_list}}, { name => $session->{"fqdn$_"}, sortorder=> $sortorder++ }; } } $Log->debug('XCP request is prepared %s',Dumper($xcp_request)); # # # charge/authorize here # $Billing->info("CC Type: %s\n CC #: %s\n CC Exp: %s/%s\n Request: %s ", $session->{p_cc_type}, $session->{p_cc_num}, $session->{p_cc_exp_month}, $session->{p_cc_exp_year}, Dumper($xcp_request)); my $client = new OpenSRS::XML_Client( %OPENSRS); $client->login; my $response = $client->send_cmd($xcp_request); $Log->debug('got from OSRS %s',Dumper($response)); my $status = ''; if ($response->{is_success}) { my $id = $response->{attributes}->{id}; my $admin_email = $response->{attributes}->{admin_email}; $session->add(admin_email => $admin_email); if ($REG_SYSTEM{F_SEND_ORDERS}) { send_email("$path_templates/message.txt", { %$session, mailfrom => $session->{admin_email}|| $ADMIN_EMAIL, mailto => $ADMIN_EMAIL, id => $id, reg_type => 'New Domain', }); } if ($REG_SYSTEM{F_SEND_THANKYOU}) { send_email("$path_templates/thankyou.txt", { %$session, mailto => $session->{admin_email}, mailfrom => $ADMIN_EMAIL, id => $id, }); } if ($session->{ca_reg_type} eq 'municipal'){ return 'complete_municipal.html',%$session,order_id => $id; } return 'complete.html',%$session,order_id => $id; } elsif ( $F_QUEUE_SUPPLIER_UNAVAILABLE and $response->{attributes}->{queue_request_id}){ return 'complete_queued.html', %$session; } return 'error.html', error => sprintf ("Domain: %s Registration attempt failed: %s.", $session->{domain}, $response->{response_text}."
".$response->{attributes}{error}); } sub help { unless ($in{legal_t}) { throw 'web_error' => 'Legal type group must be specififed'; } unless (exists $legal_type_groups{$in{legal_t}}){ throw 'web_error' => 'Invalid Legal Type group'; } return 'legal_type_help.html', %{$legal_type_groups{$in{legal_t}}}; } 1; opensrs-client-3.0.0/cgi/cert.css0000644017777601777760000000043210770014202017741 0ustar nobodynogroup00000000000000 opensrs-client-3.0.0/cgi/dns_manage.cgi0000755017777601777760000012564510770014202021073 0ustar nobodynogroup00000000000000#!/usr/bin/perl # .Copyright (C) 2002 TUCOWS.com Inc. # .Created: 2003/10/30 # .Contactid: # .Url: http://opensrs.org # .Authors: Vedran Vego # # This program is free software; you can redistribute it and/or # modify it under the terms of the GNU Lesser General Public # License as published by the Free Software Foundation; either # version 2.1 of the License, 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 # Lesser General Public License for more details. # # You should have received a copy of the GNU Lesser General Public # License along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place, Suite 330, Boston, # MA 02111-1307 USA # $Id: dns_manage.cgi,v 1.15 2005/09/02 23:01:23 ygumerova Exp $ use vars qw( %in $cgi $path_templates %actions $action $TPP_Client $user_id $user_name $COOKIE_NAME $flag_header_sent %cookies $error_msg $info_msg $path_to_config ); # Null these things out for mod_perl users (%in, $cgi, $path_templates, %actions, $action, $TPP_Client, $info_msg, $error_msg, $path_to_config) = (); # pull in conf file with defined values BEGIN { $path_to_config = ""; # first "do" the major config file do "$path_to_config/OpenSRS.conf"; # now load up the config for Dns service do "$path_to_config/Dns_manage.conf"; } use strict; use lib $PATH_LIB; use CGI ':cgi-lib'; use HTML::Template; use Data::Dumper; use Core::Checksum qw(calculate compare); use OpenSRS::TPP_Client; use OpenSRS::ResponseConverter; use OpenSRS::Util::ConfigJar "$path_to_config/OpenSRS.conf"; use OpenSRS::Util::Common qw(make_navbar_dns); # global defines $user_id = 0; $user_name = ''; $COOKIE_NAME = "OPENSRS_TPP_CLIENT"; $flag_header_sent = 0; $cgi = $ENV{SCRIPT_NAME}; $path_templates = "$PATH_TEMPLATES/dns_manage"; %in = (); $error_msg = ''; $info_msg = ''; # list of valid actions to execute %actions = ( login => undef, do_login => undef, main => undef, dns_list_inventory_items => undef, dns_manage_zone => undef, dns_manage_domain_forwarding => undef, dns_do_update_zone => undef, dns_update_domain_forwarding => undef, dns_retrieve_zone => undef, dns_restore_zone_defaults => undef, edit_for_sale_template => undef, update_for_sale_template => undef, logout => undef, ); # start things up start_up(); # create a client object which we will use to connect to the Tucows server $TPP_Client = new OpenSRS::TPP_Client( %OPENSRS, response_converter => new OpenSRS::ResponseConverter(), ); $TPP_Client->login; # read in the form data ReadParse(\%in); delete $in{error_message}; %cookies = GetCookies(); $action = $in{action}; # perform necessary action if (not $action) { # if no action was supplied, use the defaults validate() ? main() : login(); } elsif (exists $actions{$action}) { # they passed a valid action if (($action eq 'do_login') or validate()) { no strict "refs"; &$action(); use strict; } else { login(); } } else { # they passed an invalid action error_out("Invalid action: $action"); exit; } # close connection to the server $TPP_Client->logout; exit; ########################################################################## sub start_up { if ($DNS_MANAGE{debug}) { # print error to the page select (STDOUT); $| = 1; open (STDERR, ">&STDOUT") or die "Can't dump stdout: $!\n"; select (STDERR); $| = 1; select (STDOUT); } OpenSRS::Util::Common::initialize( path_templates => $PATH_TEMPLATES, mail_settings => \%MAIL_SETTINGS ); } # get cookies from the client sub GetCookies { my %cookies = (); foreach my $cookie (split /\; /, $ENV{HTTP_COOKIE}) { my ($key, $value) = (split /=/, $cookie)[0,1]; $value =~ s/\\0/\n/g; $cookies{$key} = $value; } return %cookies; } sub error_out { my %HTML = (ERROR => shift); print_form(template => "$path_templates/error.html", data => \%HTML); } # print html header sub print_header { my %cookies = @_; return if $flag_header_sent; print "Content-type: text/html\n"; foreach my $key (keys %cookies) { printf "Set-Cookie: %s=%s; PATH=;\n", $key, $cookies{$key}; } print "\n"; $flag_header_sent = 1; } # Substitute values on the specified template and print it to the client an # optional 'type' arg can be passed: 'framed' specifies to pull in base.html # as the outer frame and the given template as the inner frame 'single' # specifies to use the given template alone the default behavior is 'framed'. sub print_form { my %args = @_; $args{title} = $args{title} || 'DNS Service Management'; my $template = HTML::Template->new( cache => 1, filename => $args{template}, die_on_bad_params => 0, ); $template->param( CGI => $cgi, %{ $args{data} }, ); if (not $args{not_framed}) { my $content = $template->output; $template = HTML::Template->new( cache => 1, filename => "$path_templates/base.html", die_on_bad_params => 0, ); $template->param(CONTENT => $content); } $template->param( CGI => $cgi, %{ $args{data} }, user_id => $user_id, ); print_header(); print $template->output; } sub validate { my $ok = 0; if ($cookies{$COOKIE_NAME}) { my ($csum, $uid) = split /:/, $cookies{$COOKIE_NAME}; if ($csum) { $ok = compare($csum, $OPENSRS{private_key}, $uid); $user_id = $uid if $ok; } } if ($cookies{user_name}) { $user_name = $cookies{user_name}; } return $ok; } sub login { my $error_message = shift; my %HTML = (); $HTML{error_message} = $error_message; $HTML{cgi} = $cgi; $HTML{username} = $in{username} if $in{username}; $HTML{title} = "DNS Service Management"; $HTML{password_recovery} = $DNS_MANAGE{password_recovery}; print_form(template => "$path_templates/login.html", data => \%HTML); } sub do_login { my $result; if (not $in{username} or not $in{password}) { login('Authentication failed.'); return; } # check if user exists $result = $TPP_Client->login_user( $in{username}, $in{password}, $OPENSRS{username} ); if (not defined $result or not $result->{is_success}) { my $err = sprintf 'Failed to authenticate user: %s', $result->{response_text} || 'Empty response from server'; login($err); return; } $user_id = $result->{attributes}{user_id}; if (not $user_id) { login('Unable to get user ID.'); return; } # sign user_id and set the cooke. my $csum = calculate($OPENSRS{private_key}, $user_id); print_header($COOKIE_NAME => "$csum:$user_id", user_name => $in{username}); $user_name = $in{username}; main(); } sub logout { # reset global user_id and a cookie $user_id = 0; print_header($COOKIE_NAME => '', user_name => ''); login(); } ########################################################################## sub main { dns_list_inventory_items(); } sub get_inventory_items { my ($start_page,$page_size) = @_; my $start_index = ($start_page * $page_size) + 1; my $TPP_request = { protocol => 'TPP', version => '1.3.0', action => 'execute', object => 'query', requestor => { username => $OPENSRS{username}, }, attributes => { user_id => $user_id, page_size => $page_size, start_index => $start_index, query_name => 'inventory_items.created.by_user_id', conditions => [ { type => 'simple', field => 'user_id', operand => { 'eq' => $user_id, }, }, { type => 'link', link => 'and', }, { type => 'simple', field => 'service', operand => { 'eq' => 'dns', }, }, ], } }; my $TPP_response = $TPP_Client->send_cmd($TPP_request); if ( not $TPP_response->{is_success}) { error_out('Unable to retrieve products: ' . $TPP_response->{response_text}); exit; } return ($TPP_response->{attributes}{result}, $TPP_response->{attributes}{result_control}{record_count}); } sub dns_list_inventory_items { my %HTML = (); my $page = $in{page} || 0; my $limit = 20; my ($items, $total_records) = get_inventory_items($page,$limit); $items = [ grep $_->{service} eq 'dns', @{$items} ]; my $counter = 0; foreach my $item (@{$items}) { $item->{class} = $counter++ % 2 ? "accent" : "soft"; $item->{object_type} = ucfirst $item->{object_type}." DNS"; $item->{creation_date} = (split(/\s/,$item->{creation_date}))[0]; $item->{cgi} = $cgi; } my $num_page_links = 10; my $f_navpage = make_navbar_dns( "dns_list_inventory_items", $total_records, $limit, $num_page_links, $page ); my @f_navbar = ( { external => 1, title => 'PASSWORD MANAGEMENT', action => $DNS_MANAGE{password_url}, separator => ' | ', target => qw (target="blank_"), }, { cgi => $cgi."?", title => 'ZONE LIST', action => 'dns_list_inventory_items', separator => ' | ', }, { cgi => $cgi."?", title => 'LOGOUT', action => 'logout', separator => '', } ); $HTML{total_records} = $total_records; $HTML{records} = $items; $HTML{page} = $page; $HTML{limit} = $limit; $HTML{cgi} = $cgi; $HTML{f_navpage} = $f_navpage; $HTML{f_navbar} = \@f_navbar; $HTML{f_title} = "DNS Management"; $HTML{f_name} = $user_name; $HTML{stat_message} = "".$error_msg .""."". $info_msg.""; $HTML{title} = $HTML{f_title}; print_form(template => "$path_templates/main.html", data => \%HTML); } sub get_inventory_item { my $inventory_item_id = shift; my $TPP_request = { protocol => 'TPP', version => '1.3.0', action => 'execute', object => 'query', requestor => { username => $OPENSRS{username}, }, attributes => { user_id => $user_id, query_name => 'inventory_item.by_id', conditions => [ { type => 'simple', field => 'inventory_item_id', operand => { 'eq' => $inventory_item_id, }, }, ], }, }; my $TPP_response = $TPP_Client->send_cmd($TPP_request); if ( not $TPP_response->{is_success} || !(defined $TPP_response->{attributes}->{result}->[0])) { error_out('Unable to query product: ' . $TPP_response->{response_text}); exit; } return $TPP_response->{attributes}->{result}->[0]; } sub relativename_to_fullname { my $zone_data = shift; my $zone_name = $zone_data->{name}; foreach my $zone_record (@{ $zone_data->{records} }) { if (($zone_record->{type} =~ /^(CNAME|MX|NS)$/i) and ($zone_record->{content} !~ /^\s*$/ )) { $zone_record->{content} .= '.'.$zone_name unless $zone_record->{content} =~ /\.$/; } } } sub dns_manage_zone { # when dns_do_update_zone() calls dns_manage_zone() it might pass # zone update result my $zone_update_result = shift; my %HTML = (); $HTML{cgi} = $cgi; unless ( $in{inventory_item_id}) { error_out('Inventory item id must be specified'); exit; } my $inventory_item = get_inventory_item($in{inventory_item_id}); if (not $inventory_item) { error_out('Null inventory_item in response'); exit; } if ( !validate_item_action($inventory_item->{product_data}{flags},'zone')) { add_info_message("Zone management permission is currently disabled for this zone."); return main(); } my $dns_zone = $inventory_item->{product_data}{zone_data}; relativename_to_fullname($dns_zone); if (not defined $dns_zone) { error_out('Null zone_data in response'); exit; } # if we were given a $zone_update_result: # set error header and extract update results my $delete_results = []; my $create_results = []; my $update_results = []; if (defined $zone_update_result) { $delete_results = $zone_update_result->{delete_records}; $create_results = $zone_update_result->{create_records}; $update_results = $zone_update_result->{update_records}; } my $records = $dns_zone->{records}; my $zone_fqdn = $dns_zone->{name}; $HTML{stat_message} = "".$error_msg .""."". $info_msg.""; $HTML{inventory_item_id} = $in{inventory_item_id}; $HTML{version} = $dns_zone->{version}; $HTML{zone_fqdn} = $zone_fqdn; $HTML{a_records} = build_records($in{inventory_item_id}, $zone_fqdn, $delete_results, $update_results, $records,'A'); $HTML{cname_records} = build_records($in{inventory_item_id}, $zone_fqdn, $delete_results, $update_results, $records, 'CNAME'); $HTML{txt_records} = build_records($in{inventory_item_id}, $zone_fqdn, $delete_results, $update_results, $records, 'TXT'); $HTML{mx_records} = build_records($in{inventory_item_id}, $zone_fqdn, $delete_results, $update_results, $records, 'MX'); $HTML{ns_records} = build_records($in{inventory_item_id}, $zone_fqdn, $delete_results, $update_results, $records, 'NS'); $HTML{a_records_add} = build_add_records($zone_fqdn, $create_results, 'A'); $HTML{cname_records_add} = build_add_records($zone_fqdn,$create_results,'CNAME'); $HTML{txt_records_add} = build_add_records($zone_fqdn,$create_results,'TXT'); $HTML{mx_records_add} = build_add_records($zone_fqdn,$create_results,'MX'); $HTML{ns_records_add} = build_add_records($zone_fqdn, $create_results,'NS'); $HTML{ids} = join(',', map { $_->{id} } @{$records}); $HTML{f_title} = "Zone Management: $zone_fqdn"; $HTML{f_name} = $zone_fqdn; my @f_navbar = ( { cgi => $cgi."?", title => 'ZONE LIST', action => 'dns_list_inventory_items', separator => ' | ', }, { cgi => $cgi."?", title => 'LOGOUT', action => 'logout', separator => '', } ); $HTML{f_navbar} = \@f_navbar; $HTML{title} = $HTML{f_title}; print_form(template => "$path_templates/dns_manage_zone.html", data => \%HTML); } sub build_records { my ($inventory_item_id, $zone_fqdn, $delete_results, $update_results, $in_records, $type) = @_; my $records = [ grep $_->{type} eq $type, @{$in_records} ]; my %deleted = map { $_->{id} => 1 } @{$delete_results}; my %updated = map { $_->{id} => $_ } @{$update_results}; my @html_records = (); my %name_map = (); foreach my $record (@{$records}) { my $name = $record->{name}; if ($name_map{$name}) { push @{$name_map{$name}}, $record; } else { $name_map{$name} = [ $record ]; } } my $counter = 0; foreach my $name (keys %name_map) { my $name_records = $name_map{$name}; my $num = scalar @{$name_records}; my $rowspan = $num > 1 ? "valign=top rowspan=$num" : ""; my $first_row = 1; foreach my $record (@{$name_records}) { my $id = $record->{id}; if (defined $updated{$id}) { map { $record->{$_} = $updated{$id}->{$_} } keys %{ $updated{$id} }; } my $error = ''; if (defined $record->{response_code} and $record->{response_code} != 200 and $record->{response_text}) { $error = $record->{response_text}; } my $rec_name; if ($first_row) { $rec_name = $name eq '@' ? $zone_fqdn : "$name.$zone_fqdn"; $first_row = 0; } push(@html_records, { inventory_item_id => $inventory_item_id, id => $id, error => $error, class => $counter++ % 2 ? "accent" : "soft", rec_name => $rec_name, name => $name, type => $record->{type}, content => $record->{content}, priority => $record->{priority}, delete_checked => $deleted{$id} ? "checked" : '', rowspan => $rowspan, read_only => $record->{read_only}, } ); } } return \@html_records; } sub build_add_records { my ($zone_fqdn, $create_results, $type) = @_; my $created = []; foreach my $result (grep { $_->{type} eq $type } @{$create_results}) { if ($_->{name} eq '@') { unshift @{$created}, $result; } else { push @{$created}, $result; } } my @html_add_records = (); my $counter = 0; for (my $i = 0; $i < $DNS_MANAGE{bulk_factor}; $i++) { my $suffix = 'new_' . $i . '_' . $type; my $create_record = {}; if (($type == 'MX' || $type == 'A') and $i == 0) { if ($created->[0]->{name} eq '@') { $create_record = shift @{$created}; } else { $create_record = {}; } } else { $create_record = (shift @{$created}) || {}; } if ($create_record->{name} eq '@') { $create_record->{name} = ''; } my $error = ''; if (defined $create_record->{response_code} and $create_record->{response_code} != 200 and $create_record->{response_text}) { $error = $create_record->{response_text}; } push(@html_add_records, { error => $error, class => $counter++ % 2 ? "accent" : "soft", suffix => $suffix, name => $create_record->{name}, priority => $create_record->{priority}, content => $create_record->{content}, zone_fqdn => $zone_fqdn, is_input_hidden => ($i == 0 and ($type == 'MX' || $type == 'A')) ? 1 : 0 } ); } return \@html_add_records; } sub dns_do_update_zone { my $TPP_request = { version => '1.4.0', action => 'update', object => 'inventory_item.dns', requestor => { username => $OPENSRS{username}, }, attributes => { service => 'dns', user_id => $user_id, inventory_item_id => $in{inventory_item_id}, product_data => { zone => { version => $in{version}, %{ parse_update_zone_records_request() }, }, }, }, }; my $TPP_response = $TPP_Client->send_cmd($TPP_request); my $zone_update_result; if (not $TPP_response->{is_success}) { if ($TPP_response->{response_code} == 31472) { add_error_message( "Zone record entry error" ); } else { add_error_message($TPP_response->{response_text}); } $zone_update_result = $TPP_response->{attributes}{product_data}{zone}; } else { add_info_message($TPP_response->{response_text}); } return dns_manage_zone($zone_update_result); } sub dns_restore_zone_defaults { my $delete_records = []; if ($in{ids}) { map { push @{$delete_records}, { id => $_ }; } split /,/, $in{ids}; } my $TPP_request = { version => '1.4.0', action => 'update', object => 'inventory_item.dns', requestor => { username => $OPENSRS{username}, }, attributes => { user_id => $user_id, service => 'dns', inventory_item_id => $in{inventory_item_id}, product_data => { zone => { version => $in{version}, delete_records => $delete_records, create_records => [], update_records => [], }, template => { name => 'default', }, }, }, }; my $TPP_response = $TPP_Client->send_cmd($TPP_request); if ($TPP_response->{is_success}) { add_info_message($TPP_response->{response_text}); } else { add_error_message($TPP_response->{response_text}); } dns_manage_zone(); } sub dns_retrieve_zone { error_log('Inventory item id must be specified') unless $in{inventory_item_id}; my $inventory_item = get_inventory_item($in{inventory_item_id}); if (not $inventory_item) { add_error_message('Null inventory_item in response'); } my $dns_zone = $inventory_item->{product_data}{zone_data}; if (not defined $dns_zone) { add_error_message('Null zone_data in response'); } my $zone_records = $dns_zone->{records} || []; my $retrieved_records = []; my $TPP_response = retrieve_zone_records($dns_zone->{name}); if (not $TPP_response->{is_success}) { add_error_message($TPP_response->{response_text}); return dns_manage_zone(); } else { $retrieved_records = $TPP_response->{attributes}{product_data}{zone}{records}; } my $TPP_request = { version => '1.4.0', action => 'update', object => 'inventory_item.dns', requestor => { username => $OPENSRS{username}, }, attributes => { service => 'dns', user_id => $user_id, inventory_item_id => $in{inventory_item_id}, product_data => { zone => { version => $in{version}, delete_records => $in{replace} ? $zone_records : [], create_records => $retrieved_records, update_records => [], }, }, }, }; $TPP_response = $TPP_Client->send_cmd($TPP_request); if ($TPP_response->{is_success}) { add_info_message($TPP_response->{response_text}); } else { add_error_message($TPP_response->{response_text}); } dns_manage_zone(); } sub retrieve_zone_records { my $fqdn = shift; my $prefixes = shift; my $TPP_request = { action => 'retrieve', object => 'dns.zone', requestor => { username => $OPENSRS{username}, }, attributes => { service => 'dns', user_id => $user_id, product_data => { zone => { name => $fqdn, }, prefixes => $prefixes || [], }, }, }; my $TPP_response = $TPP_Client->send_cmd($TPP_request); return $TPP_response; } sub parse_update_zone_records_request { my $delete_records = []; if ($in{delete_records}) { foreach (split /\0/,$in{delete_records}) { push @{$delete_records}, { id => $_ }; } } my %processed = (); my $update_records = []; foreach my $orig_entity (keys %in) { my ($suffix) = $orig_entity =~ /(\d+_orig)$/; next if (not $suffix or $processed{$suffix}); my ($id) = $suffix =~ /(\d+)_orig$/; my $update_record; my @entities = grep /$suffix$/, keys %in; foreach my $entity (@entities) { my ($updated_entity) = $entity =~ /^(.+_\d+)_orig$/; if ($in{$entity} !~ /^\s*$/ and $in{$entity} ne $in{$updated_entity}) { if (not defined $update_record) { $update_record = {id => $id}; } my ($entity_name) = $updated_entity =~ /^(.+)_\d+$/; $update_record->{$entity_name} = $in{$updated_entity}; } } if (defined $update_record) { if (exists $update_record->{content} and $update_record->{content} !~ /^\s*$/) { my $type = $in{'type_' . $update_record->{id}}; if ($type ne 'A' and $update_record->{content} !~ m/\.$/) { $update_record->{content} .= '.'; } } push @{$update_records}, $update_record; } $processed{$suffix} = 1; } my $create_records = []; if ($in{suffix}) { foreach my $suffix (split /\0/, $in{suffix}) { my ($type) = $suffix =~ /\d+_(.+)$/; my $create_record = {type => $type}; map { $_ =~ /^(.+)_$suffix$/; if ($in{$_} !~ /^\s*$/) { $create_record->{$1} = $in{$_}; } } grep /$suffix$/, keys %in; if (not $create_record->{name}) { $create_record->{name} = '@'; } if (scalar keys %{$create_record} > 2) { if (exists $create_record->{content} and $create_record->{type} =~ m/^(CNAME|MX|NS)$/i) { $create_record->{content} .= '.' unless $create_record->{content} =~ m/\.$/; } push @{$create_records}, $create_record; } } } return { delete_records => $delete_records, create_records => $create_records, update_records => $update_records, }; } sub dns_manage_domain_forwarding { # when dns_update_domain_forwarding() calls dns_manage_domain_forwarding() # it might pass update result my $update_result = shift; my %HTML = (); $HTML{cgi} = $cgi; unless ( $in{inventory_item_id} ) { error_out('Inventory item id must be specified'); exit; } my $inventory_item = get_inventory_item($in{inventory_item_id}); if (not $inventory_item) { error_out('Null inventory_item in response'); exit; } if ( !validate_item_action($inventory_item->{product_data}{flags},'forwarding')) { add_info_message("Domain forwarding permission is currently disabled for this zone."); return main(); } my $zone_data = $inventory_item->{product_data}{zone_data}; if (not defined $zone_data) { error_out('Null zone_data in response'); exit; } my $zone_services = $inventory_item->{product_data}{zone_services}; if (not defined $zone_services) { error_out('Null zone_services in response'); } # if we were given a $update_result - extract update results my $delete_results = []; my $create_results = []; my $update_results = []; if (defined $update_result) { $delete_results = $update_result->{delete_services}; $create_results = $update_result->{create_services}; $update_results = $update_result->{update_services}; } # scan for 'www' zone service my $create_www = 1; map { $create_www = 0 if $_->{prefix} eq 'www' } @$zone_services; # scan for 'www' zone records if ($create_www) { map { $create_www = 0 if $_->{name} eq 'www' } @{$zone_data->{records}}; } $HTML{create_www} = $create_www; my $zone_fqdn = $zone_data->{name}; $HTML{stat_message} = "".$error_msg .""."". $info_msg.""; $HTML{inventory_item_id} = $in{inventory_item_id}; $HTML{zone_fqdn} = $zone_fqdn; $HTML{f_title} = "Domain Forwarding Management: $zone_fqdn"; $HTML{f_name} = $zone_fqdn; $HTML{show_forwarding} = $inventory_item->{product_data}{flags}{allow_url_forwarding}; $HTML{show_templates} = $inventory_item->{product_data}{flags}{allow_templates}; # default $HTML{domain_setting} = "none"; $HTML{chk_none} = "checked"; $HTML{domain_cloak} = 0; $HTML{domain_url} = 'http://'; my $zone_services_num = scalar @{$zone_services}; # this for subdomain foreach my $zone_service (@{$zone_services}) { next unless $zone_service->{prefix} eq "@"; # do not count zone service for domain --$zone_services_num; $HTML{domain_zone_service_id} = $zone_service->{id}; if ($zone_service->{type} eq 'template') { $HTML{chk_none} = ""; if ($zone_service->{content} eq 'under-construction') { $HTML{domain_setting} = "uc"; $HTML{chk_uc} = "checked"; } elsif ($zone_service->{content} eq 'for-sale') { $HTML{domain_setting} = "fs"; $HTML{chk_fs} = "checked"; } } elsif ($zone_service->{type} eq 'url-cloak') { $HTML{domain_setting} = "fwd"; $HTML{domain_url} = $zone_service->{content}; $HTML{domain_cloak} = 1; $HTML{chk_none} = ""; $HTML{chk_fwd} = "checked"; } elsif ($zone_service->{type} eq 'redirector') { $HTML{domain_setting} = "fwd"; $HTML{domain_url} = $zone_service->{content}; $HTML{chk_none} = ""; $HTML{chk_fwd} = "checked"; } last; } $HTML{subdomain_forward_records} = build_fw_records($zone_services,$zone_fqdn); $HTML{subdomain_forward_add_records} = build_fw_add_records($create_results, $zone_fqdn, $create_www); my @f_navbar = ( { cgi => $cgi."?", title => 'ZONE LIST', action => 'dns_list_inventory_items', separator => ' | ', }, { cgi => $cgi."?", title => 'LOGOUT', action => 'logout', separator => '', } ); $HTML{f_navbar} = \@f_navbar; $HTML{title} = $HTML{f_title}; print_form(template => "$path_templates/dns_domain_forwarding.html", data => \%HTML); } sub build_fw_records { my ($zone_services,$zone_fqdn) = @_; my @html_fw_records; my $counter = 0; foreach my $zone_service (@{$zone_services}) { next if $zone_service->{prefix} eq '@'; push(@html_fw_records, { class => $counter++ % 2 ? "accent" : "soft", prefix => $zone_service->{prefix}, name => $zone_fqdn, content => $zone_service->{content}, id => $zone_service->{id}, url_cloak => $zone_service->{type} eq "url-cloak" ? 1 : 0, } ); } return \@html_fw_records; } sub build_fw_add_records { my ($create_results, $zone_fqdn, $create_www) = @_; my @html_fw_add_records; my $new_service = {}; foreach my $create_result (@{$create_results}) { # skip create_result for domain next if $create_result->{prefix} eq '@'; # XXX fix it to use resonse code if (not $create_result->{id}) { # ignore auto-created forwarding for 'www' subdomain next if $create_result->{prefix} eq 'www' and $create_www; $new_service = $create_result; last; } } push(@html_fw_add_records, { class => "accent", new_subdomain => $new_service->{prefix}, new_url => $new_service->{content} || 'http://', new_cloaked => $new_service->{type} eq 'url-cloak' ? "checked" : "", zone_fqdn => $zone_fqdn, } ); return \@html_fw_add_records; } sub dns_update_domain_forwarding { my $update_data = parse_update_zone_services_request(); if ($in{create_www} and $in{domain_setting} ne 'none') { # make sure there is no other 'www' domain forward to create my $www_exists = 0; map { $www_exists = 1 if $_->{prefix} eq 'www' } @{$update_data->{create_services}}; push @{$update_data->{create_services}}, { prefix => 'www', type => 'redirector', content => "http://" . $in{create_www}, } unless $www_exists; } if ( scalar @{$update_data->{delete_services}} == 0 && scalar @{$update_data->{create_services}} == 0 && scalar @{$update_data->{update_services}} == 0) { return dns_manage_domain_forwarding(); } my $TPP_request = { version => '1.4.0', action => 'update', object => 'inventory_item.dns', requestor => { username => $OPENSRS{username}, }, attributes => { user_id => $user_id, service => 'dns', inventory_item_id => $in{inventory_item_id}, product_data => { zone_services => $update_data, } }, }; my $TPP_response = $TPP_Client->send_cmd($TPP_request); my $update_result; if (not $TPP_response->{is_success}) { $update_result = $TPP_response->{attributes}{product_data}{zone_services}; my $error_text; TYPE: foreach my $type qw(create_services delete_services update_services) { my @services = @{ $TPP_response->{attributes}{product_data}{zone_services}{$type} }; foreach my $service (@services) { if ($service->{response_code} != 200 and $service->{response_text}) { if ($service->{prefix} ne '@') { if ($type eq 'create_services') { $error_text = "Failed to create subdomain forwarding: "; } elsif ($type eq 'delete_services') { $error_text = "Failed to delete subdomain forwarding: "; } elsif ($type eq 'update_services') { $error_text = "Failed to update subdomain forwarding: "; } } else { $error_text = "Failed to update domain forwarding: "; } if ($service->{response_code} == 30441) { # "Invalid zone service content" $error_text .= "Format of entry is invalid: " . $service->{content}; } else { $error_text .= $service->{response_text}; } last TYPE; } } } if ($error_text) { add_error_message($error_text); } else { add_error_message($TPP_response->{response_text}); } } else { add_info_message($TPP_response->{response_text}); } return dns_manage_domain_forwarding($update_result); } sub parse_update_zone_services_request { my $delete_services = []; my $create_services = []; my $update_services = []; # parse domain settings my $domain_zone_service_type; my $domain_zone_service_content; if ($in{domain_setting} eq 'uc') { $domain_zone_service_type = 'template'; $domain_zone_service_content = 'under-construction'; } elsif ($in{domain_setting} eq 'fs') { $domain_zone_service_type = 'template'; $domain_zone_service_content = 'for-sale'; } elsif ($in{domain_setting} eq 'fwd') { $in{domain_cloak} = 0 unless defined $in{domain_cloak}; $domain_zone_service_type = $in{domain_cloak} ? 'url-cloak' : 'redirector'; $domain_zone_service_content = $in{domain_url}; } if ($in{domain_setting} ne $in{orig_domain_setting}) { my $tmp = $in{orig_domain_setting} . $in{domain_setting}; if ($tmp eq 'fsuc' or $tmp eq 'ucfs') { push @{$update_services}, { id => $in{domain_zone_service_id}, content => $domain_zone_service_content, }; } else { if ($in{orig_domain_setting} ne 'none') { push @{$delete_services}, { id => $in{domain_zone_service_id} }; } if ($in{domain_setting} ne 'none') { push @{$create_services}, { prefix => '@', type => $domain_zone_service_type, content => $domain_zone_service_content, }; } } } elsif ($in{domain_setting} eq 'fwd') { if ($in{domain_cloak} ne $in{orig_domain_cloak}) { push @{$delete_services}, { id => $in{domain_zone_service_id}, }; push @{$create_services}, { prefix => '@', type => $domain_zone_service_type, content => $domain_zone_service_content, }; } elsif ($in{domain_url} ne $in{orig_domain_url}) { push @{$update_services}, { id => $in{domain_zone_service_id}, content => $domain_zone_service_content, }; } } # parse new subdomain if ($in{new_subdomain}) { push @{$create_services}, { prefix => $in{new_subdomain}, type => $in{new_cloaked} ? 'url-cloak' : 'redirector', content => $in{new_url}, }; } # parse updates/deletions foreach my $key (keys %in) { if ($key =~ /^delete_(\d+)$/) { push @{$delete_services}, { id => $1 }; } elsif ($key =~ /^url_(\d+)$/ ) { next if defined $in{"delete_$1"}; if ($in{$key} ne $in{"orig_$key"}) { push @{$update_services}, { id => $1, content => $in{$key}, }; } $in{"subdomain_cloak_$1"} = 0 unless $in{"subdomain_cloak_$1"}; if ($in{"subdomain_cloak_$1"} ne $in{"orig_subdomain_cloak_$1"}) { push @{$delete_services}, { id => $1, }; push @{$create_services}, { prefix => $in{"prefix_$1"}, type => $in{"subdomain_cloak_$1"} ? 'url-cloak' : 'redirector', content => $in{"url_$1"}, }; } } } # now check for services to be deleted, but that are in update list also # remove such services from update list my %delete_map = map { $_->{id} => undef } @$delete_services; my %update_map = map { $_->{id} => $_ } @$update_services; map { delete $update_map{$_} } keys %delete_map; $update_services = [ values %update_map ]; return { delete_services => $delete_services, create_services => $create_services, update_services => $update_services, }; } sub edit_for_sale_template { my %HTML = (); $HTML{cgi} = $cgi; unless ( $in{inventory_item_id} ) { error_out('Inventory item id must be specified'); exit; } my $inventory_item = get_inventory_item($in{inventory_item_id}); if (not $inventory_item) { error_out('Null inventory_item in response'); exit; } my $zone_data = $inventory_item->{product_data}{zone_data}; if (not defined $zone_data) { error_out('Null zone_data in response'); exit; } my $zone_services = $inventory_item->{product_data}{zone_services}; if (not defined $zone_services) { error_out('Null zone_services in response'); } foreach my $zone_service (@{$zone_services}) { next unless $zone_service->{content} eq "for-sale" && $zone_service->{type} eq "template"; $HTML{domain_zone_service_id} = $zone_service->{id}; $HTML{heading} = $zone_service->{parameters}{heading}; $HTML{description} = $zone_service->{parameters}{description}; } $HTML{stat_message} = "".$error_msg .""."". $info_msg.""; $HTML{inventory_item_id} = $in{inventory_item_id}; $HTML{zone_fqdn} = $zone_data->{name}; $HTML{f_title} = "For Sale Template: ".$zone_data->{name}; $HTML{title} = $HTML{f_title}; print_form(template => "$path_templates/for_sale_template.html", data => \%HTML); } sub update_for_sale_template { if ( length($in{heading}) > 255) { add_error_message("Invalid number of characters for heading field [max 255]"); return edit_for_sale_template(); } if ( length($in{description}) > 3999) { add_error_message("Invalid number of characters for description field [max 3999]"); return edit_for_sale_template(); } my $update_data = parse_update_for_sale_template_request(); if (scalar @{$update_data->{update_services}} == 0) { return edit_for_sale_template(); } my $TPP_request = { version => '1.4.0', action => 'update', object => 'inventory_item.dns', requestor => { username => $OPENSRS{username}, }, attributes => { user_id => $user_id, service => 'dns', inventory_item_id => $in{inventory_item_id}, product_data => { zone_services => $update_data, }, }, }; my $TPP_response = $TPP_Client->send_cmd($TPP_request); if (not $TPP_response->{is_success}) { add_error_message($TPP_response->{response_text}); } else { add_info_message($TPP_response->{response_text}); } return edit_for_sale_template(); } sub parse_update_for_sale_template_request { my $delete_services = []; my $create_services = []; my $update_services = []; push @{$update_services}, { id => $in{domain_zone_service_id}, parameters => { heading => $in{heading}, description => $in{description}, } }; return { delete_services => $delete_services, create_services => $create_services, update_services => $update_services, }; } sub add_info_message { my $message = shift; $info_msg .= $message."
"; } sub add_error_message { my $message = shift; $error_msg .= $message."
"; } sub validate_item_action { my ($flags,$action) = @_; my $allowed = 0; if ( $action eq 'zone') { $allowed = 1 if $flags->{allow_zone_management}; } elsif ( $action eq 'forwarding') { $allowed = 1 if $flags->{allow_url_forwarding} || $flags->{allow_templates}; } return $allowed; } opensrs-client-3.0.0/cgi/dns_manage.css0000644017777601777760000000637210770014202021111 0ustar nobodynogroup00000000000000BODY { font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; font-size: 12px; background-color: #B1C0C0; } TD { font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; font-size: 12px; } A.link { font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; font-size: 12px; color: #709BD9; text-decoration: none; background: transparent; } A.visited { font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; font-size: 12px; color: #3F577A; text-decoration: none; background: transparent; } A.active { font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; font-size: 12px; color: #709BD9; text-decoration: none; background: transparent; } A.hover { font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; font-size: 12px; color: #709BD9; text-decoration: none; background: transparent; } HR { COLOR: #A6C1E9; BACKGROUND-COLOR: #A6C1E9; border: 0px; } td.accent { font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; font-size: 11px; color: black; background-color: #E4ECF8; padding-left: 2pt; } td.soft { font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; font-size: 11px; color: black; background-color: #EDEDED; padding-left: 2pt; } td.wh { font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; font-size: 11px; color: black; background-color: #FFFFFF; padding-left: 15pt; padding-top: 0pt; } td.bl { font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; font-size: 11px; color: black; background-color: #000000; } .header1 { font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; font-size: 24px; color: #000000; font-weight: bold; } .header2 { font-family: Georgia, Times New Roman, Times, serif; font-size: 14px; color: #6D6D6D; font-variant:small-caps;} .name2 { font-family: Georgia, Times New Roman, Times, serif; font-size: 14px; color: #6D6D6D; } .header3 { font-family: Georgia, Times New Roman, Times, serif; font-size: 14px; color: #000000; font-variant:small-caps; } .nav { font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; font-size: 12px; color: #2E3A4C; font-weight: bold; text-decoration: none; } input,form { padding: 0; margin: 0; } input.soft { background-color: #D8D8D8; font-size: 10px; color: #000000; } input.accent { background-color: #C4CBD7; font-size: 10px; color: #000000; } input.zms { background-color: #D8D8D8; font-size: 10px; color: #000000; } input.zma { background-color: #C4CBD7; font-size: 10px; color: #000000; } input.dfs { background-color: #D8D8D8; font-size: 10px; color: #000000; } input.dfa { background-color: #C4CBD7; font-size: 10px; color: #000000; } input.prs { background-color: #D8D8D8; font-size: 10px; color: #000000; } input.pra { background-color: #C4CBD7; font-size: 10px; color: #000000; } input.ed { background-color: #C4CBD7; font-size: 10px; color: #000000; } input.ca { background-color: #C4CBD7; font-size: 10px; color: #000000; } input.sa { background-color: #C4CBD7; font-size: 10px; color: #000000; } input.up { background-color: #D8D8D8; font-size: 10px; color: #000000; } input.rs { background-color: #C4CBD7; font-size: 10px; color: #000000; } input.radio.accent { background : #E4ECF8; } input.radio.soft { background : #EDEDED; } .error {font-size: 11px; color: #FF0000;} opensrs-client-3.0.0/cgi/emaildefense.cgi0000755017777601777760000012126610770014202021413 0ustar nobodynogroup00000000000000#!/usr/bin/perl # .Copyright (C) 2004 TUCOWS.com Inc. # .Created: 2004/07/17 # .Contactid: # .Url: http://email.tucows.com # .Authors: Yuliya Gumerova # # # This program is free software; you can redistribute it and/or # modify it under the terms of the GNU Lesser General Public # License as published by the Free Software Foundation; either # version 2.1 of the License, 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 # Lesser General Public License for more details. # # You should have received a copy of the GNU Lesser General Public # License along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA # # # use vars qw(%in $cgi $session $path_templates %actions $action $antispam $path_to_config); # Null these things out for mod_perl users (%in, $cgi, $session, $path_templates, %actions, $action, $path_to_config) = (); use constant NUM_SERVERS => 4; # max number of servers a user can specify. # pull in conf file with defined values # XXX NOTE XXX Update this configuration file BEGIN { # first "do" the major config file $path_to_config = ""; do "$path_to_config/OpenSRS.conf"; # now load up the config for EmailDefense services do "$path_to_config/EmailDefense.conf"; } use strict; use lib $PATH_LIB; use CGI ':cgi-lib'; use HTML::Template; use Data::Dumper; use OpenSRS::Util::ConfigJar "$path_to_config/OpenSRS.conf"; use OpenSRS::Util::ConfigJar "$path_to_config/EmailDefense.conf"; use OpenSRS::Util::Common qw(send_email build_select_menu build_select_menu3 build_country_list make_navbar); use OpenSRS::XML_Client; use OpenSRS::EmailDefense; use OpenSRS::Util::Session; # global defines $cgi = $ENV{SCRIPT_NAME}; $path_templates = "$PATH_TEMPLATES/emaildefense"; %in = (); %actions = ( start_up => undef, lookup_domain => undef, recover_password => undef, do_recover_password => undef, login_domain_user => undef, login_user => undef, select_service_action => undef, create_new_user => undef, add_user_accounts => undef, do_add_user_accounts => undef, do_add_user_roles_and_pass_info => undef, process_new_purchase_order => undef, manage_service => undef, do_manage_service => undef, do_manage => undef, do_add_email_servers => undef, add_manage_user_accounts => undef, do_add_contact_info => undef, confirm_add_manage_order => undef, remove_manage_user_accounts => undef, confirm_remove_manage_order => undef, list_features_and_users => undef, cancel_new_purchase_order => undef, cancel_emaildefense_service => undef, do_cancel_emaildefense_service => undef, edit_user_accounts => undef, edit_contact_info => undef, edit_manage_user_accounts => undef, edit_remove_manage_user_accounts => undef, ); print "Content-type: text/html\n\n"; # start things up # set debugging level set_debugging_level(); init_antispam(); # read in the form data ReadParse(\%in); local $Data::Dumper::Purity = 1; local $Data::Dumper::Deepcopy = 1; $session = OpenSRS::Util::Session->restore( $in{session}, $in{sign}, $OPENSRS{private_key}); $action = $in{action}; delete $in{session}; delete $in{sign}; delete $in{action}; process_action($action); $antispam->logout(); exit; sub init_antispam { $antispam = new OpenSRS::EmailDefense(); $antispam->init(); } sub process_action { my $action = shift; #----------------------------------------------------- # perform necessary actions # no action was supplied, so use the default if (not $action) { start_up(); # they passed a valid action } elsif (exists $actions{$action}) { no strict "refs"; &$action(); use strict; # they passed an invalid action } else { error_out("Invalid action: $action"); } } # Session functions #################################################################### # delete default value from session. sub delete_defaults { map { delete $session->{$_} } keys %{$session}; } # load default value from config file into session. sub load_defaults { foreach my $key ( keys %DEFAULT_VALUES ) { $session->{$key} = $DEFAULT_VALUES{$key}; } } # look up a value from session. sub lookup_value { my $key = shift; return $session->{$key}; } # store a value into session. sub store_value { my ($key, $value) = @_; $session->{$key} = $value; } # just a shorter version of looking up a value of # "sd_curr_domain_info" from session. sub lookup_curr_domain_value { my $key = shift; my $curr_domain_info = lookup_value('sd_curr_domain_info'); my $value = $curr_domain_info->{$key}; return $value; } sub store_curr_domain_value { my ($key, $value) = @_; my $curr_domain_info = lookup_value('sd_curr_domain_info'); $curr_domain_info->{$key} = $value; store_value('sd_curr_domain_info',$curr_domain_info ); } # clears current domain info and initialises domain's accounts info. # "Current domain" holds info in the session on the domain being managed or purchased. sub init_curr_domain_info { my $curr_domain_info = {}; store_value('sd_curr_domain_info', $curr_domain_info); init_domain_accounts_info(); } # initialises current domain info to the domain's values. sub get_current_domain_info { init_curr_domain_info(); my $curr_domain_info = lookup_value('sd_curr_domain_info'); $curr_domain_info->{domain_name} = $in{domain_name}; $curr_domain_info->{inventory_item_id} = $in{inventory_item_id}; store_value('sd_curr_domain_info', $curr_domain_info ); get_domain_accounts_info(); } # info about domain's accounts is cleaned. sub init_domain_accounts_info { my @old_user_accounts = (); my @old_user_accounts_string = (); # 'mod_' is used for added or removed. my @mod_user_accounts = (); my @mod_user_accounts_string = (); my @probable_mod_user_accounts_string = (); my $curr_domain_info = lookup_value('sd_curr_domain_info'); $curr_domain_info->{old_user_accounts} = \@old_user_accounts; $curr_domain_info->{old_user_accounts_string} = \@old_user_accounts_string; $curr_domain_info->{mod_user_accounts} = \@mod_user_accounts; $curr_domain_info->{mod_user_accounts_string} = \@mod_user_accounts_string; $curr_domain_info->{probable_mod_user_accounts_string} = \@probable_mod_user_accounts_string; store_value('sd_curr_domain_info', $curr_domain_info ); } # Get info of all accounts on the current domain. # Store the gotten info in the session in "curr_domain_info". sub get_domain_accounts_info { my $result = $antispam->get_domain_accounts_info($in{inventory_item_id}); error_out($result->{response_text}) if not $result->{is_success}; error_out("This domain has been deleted. You cannot perform any operation on it. Your list of domains will be updated within 8 hours to exclude deleted domain.") if $result->{attributes}{result}[0]{state} eq 'deleted'; my @old_user_accounts = (); my @old_user_accounts_string = (); map { push @old_user_accounts, { name => $_->{name}, role => $_->{role}, feature_set => $_->{feature_set}}; } @{$result->{attributes}{result}[0]{product_data}{accounts}}; map { push @old_user_accounts_string, $_->{name}; } @old_user_accounts; my $curr_domain_info = lookup_value('sd_curr_domain_info'); if (scalar @old_user_accounts_string == 1) { $curr_domain_info->{disallow_remove_user_account} = 1; } $curr_domain_info->{old_user_accounts} = \@old_user_accounts; $curr_domain_info->{old_user_accounts_string} = \@old_user_accounts_string; store_value('sd_curr_domain_info', $curr_domain_info ); } # get all domains with antispam for a particular user, by page. sub get_antispam_domains_by_user { my $domain_user_id = lookup_value('sd_domain_user_id') || $in{domain_user_id}; my %data = ( user_id => $domain_user_id ); my $result = $antispam->get_antispam_domains_by_user( \%data ); return $result; } ######################### GENERAL FUNCTIONS ########################################### sub start_up { # delete deafult values from the session. delete_defaults(); #load the defaults from config file load_defaults(); show_lookup(); } # Lookup is the default page to show if no action is # specified sub show_lookup { # start every lookup with a clean info about the domain. init_curr_domain_info(); # if defaults contain domain name, # proceed to the next action without displaying html for domain entry. if(lookup_value('dflt_domain_name')){ store_curr_domain_value ('domain_name',lookup_value('dflt_domain_name')); do_lookup_domain(); } else { print_form(template => "$path_templates/lookup.html"); } } sub lookup_domain { my $domain_name = $in{domain_name}; error_out("Empty domain") if not $domain_name; store_curr_domain_value ('domain_name',$domain_name); do_lookup_domain(); } # Check if domain exists, does not exist, # or is already taken and belongs to a different reseller. # If the domain is taken and belongs to a different reseller, error out. sub do_lookup_domain { my $curr_domain_info = lookup_value('sd_curr_domain_info'); my $domain_name = $curr_domain_info->{domain_name}; my $result = $antispam->check_domain($domain_name); if ($result->{is_success}) { $curr_domain_info->{available} = $result->{available}; # looping can be removed after API is fixed to return only active domains. foreach my $item (@{$result->{attributes}{result}}) { $curr_domain_info->{inventory_item_id} = $item->{inventory_item_id}; store_value('sd_domain_user_id',$item->{user_id}); } store_value ('sd_curr_domain_info',$curr_domain_info); select_service_action(); } else { error_out($result->{error}); } } # If domain does not exist, login as existing or new user. # If domain exists and belongs to the querying reseller, login as existing user. sub select_service_action { # store_username_and_password(); if (lookup_curr_domain_value('available')) { new_purchase_service_login(); } else { manage_service_login(); } } sub store_username_and_password { my ($username, $password, $error, $result); if(lookup_value('dflt_username')){ $username = lookup_value('dflt_username'); $password = lookup_value('dflt_password'); } else { $username = $in{username}; $password = $in{password}; } $result = $antispam->check_username_syntax($username); $error .= $result->{error} if not $result->{is_success}; #$result = $antispam->check_password_syntax($password); #$error .= $result->{error} if not $result->{is_success}; error_out($error) if $error; store_value('sd_username', $username); store_value('sd_password', $password); } sub create_new_user { store_username_and_password(); store_value('sd_confirm_password',$in{confirm_password}) if not lookup_value('sd_confirm_password'); my $result = $antispam->create_user( lookup_value('sd_username'), lookup_value('sd_password'), lookup_value('sd_confirm_password'), ); error_out($result->{error}) if not $result->{is_success}; store_value('sd_domain_user_id', $result->{attributes}{user_id}); new_purchase_service(); } # Password is emailed to the user. sub recover_password { print_form(template => "$path_templates/recover_password.html"); } sub do_recover_password { my %HTML; $HTML{domain_name} = lookup_curr_domain_value('domain_name'); my $result = $antispam->recover_password($in{username}); if ($result->{is_success}) { print_form(template => "$path_templates/password_recovery_msg.html", data => \%HTML ); } else { error_out($result->{error}); } } sub new_purchase_service_login { store_curr_domain_value('service_type','new_purchase'); if(lookup_value('dflt_username')){ login_user(); } else { my %HTML; $HTML{domain_name} = lookup_curr_domain_value('domain_name'); print_form(template=> "$path_templates/new_purchase_service_login.html", data => \%HTML); } } # Login user for the purchase of new domain. sub login_user { store_username_and_password(); my $result = $antispam->login_user( lookup_value('sd_username'), lookup_value('sd_password')); if ($result->{is_success}) { store_value('sd_domain_user_id',$result->{attributes}{user_id}); new_purchase_service(); } else { error_out($result->{error}); } } sub new_purchase_service { my %HTML; add_user_accounts(); } sub manage_service_login { if(lookup_value('dflt_username')){ login_domain_user(); } else { print_form(template => "$path_templates/manage_service_login.html"); } } # login user only if queried domain belongs to the user for managing. sub login_domain_user { store_username_and_password(); my $result = $antispam->login_domain_user( lookup_value('sd_username'), lookup_value('sd_password'), lookup_value('sd_domain_user_id') ); if ($result->{is_success}) { manage_service(); } else { error_out($result->{error}); } } # store all domains and info on each of them in the session. sub manage_service { my (%HTML, $result, $domain, @sd_domains); load_defaults(); store_value('sd_domain_user_id', $in{domain_user_id}) if $in{domain_user_id}; $domain = $in{domain_name} || lookup_curr_domain_value('domain_name'); if (lookup_value('dflt_manage_one_domain')) { $result = $antispam->get_domain_info( $domain ); } else { $result = get_antispam_domains_by_user(); } error_out($result->{error}) if not $result->{is_success}; error_out("There are no Email Defense Service domains to manage as your order has not been processed yet.") if not scalar @{$result->{attributes}{result}}; foreach $domain ( @{$result->{attributes}{result}} ) { push @sd_domains, { domain_name => $domain->{description}, inventory_item_id => $domain->{inventory_item_id}, }; } my @sd_domains = sort { $a->{domain_name} cmp $b->{domain_name} } @sd_domains; store_value('sd_domains', \@sd_domains); do_manage_service(); } # display all domains, with each domain keeping a session in case it is going to be managed. sub do_manage_service { my (%HTML, @html_domains, $domain, $i); init_curr_domain_info(); store_curr_domain_value('service_type','manage'); my %ss = $session->dump($OPENSRS{private_key}); foreach $domain ( @{lookup_value('sd_domains')} ) { push @html_domains, { domain_name => $domain->{domain_name}, inventory_item_id => $domain->{inventory_item_id}, class => $i%2 ? 'soft' : 'accent', session => $ss{session}, sign => $ss{sign}, }; $i++; } $HTML{domains} = \@html_domains; $HTML{navbar} = lookup_value('sd_navbar'); print_form(template => "$path_templates/manage_service.html", data => \%HTML); } # mix and match different functions for different actions to be performed. sub do_manage { if($in{cancel}) { if ($in{edit_path}) { process_action($in{cancel_edit_action}); } else { do_manage_service(); } } elsif($in{add_manage_user_accounts}) { add_manage_user_accounts(); } elsif($in{add_manage_user_roles_and_pass_info}) { do_add_manage_user_accounts(); add_user_roles_and_pass_info(); } elsif($in{confirm_add_manage_order}) { do_add_manage_user_roles_and_pass_info(); confirm_add_manage_order(); } elsif($in{process_add_manage_order}) { process_add_manage_order(); } elsif($in{remove_manage_user_accounts}) { remove_manage_user_accounts(); } elsif($in{confirm_remove_manage_order}) { do_remove_manage_user_accounts(); confirm_remove_manage_order(); } elsif($in{process_remove_manage_order}) { process_remove_manage_order(); } } ######################## USER ACCOUNTS ######################################### sub add_user_accounts { get_current_domain_info() if $in{init_curr_domain}; my $HTML = get_basic_user_accounts_html(); print_form(template => "$path_templates/add_user_accounts.html", data => $HTML ); } sub add_manage_user_accounts { get_current_domain_info() if $in{init_curr_domain}; my $HTML = get_basic_user_accounts_html(); print_form(template => "$path_templates/add_manage_user_accounts.html", data => $HTML ); } sub remove_manage_user_accounts { get_current_domain_info() if $in{init_curr_domain}; my $HTML = get_basic_user_accounts_html(); print_form(template => "$path_templates/remove_manage_user_accounts.html", data => $HTML ); } sub edit_user_accounts { my $HTML = get_edit_user_accounts_html(); print_form(template => "$path_templates/add_user_accounts.html", data => $HTML ); } sub edit_manage_user_accounts { my $HTML = get_edit_user_accounts_html(); print_form(template => "$path_templates/add_manage_user_accounts.html", data => $HTML ); } sub edit_remove_manage_user_accounts { my $HTML = get_edit_user_accounts_html(); print_form(template => "$path_templates/remove_manage_user_accounts.html", data => $HTML ); } sub get_basic_user_accounts_html { my %HTML; my $curr_domain_info = lookup_value('sd_curr_domain_info'); $HTML{domain_name} = $curr_domain_info->{domain_name}; $HTML{max_users} = $ANTISPAM{MAX_USERS}; $HTML{disallow_remove_user_account} = $curr_domain_info->{disallow_remove_user_account}; return \%HTML; } sub get_edit_user_accounts_html { my $HTML; $HTML = get_basic_user_accounts_html(); my $curr_domain_info = lookup_value('sd_curr_domain_info'); $HTML->{user_accounts} = join "\n", @{$curr_domain_info->{probable_mod_user_accounts_string}}; # if we want to edit previously selected user accounts, # we need to clear previous selection. $HTML->{edit_path} = 1; return $HTML; } sub do_add_user_accounts { confirm_new_purchase_order() if $in{cancel}; my @mod_user_accounts_string = split " ", $in{mod_user_accounts_string}; my $result = $antispam->check_user_accounts($ANTISPAM{MAX_USERS}, \@mod_user_accounts_string); error_out($result->{error}) if not $result->{is_success}; my $curr_domain_info = lookup_value('sd_curr_domain_info'); $curr_domain_info->{probable_mod_user_accounts_string} = \@mod_user_accounts_string; store_value('sd_curr_domain_info', $curr_domain_info ); add_user_roles_and_pass_info(); } sub do_add_manage_user_accounts { my $curr_domain_info = lookup_value('sd_curr_domain_info'); my @mod_user_accounts_string = split " ", $in{mod_user_accounts_string}; my $old_user_accounts_string = $curr_domain_info->{old_user_accounts_string}; my $result = $antispam->check_add_user_accounts($ANTISPAM{MAX_USERS}, \@mod_user_accounts_string, $old_user_accounts_string); error_out($result->{error}) if not $result->{is_success}; $curr_domain_info->{probable_mod_user_accounts_string} = \@mod_user_accounts_string; store_value('sd_curr_domain_info', $curr_domain_info ); } sub do_remove_manage_user_accounts { if ( ($in{confirm_remove_manage_order} and exists $in{mod_user_accounts_string}) or not $in{confirm_remove_manage_order} ) { my $curr_domain_info = lookup_value('sd_curr_domain_info'); my @mod_user_accounts_string = split " ", $in{mod_user_accounts_string}; my $old_user_accounts_string = $curr_domain_info->{old_user_accounts_string}; my $result = $antispam->check_remove_user_accounts($ANTISPAM{MAX_USERS}, \@mod_user_accounts_string,$old_user_accounts_string); error_out($result->{error}) if not $result->{is_success}; $curr_domain_info->{probable_mod_user_accounts_string} = \@mod_user_accounts_string; store_value('sd_curr_domain_info', $curr_domain_info ); } } ######################################## USER ROLES AND PASSWORD INFO ####################################### sub add_user_roles_and_pass_info { my (%HTML, @html_users, $user_accounts); if ( not lookup_value('dflt_allow_passwd_assgnmt') and lookup_value('dflt_user_role') ) { if ( lookup_curr_domain_value('service_type') eq 'new_purchase' ) { do_add_user_roles_and_pass_info(); } else { collect_user_info(); confirm_add_manage_order(); } } else { my @html_users_old_added = (); my @html_users_new_added = (); my $user_accounts_remaining_string = (); my $itr = 0; my $curr_domain_info = lookup_value('sd_curr_domain_info'); my $user_accounts_new_added_string = $curr_domain_info->{probable_mod_user_accounts_string}; if ( $HTML{edit_path} = $in{edit_path} ) { my $user_accounts_old = $curr_domain_info->{mod_user_accounts}; # if after edit we have the same user accounts, we don't want to include them again. my $result = $antispam->get_edit_user_accounts($user_accounts_new_added_string, $user_accounts_old); # prune newly added accounts that are already in the session. $user_accounts_new_added_string = $result->{user_accounts_new_added_string}; $user_accounts_remaining_string = $result->{user_accounts_remaining_string}; @html_users_old_added = @{get_mod_html_users($user_accounts_remaining_string)}; $itr = scalar @{$user_accounts_remaining_string}; } @html_users_new_added = @{get_default_html_users($user_accounts_new_added_string, $itr)}; @html_users = ( @html_users_old_added, @html_users_new_added); $HTML{users} = \@html_users; $HTML{domain_name} = $curr_domain_info->{domain_name}; $HTML{allow_passwd_assgnmt} = lookup_value('dflt_allow_passwd_assgnmt'); $HTML{new_purchase} = ( lookup_curr_domain_value('service_type') eq 'new_purchase' ) ? 1 : 0; print_form(template => "$path_templates/add_user_roles_and_pass_info.html", data => \%HTML); } } sub get_default_html_users { my $user_accounts_string = shift; my $itr = shift; my @html_users; map { push @html_users, { user_account => $_, user_roles => build_select_menu(lookup_value('dflt_user_roles'),lookup_value('dflt_html_user_role') ), itr => $itr++, } } @{$user_accounts_string}; return \@html_users; } sub get_mod_html_users { my $user_accounts = shift; my @html_users; my $itr = 0; map { push @html_users, { user_account => $_->{user_account}, user_roles => build_select_menu(lookup_value('dflt_user_roles'), $_->{user_role}), now_enabled => ( $_->{passwd_assgnmt} eq 'now' ) ? "checked" : "", later_enabled => ( $_->{passwd_assgnmt} eq 'later' ) ? "checked" : "", itr => $itr++, } } @{$user_accounts}; return \@html_users; } sub do_add_user_roles_and_pass_info { confirm_new_purchase_order() if $in{cancel}; collect_user_info(); if ( $in{edit_path} ) { confirm_new_purchase_order(); } else { add_email_servers(); } } sub do_add_manage_user_roles_and_pass_info { if ( ($in{confirm_add_manage_order} and exists $in{list}) or not $in{confirm_add_manage_order} ) { collect_user_info(); } } sub collect_user_info { my (@data, @user_accounts_string, $user_account, $itr, $password, $confirm_password, $passwd_assgnmt, $user_role); my $curr_domain_info = lookup_value('sd_curr_domain_info'); my $dflt_user_role = lookup_value('dflt_user_role'); @user_accounts_string = @{$curr_domain_info->{probable_mod_user_accounts_string}}; $itr=0; foreach $user_account ( @user_accounts_string ) { $password = $in{'password_'.$itr}; $confirm_password = $in{'confirm_password_'.$itr}; $passwd_assgnmt = $dflt_user_role ? 'later' : $in{'passwd_assgnmt_'.$itr}; $user_role = $dflt_user_role || $in{'user_role_'.$itr}; if ( $passwd_assgnmt eq 'now' ) { my $result = $antispam->check_edef_user_password($passwd_assgnmt,$password,$confirm_password) ; error_out($result->{error}) if not $result->{is_success}; } push @data, { user_account => $user_account, user_role => $user_role, passwd_assgnmt => $passwd_assgnmt, password => $password, confirm_password => $confirm_password, }; $itr++; } $curr_domain_info->{probable_mod_user_accounts} = \@data; store_value('sd_curr_domain_info', $curr_domain_info ); } ################################ EMAIL SERVERS ######################### sub add_email_servers { my (%HTML, $server_info, $i); if ($server_info = lookup_value('dflt_server_1') ) { $i=1; while ($server_info = lookup_value('dflt_server_'.$i)){ # preference number is optional. $server_info =~ /^(.*),\s*(.*),\s*(.*)$/ or $server_info =~ /^(.*),\s*(.*)$/; process_email_servers($i,$1,$2,$3); $i++; } add_contact_info(); } else { $HTML{domain_name} = lookup_curr_domain_value('domain_name'); print_form(template => "$path_templates/add_email_servers.html", data => \%HTML ); } } sub do_add_email_servers { confirm_new_purchase_order() if $in{cancel}; error_out("No email servers specified.") if not $in{'host_1'}; for my $i (1 .. NUM_SERVERS) { if ( $in{'host_'.$i} ) { process_email_servers($i,$in{'host_'.$i},$in{'port_'.$i},$in{'preference_'.$i}); } } add_contact_info(); } sub process_email_servers { my ($num, $host, $port, $preference) = @_; error_out("Invalid host.") if not $antispam->check_hostname_syntax($host); error_out("Invalid port.") if not $antispam->check_port_syntax($port); error_out("Invalid preference.") if $preference and not $antispam->check_preference_syntax($preference); store_value('sd_host_'.$num, $host); store_value('sd_port_'.$num, $port); store_value('sd_preference_'.$num, $preference); } ############################### CONTACT INFO ################################### sub add_contact_info { my (%HTML, $contact_id, @html_contacts, $contacts, %contact_list ); # If contact id is hard coded in the config file, get it and go straight to confirmation. if ($contact_id = lookup_value('dflt_contact_id')) { store_value('sd_contact_id',lookup_value('dflt_contact_id')); confirm_new_purchase_order(); # Otherwise get all user contacts for drop down list and # also show form for contact input. } else { my $result = $antispam->get_contacts_by_user_id(lookup_value('sd_domain_user_id')); error_out($result->{response_text}) if not $result->{is_success}; map { $contact_list{$_->{contact_id}} = $_->{first_name}.", ".$_->{last_name}.", ".$_->{email}.", ".$_->{contact_id}; } @{$result->{attributes}{result}}; $contact_list{select} = "Please select Contact"; $HTML{domain_name} = lookup_curr_domain_value('domain_name'); $HTML{country_menu} = build_country_list(); $HTML{contact_list} = build_select_menu(\%contact_list,'select' ); print_form(template => "$path_templates/add_contact_info.html", data => \%HTML ); } } sub edit_contact_info { my (%HTML, @key, @value); $HTML{domain_name} = lookup_curr_domain_value('domain_name'); my $admin_contacts = lookup_value('sd_admin_contacts'); map { @key=keys %{$_}; @value=values %{$_}; $HTML{@key[0]} = @value[0]} @{$admin_contacts}; $HTML{country_menu} = build_country_list($HTML{country}); $HTML{edit_path} = 1; print_form(template => "$path_templates/add_contact_info.html", data => \%HTML ); } sub do_add_contact_info { confirm_new_purchase_order() if $in{cancel}; # If user selected one of the existing contacts, get its id. if ( $in{admin_contact} and $in{admin_contact} ne 'select' ) { store_value('sd_contact_id',$in{admin_contact}); # Otherwise get contact info from the form. } else { my (@admin_contacts, $error, $full_key); my $contact_data = {}; foreach ( qw(first_name last_name address1 city state country postal_code phone email) ) { next if not $in{$_}; $full_key = ( $_ =~ /^owner_/ ) ? $_ : 'owner_'.$_; $contact_data->{$full_key} = $in{$_}; push @admin_contacts, {$_ => $in{$_} }; } my $result = $antispam->validate_contacts( $contact_data ); error_out($result->{error}) if not $result->{is_success}; store_value('sd_admin_contacts', \@admin_contacts); } confirm_new_purchase_order(); } ############################ CANCEL ORDER ############################################# sub cancel_new_purchase_order { print_form(template => "$path_templates/cancel_new_purchase_order.html"); exit; } sub cancel_emaildefense_service { my %HTML; get_current_domain_info() if $in{init_curr_domain}; my $curr_domain_info = lookup_value('sd_curr_domain_info'); $HTML{domain_name} = $curr_domain_info->{domain_name}; print_form(template => "$path_templates/cancel_emaildefense_service.html", data => \%HTML ); } sub do_cancel_emaildefense_service { keep_emaildefense_service() if $in{keep_emaildefense_service}; my %HTML; my $curr_domain_info = lookup_value('sd_curr_domain_info'); # we need these values when returning to the manage domains page # to retrieve info for the user or domain. $HTML{domain_name} = $curr_domain_info->{domain_name}; $HTML{domain_user_id} = $curr_domain_info->{domain_user_id}; my $inventory_item_id = $curr_domain_info->{inventory_item_id}; my $result = $antispam->tpp_cancel_emaildefense_service($inventory_item_id); error_out($result->{response_text}) if not $result->{is_success}; print_form(template => "$path_templates/do_cancel_emaildefense_service.html", data => \%HTML ); } sub keep_emaildefense_service { print_form(template => "$path_templates/keep_emaildefense_service.html"); exit; } ########################## CONFIRM ORDER ############################################### sub confirm_new_purchase_order { my (%HTML, @key, @value); $HTML{allow_edit_contact} = lookup_value('sd_contact_id') ? 0 : 1; my $admin_contacts = lookup_value('sd_admin_contacts'); map { @key=keys %{$_}; @value=values %{$_}; $HTML{@key[0]} = @value[0]} @{$admin_contacts}; $HTML{cc_fields} = $antispam->cc_fields("$path_templates/cc_fields.html") if $ANTISPAM{F_SHOW_CC_FIELDS}; confirm_order("confirm_new_purchase_order.html", \%HTML); exit; } sub confirm_add_manage_order { my %HTML; $HTML{cc_fields} = $antispam->cc_fields("$path_templates/cc_fields.html") if $ANTISPAM{F_SHOW_CC_FIELDS}; confirm_order("confirm_add_manage_order.html", \%HTML); } sub confirm_remove_manage_order { confirm_order("confirm_remove_manage_order.html"); } sub confirm_order { my %HTML; my $template = shift; my $HTML = shift; my $curr_domain_info = lookup_value('sd_curr_domain_info'); if (not $in{cancel}) { $curr_domain_info->{mod_user_accounts_string} = $curr_domain_info->{probable_mod_user_accounts_string}; $curr_domain_info->{mod_user_accounts} = $curr_domain_info->{probable_mod_user_accounts}; } $HTML->{mod_user_accounts} = join ("
", @{$curr_domain_info->{mod_user_accounts_string}}); $HTML->{mod_user_accounts_num} = scalar @{$curr_domain_info->{mod_user_accounts_string}}; $HTML->{domain_name} = $curr_domain_info->{domain_name}; $HTML->{new_purchase} = ( lookup_curr_domain_value('service_type') eq 'new_purchase' ) ? 1 : 0; if (scalar @{$curr_domain_info->{mod_user_accounts_string}}) { $HTML->{allow_process} = 1; } print_form(template => "$path_templates/$template", data => $HTML ); } ###################################### PROCESS ORDER ###################################### sub process_new_purchase_order { cancel_new_purchase_order() if $in{cancel_new_purchase_order}; process_cc_fields() if $ANTISPAM{F_VERIFY_CC}; my $order_info = get_new_purchase_order_info(); my $result = $antispam->process_new_purchase_order($ANTISPAM{process_immediate}, $order_info); if ($result->{is_success}) { $result->{html_action} = "new_purchase"; show_order_results($result); } else { error_out("$result->{attributes}{create_items}[0]{major_text}: $result->{response_text} "); } } sub process_add_manage_order { process_cc_fields() if $ANTISPAM{F_VERIFY_CC}; my $order_info = get_add_manage_order_info(); my $result = $antispam->process_upgrade_order($ANTISPAM{process_immediate}, $order_info); if ($result->{is_success}) { $result->{html_action} = "upgrade"; show_order_results($result); } else { error_out("$result->{attributes}{create_items}[0]{major_text}: $result->{response_text} "); } } sub process_remove_manage_order { my $order_info = get_remove_manage_order_info(); my $result = $antispam->process_downgrade_order($ANTISPAM{process_immediate}, $order_info); if ($result->{is_success}) { $result->{html_action} = "downgrade"; show_order_results($result); } else { error_out("$result->{attributes}{create_items}[0]{major_text}: $result->{response_text} "); } } sub process_cc_fields { my %data = ( p_cc_num => $in{p_cc_num}, p_cc_type => $in{p_cc_type}, p_cc_exp_mon => $in{p_cc_exp_mon}, p_cc_exp_yr => $in{p_cc_exp_yr} ); my $result = $antispam->verify_cc_fields(\%data); error_out($result->{error}) if not $result->{is_success}; my $response = call_payment_gateway(\%data); if ( not call_payment_gateway(\%data) ) { error_out ("Credit Card information is not valid."); } } # For a reseller to enter payment gateway (credit card clearing) code. sub call_payment_gateway { my $data = shift; # INSERT PAYMENT GATEWAY CODE HERE return 1; } ##################################### GET ORDER INFO ################################# sub get_new_purchase_order_info { my (%order_info, $i, $server_info, @mtas, $entry); $order_info{user_id} = lookup_value('sd_domain_user_id'); $order_info{domain_name} = lookup_curr_domain_value('domain_name'); my $curr_domain_info = lookup_value('sd_curr_domain_info'); if ( lookup_value('sd_contact_id') ) { @{$order_info{admin_contacts}} = ( {id => lookup_value('sd_contact_id')} ); } else { $order_info{admin_contacts} = lookup_value('sd_admin_contacts'); } $i=1; while( lookup_value('sd_host_'.$i) ) { push @mtas, { host => lookup_value('sd_host_'.$i), port => lookup_value('sd_port_'.$i), preference => lookup_value('sd_preference_'.$i), }; $i++; } $order_info{mtas} = \@mtas; my $mod_user_accounts = $curr_domain_info->{mod_user_accounts}; $i=0; foreach $entry (@{$mod_user_accounts}) { $order_info{create_items}[$i]{role} = $entry->{user_role}; $order_info{create_items}[$i]{name} = $entry->{user_account}; $order_info{create_items}[$i]{password} = $entry->{password}; $i++; } return \%order_info; } sub get_add_manage_order_info { my (%order_info, $i, $entry); @{$order_info{mod_user_accounts}} = (); $order_info{user_id} = lookup_value('sd_domain_user_id'); my $curr_domain_info = lookup_value('sd_curr_domain_info'); $order_info{inventory_item_id} = $curr_domain_info->{inventory_item_id}; my $old_user_accounts = $curr_domain_info->{old_user_accounts}; my $mod_user_accounts = $curr_domain_info->{mod_user_accounts}; $i=0; foreach $entry (@{$old_user_accounts}) { $order_info{old_user_accounts}[$i]{role} = $entry->{role}; $order_info{old_user_accounts}[$i]{name} = $entry->{name}; $i++; } $i=0; foreach $entry (@{$mod_user_accounts}) { $order_info{mod_user_accounts}[$i]{role} = $entry->{user_role}; $order_info{mod_user_accounts}[$i]{name} = $entry->{user_account}; $order_info{mod_user_accounts}[$i]{password} = $entry->{password}; $i++; } return \%order_info; } sub get_remove_manage_order_info { my (%order_info, $i, $entry); $order_info{user_id} = lookup_value('sd_domain_user_id'); my $curr_domain_info = lookup_value('sd_curr_domain_info'); $order_info{inventory_item_id} = $curr_domain_info->{inventory_item_id}; my $old_user_accounts_string = $curr_domain_info->{old_user_accounts_string}; my $mod_user_accounts_string = $curr_domain_info->{mod_user_accounts_string}; @{$order_info{remained_user_accounts}} = (); foreach $entry (@{$old_user_accounts_string}) { ( push @{$order_info{remained_user_accounts}}, { name => $entry } ) if not grep /^$entry$/, @{$mod_user_accounts_string}; } @{$order_info{mod_user_accounts_string}} = (); foreach $entry (@{$mod_user_accounts_string}) { push @{$order_info{mod_user_accounts_string}}, { name => $entry }; } return \%order_info; } ########################### SHOW RESULTS ###################################### sub show_order_results { my (%HTML); my $data = shift; my $curr_domain_info = lookup_value('sd_curr_domain_info'); $HTML{reseller_email} = $ANTISPAM{reseller_email}; $HTML{order_id} = $data->{attributes}{order_id}; $HTML{domain_name} = $curr_domain_info->{domain_name}; $HTML{action} = $data->{html_action}; $HTML{new_purchase} = ( lookup_curr_domain_value('service_type') eq 'new_purchase' ) ? 1 : 0; $HTML{users} = scalar @{$curr_domain_info->{mod_user_accounts_string}}; $HTML{ed_portal_url} = $ANTISPAM{ed_portal_url}; print_form(template => "$path_templates/order_results.html", data => \%HTML ); } ################################ LIST FEATURES AND USERS ################################## sub list_features_and_users { my (%HTML, @user_accounts); get_current_domain_info() if $in{init_curr_domain}; my $curr_domain_info = lookup_value('sd_curr_domain_info'); $HTML{domain_name} = $curr_domain_info->{domain_name}; $HTML{user_accounts} = join "
", @{$curr_domain_info->{old_user_accounts_string}}; $HTML{num_user_accounts} = scalar @{$curr_domain_info->{old_user_accounts_string}}; print_form(template => "$path_templates/list_features_and_users.html", data => \%HTML ); } ########################################################################## # substitute values on the specified template and print it to the client # an optional 'type' arg can be passed: 'framed' specifies to pull in base.html # as the outer frame and the given template as the inner frame # 'single' specifies to use the given template alone # the default behavior is 'framed' sub print_form { my %args = @_; $args{title} = "EmailDefense Registration/Management" if not $args{title}; $args{username} = lookup_value('sd_username'); if (0) { #for easy debug test local $Data::Dumper::Indent=1; local $Data::Dumper::Useqq=0; print "
",Dumper(\%args),"
"; } my $template = HTML::Template->new(cache => 1, filename => $args{template}, die_on_bad_params => 0); $template->param(CGI=>$cgi,%{$args{data}},$session->dump($OPENSRS{private_key})); unless ($args{not_framed}) { my $content = $template->output; $template = HTML::Template->new(cache => 1, filename => "$path_templates/base.html", die_on_bad_params => 0); $template->param(CONTENT=>$content); } $template->param(CGI=>$cgi,%{$args{data}}); print $template->output; } sub set_debugging_level { if ($ANTISPAM{debug}) { # print error to the page select (STDOUT); $| = 1; open (STDERR, ">&STDOUT") or die "Can't dump stdout: $!\n"; select (STDERR); $| = 1; select (STDOUT); } OpenSRS::Util::Common::initialize( path_templates => $PATH_TEMPLATES ); } sub error_out { my %HTML = ( ERROR => shift ); print_form(template => "$path_templates/error.html", data => \%HTML); exit; } opensrs-client-3.0.0/cgi/emaildefense.css0000644017777601777760000001210410770014202021424 0ustar nobodynogroup00000000000000BODY { font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; font-size: 15px; background-color: #FFF6DE; } TD { font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; font-size: 15px; } A.link:link { font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; font-size: 12px; color: #660000; text-decoration: none; background: transparent; } A.link:visited { font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; font-size: 12px; color: #996633; text-decoration: none; background: transparent; } A.link:active { font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; font-size: 12px; color: #709BD9; text-decoration: none; background: transparent; } A.link:hover { font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; font-size: 12px; color: #709BD9; text-decoration: none; background: transparent; } HR { COLOR: #A6C1E9; BACKGROUND-COLOR: #A6C1E9; border: 0px; } td.accent { font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; font-size: 12px; color: black; background-color: #DDAA77; padding-left: 2pt; } td.soft { font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; font-size: 12px; color: black; background-color: #FFDDAA; padding-left: 2pt; } td.help { font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; font-size: 12px; color: black; background-color: #FFF2D1; padding-left: 2pt; } td.wh { font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; font-size: 12px; color: black; background-color: #FFFFFF; padding-left: 15pt; padding-top: 0pt; } td.bl { font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; font-size: 12px; color: black; background-color: #000000; } tr.accent { font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; font-size: 12px; color: black; background-color: #DDAA77; padding-left: 2pt; } tr.soft { font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; font-size: 12px; color: black; background-color: #FFDDAA; padding-left: 2pt; } tr.help { font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; font-size: 12px; color: black; background-color: #FFF2D1; padding-left: 2pt; } tr.wh { font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; font-size: 12px; color: black; background-color: #FFFFFF; padding-left: 15pt; padding-top: 0pt; } tr.bl { font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; font-size: 12px; color: black; background-color: #000000; } table.accent { font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; font-size: 12px; color: black; background-color: #DDAA77; padding-left: 2pt; } table.soft { font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; font-size: 12px; color: black; background-color: #FFDDAA; padding-left: 2pt; } table.help { font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; font-size: 12px; color: black; background-color: #FFF2D1; padding-left: 2pt; } table.wh { font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; font-size: 12px; color: black; background-color: #FFFFFF; padding-left: 15pt; padding-top: 0pt; } table.bl { font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; font-size: 12px; color: black; background-color: #000000; } .header1 { font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; font-size: 24px; color: #000000; font-weight: bold; } .header2 { font-family: Georgia, Times New Roman, Times, serif; font-size: 14px; color: #6D6D6D; font-variant:small-caps;} .header3 { font-family: Georgia, Times New Roman, Times, serif; font-size: 14px; color: #000000; font-variant:small-caps; } .help { font-family: Georgia, Times New Roman, Times, serif; font-size: 14px; color: #000000; font-weight: bold; } .name { font-family: Georgia, Times New Roman, Times, serif; font-size: 14px; color: #6D6D6D; } .nav { font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; font-size: 12px; color: #2E3A4C; font-weight: bold; text-decoration: none; } input,form { padding: 0; margin: 0; } input.soft { background-color: #D8D8D8; font-size: 10px; color: #000000; } input.accent { background-color: #C4CBD7; font-size: 10px; color: #000000; } input.zms { background-color: #D8D8D8; font-size: 10px; color: #000000; } input.zma { background-color: #C4CBD7; font-size: 10px; color: #000000; } input.dfs { background-color: #D8D8D8; font-size: 10px; color: #000000; } input.dfa { background-color: #C4CBD7; font-size: 10px; color: #000000; } input.prs { background-color: #D8D8D8; font-size: 10px; color: #000000; } input.pra { background-color: #C4CBD7; font-size: 10px; color: #000000; } input.ed { background-color: #C4CBD7; font-size: 10px; color: #000000; } input.ca { background-color: #C4CBD7; font-size: 10px; color: #000000; } input.sa { background-color: #C4CBD7; font-size: 10px; color: #000000; } input.up { background-color: #D8D8D8; font-size: 10px; color: #000000; } input.rs { background-color: #C4CBD7; font-size: 10px; color: #000000; } input.radio.accent { background : #E4ECF8; } input.radio.soft { background : #EDEDED; } .error {font-size: 14px; color: #FF0000; font-weight: bold; font-variant:small-caps;} opensrs-client-3.0.0/cgi/help.cgi0000755017777601777760000000432710770014202017720 0ustar nobodynogroup00000000000000#!/usr/bin/perl # .Copyright (C) 1999-2002 TUCOWS.com Inc. # .Created: 11/19/1999 # .Contactid: # .Url: http://www.opensrs.org # .Originally Developed by: # Tucows/OpenSRS # .Authors: Evgeniy Pirogov # # # This program is free software; you can redistribute it and/or # modify it under the terms of the GNU Lesser General Public # License as published by the Free Software Foundation; either # version 2.1 of the License, 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 # Lesser General Public License for more details. # # You should have received a copy of the GNU Lesser General Public # License along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA # pull in conf file with defined values # XXX NOTE XXX Update this configuration file BEGIN { $path_to_config = ''; do "$path_to_config/OpenSRS.conf"; } use lib $PATH_LIB; use strict; use CGI qw(); use IO::File; use Core::Exception; use OpenSRS::Help qw/HelpPages/; use OpenSRS::Util::Error; use OpenSRS::Util::Logger '$Log';# =>"$PATH_LOG/help.log"; my $path_templates = "$PATH_TEMPLATES/help"; my $q = new CGI; try { if ($q->param('tld')){ $path_templates .= '/' .$q->param('tld'); } my $topic = $q->param('topic'); unless (HelpPages->{$topic}){ throw 'dev','Invalid topic \'%s\'',$topic; } my $fh = IO::File->new($path_templates."/".HelpPages->{$topic},O_RDONLY); unless ($fh){ throw 'dev','Can\'t find help file for topic \'%s\'',$topic; } print $q->header; my @content = <$fh>; undef $fh; print @content; } catch { dev => sub { my $E = shift; $Log->error("dev %s",$E->dump); print $q->header; error_output($E->info); }, _other => sub { my $E = shift; $Log->error("other %s",$E->dump); print $q->header; error_output($E->info); }, }; exit; 1; opensrs-client-3.0.0/cgi/manage.cgi0000755017777601777760000040156410770014202020224 0ustar nobodynogroup00000000000000#!/usr/bin/perl # .Copyright (C) 1999-2000 TUCOWS.com Inc. # .Created: 11/19/1999 # .Contactid: # .Url: http://www.opensrs.org # .Originally Developed by: # VPOP Technologies, Inc. for Tucows/OpenSRS # .Authors: Joe McDonald, Tom McDonald, Matt Reimer, Brad Hilton, # Daniel Manley, Gennady Krizhevsky, John Jerkovic, # # This program is free software; you can redistribute it and/or # modify it under the terms of the GNU Lesser General Public # License as published by the Free Software Foundation; either # version 2.1 of the License, 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 # Lesser General Public License for more details. # # You should have received a copy of the GNU Lesser General Public # License along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA # global defines use vars qw( %in %contact_types %actions $XML_Client %cookies $action $authentication $cgi $path_templates $flag_header_sent $reg_username $reg_password $reg_domain $cookie $domain_count $reg_permission $reg_f_owner $expiredate $last_access_time $last_ip %contact_keys $waiting_request $waiting_requests_no $dns_errors $COOKIE_KEY %enctypes $T_EXPIRED $T_EXPIRING $t_mode $notice_days %whois_rsp_info $capabilities %unauthenticated_actions $inaccuratewhois $auction_escrow $dom_locked ); ( %in, %contact_types, %actions, $XML_Client, %cookies, $action, $authentication, $cgi, $path_templates, $flag_header_sent, $reg_username, $reg_password, $reg_domain, $cookie, $domain_count, $reg_permission, $reg_f_owner, $expiredate, $last_access_time, $last_ip, %contact_keys, $waiting_request, $waiting_requests_no, %whois_rsp_info, $capabilities, $dns_errors, $inaccuratewhois, $auction_escrow, $dom_locked ) = (); # pull in conf file with defined values # XXX NOTE XXX Update this configuration file BEGIN { $path_to_config = ""; if ($ENV{OSRS_CLIENT_ETC}){ $path_to_config = "$ENV{OSRS_CLIENT_ETC}"; } do "$path_to_config/OpenSRS.conf"; } use lib $PATH_LIB; use CGI ':cgi-lib'; use strict; use Time::Local; use OpenSRS::XML_Client qw(:default); use OpenSRS::Util::America qw(build_app_purpose_list); use OpenSRS::Util::Common qw(make_navbar locale_build_country_list build_select_menu); use OpenSRS::Util::Europe qw(build_eu_countries_list build_eu_languages_list build_be_languages_list); use OpenSRS::Util::Asia qw(build_ced_locality_select_list build_ced_entity_type_select_list build_ced_contact_type_select_list build_ced_identification_type_select_list); # initialize global defines $cgi = $ENV{SCRIPT_NAME}; $path_templates = "$PATH_TEMPLATES/manage"; $COOKIE_KEY = $TEST_SERVER?"REGISTRANT_KEY":"REGISTRANT_LIVE_KEY"; $flag_header_sent = 0; # whether html header has been sent %in = (); $reg_username = ""; $reg_password = ""; $reg_domain = ""; $cookie = ""; $domain_count = undef; $reg_permission = undef; $reg_f_owner = undef; $expiredate = undef; $last_access_time = undef; $last_ip = undef; $waiting_request = ""; $waiting_requests_no = undef; $capabilities = undef; $dns_errors = undef; $T_EXPIRING = 1; # there are domains to expire in $notice_days days $T_EXPIRED = 2; # there are expired domains $t_mode = undef; # can be 0, $T_EXPIRING, $T_EXPIRED or ($T_EXPIRING | $T_EXPIRED) $notice_days = $MANAGE{ notice_days } ? $MANAGE{ notice_days } : 60; # list of contact types %contact_types = ( owner => 'Organization', admin => 'Admin', billing => 'Billing', tech => 'Technical', ); %contact_keys = ( first_name => undef, last_name => undef, address1 => undef, address2 => undef, address3 => undef, city => undef, state => undef, postal_code => undef, country => undef, email => undef, url => undef, fax => undef, phone => undef, org_name => undef, lang => undef, vat => undef, ); # secure actions; require valid cookie %actions = ( modify_contact => undef, do_modify_contact => undef, do_modify_org_contact_de => undef, revoke_registrant_changes => undef, modify_nameservers => undef, do_modify_nameservers => undef, add_nameserver => undef, manage_nameservers => undef, do_manage_nameserver => undef, do_create_nameserver => undef, manage_subuser => undef, do_manage_subuser => undef, delete_subuser => undef, view_domains => undef, manage_domain => undef, manage_profile => undef, change_password => undef, do_change_password => undef, change_ownership => undef, do_change_ownership => undef, view_waiting_history => undef, get_expire_domains => undef, whois_rsp_info => undef, set_whois_rsp_info => undef, send_password => undef, domain_locking => undef, modify_domain_extras => undef, do_modify_domain_extras => undef, do_change_ips_tag => undef, ); %unauthenticated_actions = ( login => undef, logout => undef, send_password => undef, ); start_up(); $XML_Client = new OpenSRS::XML_Client(%OPENSRS); $XML_Client->login; # read in the form data ReadParse(\%in); %cookies = GetCookies(); $action = $in{action}; #----------------------------------------------------- # perform necessary actions # a few actions are allowed without authentication. if ( $action and exists $unauthenticated_actions{$action} ) { no strict 'refs'; &$action(); exit; } # for all other actions, do validate() (grab cookie if it exists) # if validate() fails, send them to the low-access menu $authentication = validate(); ################################################ ### At this point, the following variables will be set if they logged in: ### $user_object,$user_id,$profile,$post_permission # show them the login page if they don't have a valid cookie if (not $authentication) { show_login(); # no action was passed but they have a valid cookie } elsif (not $action) { main_menu(); # they asked for a valid action } elsif (exists $actions{$action}) { if(($action eq "get_expire_domains") && ($MANAGE{allow_renewals} == 0)) { main_menu("Invalid action: $action"); exit; } no strict "refs"; &$action(); use strict; # they gave us an invalid command } else { main_menu("Invalid action: $action"); } $XML_Client->logout; exit; sub start_up { if ($MANAGE{debug}) { # print error to the page select (STDOUT); $| = 1; open (STDERR, ">&STDOUT") or die "Can't dump stdout: $!\n"; select (STDERR); $| = 1; select (STDOUT); } } # show login page for non-secure users sub show_login { my $message = shift; my (%HTML); $HTML{CGI} = $cgi; $HTML{XPACK_MANAGE_WEBDIR} = $XPACK_MANAGE_WEBDIR; if ( defined $message and $message ) { $HTML{MESSAGE} = qq($message

); } else { $HTML{MESSAGE} = ""; } print_form("$path_templates/login.html",\%HTML,'single'); } # show main page for secure users sub main_menu { my (%HTML, $key); my $message = shift; my $billing_con_name = "Billing"; if($reg_domain =~ /de$/) { $billing_con_name = "Zone"; } my ($tld) = $reg_domain =~ /$OPENSRS{OPENSRS_TLDS_REGEX}$/; # build front page per user's permissions my %GRANT = ( f_modify_nameservers => "Manage Name Servers", f_modify_owner => "Organization Contact", f_modify_admin => "Admin Contact", f_modify_billing => "$billing_con_name Contact", f_modify_tech => "Technical Contact", sub_user => "Manage Profile", f_modify_whois_rsp_info => "Reseller Contact", domain_locking => "Domain Locking", f_modify_domain_extras => "Domain Extras", ); my %DENY = ( f_modify_nameservers => "Manage Name Servers", f_modify_owner => "Organization Contact", f_modify_admin => "Admin Contact", f_modify_billing => "$billing_con_name Contact", f_modify_tech => "Technical Contact", sub_user => "Manage Profile", f_modify_whois_rsp_info => "Reseller Contact", domain_locking => "Domain Locking", f_modify_domain_extras => "Domain Extras", ); # if user is the owner of the domain, give them full permissions if ($reg_f_owner) { foreach $key (keys %GRANT) { $HTML{$key} = $GRANT{$key}; } # otherwise, check their permission level against %PERMISSIONS } else { foreach $key (keys %GRANT) { if ($reg_f_owner or ($reg_permission & $PERMISSIONS{$key})) { $HTML{$key} = $GRANT{$key}; } else { $HTML{$key} = $DENY{$key}; } } } $HTML{whois_rsp_info} = $GRANT{whois_rsp_info}; $HTML{domain_locking} = $GRANT{domain_locking}; # # .ca domains don't have a billing contact. # if ($reg_domain =~ /ca$/) { $HTML{f_modify_billing} = "$DENY{f_modify_billing} (CIRA uses the Administrative Contact for Billing)"; } elsif ($reg_domain =~ /uk$/){ $HTML{f_modify_tech} = "$DENY{f_modify_tech} (Technical contact information is no longer required for .UK)"; } elsif ($reg_domain =~ /(eu|be)$/) { $HTML{f_modify_billing} = "$DENY{f_modify_billing} (Billling contact information is not required for " . uc $tld .")"; $HTML{f_modify_admin} = "$DENY{f_modify_admin} (Admin contact information is not required for " . uc $tld .")"; } # if no extra domain info. to be displayed, do not show the link #for .de there are dns errors also if ( ! $capabilities->{domain_extras} and ! $dns_errors) { $HTML{ f_modify_domain_extras } = "$DENY{ f_modify_domain_extras }"; } # not all TLDs support locking if ( not $reg_domain =~ /$OPENSRS{ TLDS_SUPPORTING_LOCKING }/i) { $HTML{ domain_locking } = "$DENY{ domain_locking } (TLD does not support locking)"; } elsif ( not $reg_f_owner ) { $HTML{ domain_locking } = "$DENY{ domain_locking } (Can only be modified by the owner of the domain)"; } # .uk domains can't have their owner information changed, # so only show the organization paragraph if the domain #if be/eu if ( $reg_domain =~ /(eu|be)$/ ) { $HTML{ f_modify_owner } = <$HTML{ f_modify_owner }
This is information about the company or entity, which owns the domain name you are managing (referred to as the "Licensee" by the registry). For .EU and .BE names changes to the First Name, Last Name or Organization field may result in a charge for the transaction.

EOF } # is not .uk elsif ( $reg_domain !~ /uk$/ ) { $HTML{ f_modify_owner } = <$HTML{ f_modify_owner }
This is information about the company or entity which owns the domain name you are managing. Change company information here.

EOF } else { $HTML{f_modify_owner} = <$DENY{f_modify_owner}
This is information about the company or entity which owns the domain name you are managing. Change company information here. NOTE (for .uk domains): An Organization name change is effectively a Registrant Name Change; to do this, please refer to your Nominet Domain Certificate.

EOF } if ($last_access_time) { my $human_time = scalar localtime($last_access_time); $HTML{LAST_ACCESS} = "
Last login: $human_time"; if ($last_ip) { $HTML{LAST_ACCESS} .= " from $last_ip"; } } if ( not $reg_f_owner ) { $HTML{SUB_USER} = '
Logged in as Sub User.'; } $HTML{MESSAGE} = $message ? "
$message
\n" : ""; $HTML{DNS_ERRORS} = $dns_errors ? "
This domain is under a 30 day restriction and needs to be validated.
\n" : ""; $HTML{CGI} = $cgi; $HTML{reg_username} = $reg_username; print_form("$path_templates/main_menu.html",\%HTML); } # show subuser info sub manage_subuser { my (%HTML,$perm); my ($sub_id,$sub_username,$sub_permission) = get_subuser(); $HTML{CGI} = $cgi; $HTML{sub_id} = $sub_id; $HTML{sub_username} = $sub_username; foreach $perm (keys %PERMISSIONS) { if ($sub_permission & $PERMISSIONS{$perm}) { $HTML{"${perm}_1"} = "CHECKED"; } else { $HTML{"${perm}_0"} = "CHECKED"; } } print_form("$path_templates/manage_subuser.html",\%HTML); } # process data for subuser modifications sub do_manage_subuser { my ($response,$perm); my $sub_username = $in{sub_username}; my $sub_password = $in{sub_password}; my $sub_password2 = $in{sub_password2}; my $sub_id = $in{sub_id}; if (not $sub_username) { error_out("No username supplied.
\n"); exit; } elsif ($sub_password ne $sub_password2) { error_out("Password mismatch.
\n"); exit; } elsif (not $sub_password and not $sub_id) { error_out("No password supplied.
\n"); exit; } my $sub_permission = 0; foreach $perm (keys %PERMISSIONS) { if ($in{$perm}) { $sub_permission |= $PERMISSIONS{$perm}; } } my $xcp_request = { action => ( $sub_id ? "modify" : "add" ), object => "subuser", cookie => $cookie, attributes => { sub_id => $sub_id, sub_username => $sub_username, sub_password => $sub_password, sub_permission => $sub_permission, } }; $response = $XML_Client->send_cmd( $xcp_request ); if (not $response->{is_success}) { error_out("Command failed: $response->{response_text}\n"); exit; } main_menu("Subuser Changes Successful"); } sub delete_subuser { my $sub_id = $in{sub_id}; if (not $reg_f_owner) { error_out("Only domain owner can delete subuser.
\n"); exit; } elsif (not $sub_id) { error_out("Subuser's id not supplied.
\n"); exit; } my $xcp_request = { action => "delete", object => "subuser", cookie => $cookie, attributes => { sub_id => $sub_id, } }; my $response = $XML_Client->send_cmd( $xcp_request ); if (not $response->{is_success}) { error_out("Command failed: $response->{response_text}\n"); exit; } main_menu("Subuser deleted"); } sub change_password { my (%HTML); if (not $reg_f_owner) { error_out("Permission denied: not owner.\n"); exit; } $HTML{CGI} = $cgi; print_form("$path_templates/change_password.html",\%HTML); } sub do_change_password { my $new_password = $in{password}; my $confirm_password = $in{confirm_password}; # validate password if ($new_password =~ /^\s*$/) { error_out("No password was given.
\n"); exit; } elsif ($new_password ne $confirm_password) { error_out("Password mismatch.
\n"); exit; } elsif (length $new_password < 3 || length $new_password > 20) { error_out("Password should have at least 3 and at most 20 characters.
\n"); exit; } elsif ($new_password !~ /^[A-Za-z0-9\[\]\(\)!@\$\^,\.~\|=\-\+_\{\}\#]+$/) { error_out("Invalid syntax for password '$new_password'.\n\n Allowed characters are all alphanumerics (A-Z, a-z, 0-9) and symbols []()!@\$^,.~|=-+_{}#\n"); exit; } my $xcp_request = { action => "change", object => "password", cookie => $cookie, attributes => { reg_password => $new_password, } }; my $response = $XML_Client->send_cmd( $xcp_request ); if (not $response->{is_success}) { error_out("Failed attempt: $response->{response_text}\n"); exit; } main_menu("Password successfully changed."); } sub revoke_registrant_changes{ my ($error); my $xcp_request = { action => "modify", object => "domain", cookie => $cookie, attributes => { data => "contact_info", contact_set => { 'owner' => {"revoke_registrant_changes"=>1}, }, }, }; my $response = $XML_Client->send_cmd( $xcp_request ); if (not $response->{is_success}) { $error = "Failed attempt: $response->{response_text}
\n"; error_out($error); exit; } main_menu($response->{response_text}); } # show contact info for specified domain and contact type sub modify_contact { my ($error); my $type = $in{type}; my $xcp_request = { action => "get", object => "domain", cookie => $cookie, attributes => { type => $type, } }; my $response = $XML_Client->send_cmd( $xcp_request ); if (not $response->{is_success}) { $error = "Failed attempt: $response->{response_text}
\n"; error_out($error); exit; } # process this through escape() to account for " and ' in the data escape_hash_values( $response ); my %HTML = (); # put the contact keys/values into %HTML foreach my $aKey ( keys %{$response->{attributes}->{contact_set}->{$type}} ) { next unless exists $contact_keys{$aKey}; $HTML{$aKey} = $response->{attributes}->{contact_set}->{$type}->{$aKey}; } # # If the change is for the Org and the ccTLD is .ca # then we need only display a wee little bit of info. # if (($type =~ /owner/i) && ($reg_domain =~ /ca$/)) { my %short_way = %{$response->{attributes}->{contact_set}->{$type}}; if ((defined $short_way{member}) && ($short_way{member} eq "Y")) { $HTML{member_field} = "Yes\n No\n"; } else { $HTML{member_field} = "Yes\n No\n"; } if (defined $short_way{cwa} && $short_way{cwa} eq 'Y' ) { $HTML{cwa_field} = "Yes\n No\n"; } else { $HTML{cwa_field} = "Yes\n No\n"; } $HTML{legal_type_field} = build_ca_domain_legal_types ($short_way{legal_type}); $HTML{reg_domain} = $reg_domain; $HTML{contact_type} = $contact_types{$type}; $HTML{type} = $type; $HTML{description} = $short_way{description}; $HTML{CGI} = $cgi; print_form("$path_templates/modify_ca_org_contact.html",\%HTML); return; } # # .ca is, as always, different.... # if ($reg_domain =~ /ca$/) { foreach my $item (@CA_EXTRA_FIELDS) { $HTML{$item} = $response->{attributes}->{contact_set}->{$type}->{$item}; } $HTML{language_type_field} = build_ca_language_preferences ($HTML{language}); $HTML{nationality_field} = build_ca_nationality_pulldown ($HTML{nationality}); if ( $in{ type } eq 'admin' ) { $HTML{ cc_warning } = < Note: Modifications to the admin contact info has been deemed a 'critical change' by CIRA, and any changes to the contact information will not take affect unless also confirmed at the CIRA site.

EOF } elsif ( $in{ type } eq 'tech' ) { $HTML{ cc_warning } = < Note: If the technical contact info is the same as that for the admin contact, changes to the information below will be deemed a 'critical change' by CIRA, and will not take affect unless the changes are also confirmed at the CIRA site.

EOF } } else { $HTML{language_type} = ""; $HTML{middle_name} = ""; $HTML{job_title} = ""; $HTML{nationality} = ""; } $HTML{org_comment} = ''; $HTML{org_comment_close} = ''; $HTML{uk_org_comment} = '!-- '; $HTML{uk_org_comment_close} = ' --'; # for uk domains OpensRS do not send org_name to the Nominet # and Owner org_name can be changed only at Nominet. # http://www.nominet.org.uk/MakingChangesToYourDomainName/ChangingCompanyName/ # Not a very nice way of hiding # the org name, but better to keep the template whole. Turn the # organization line into an HTML comment. # the exception is uk domain owner contact, we use the Organization as registrant if ( $reg_domain =~ /\.uk$/ && $type =~ /owner/i ) { $HTML{uk_org_comment} = ''; $HTML{uk_org_comment_close} = ''; $HTML{org_comment} = '!-- '; $HTML{org_comment_close} = ' --'; } if ( $reg_domain =~ /\.de$/ && (($type eq "billing" ) or ($type eq "tech"))) { $HTML{fax_opt_comment} = '!-- '; $HTML{fax_opt_comment_close} = ' --'; } $HTML{reg_domain} = $reg_domain; if($reg_domain =~ /de$/ and $type eq 'billing') { $HTML{contact_type} = 'Zone'; } else { $HTML{contact_type} = $contact_types{$type}; } $HTML{type} = $type; $HTML{CGI} = $cgi; #XXX if ($reg_domain =~ /eu$/){ if ($type eq 'owner') { $HTML{COUNTRY_LIST} = build_eu_countries_list($HTML{country}); } elsif($type eq 'tech'){ $HTML{COUNTRY_LIST} = locale_build_country_list($HTML{country}); } $HTML{LANGUAGE_LIST} = build_eu_languages_list($HTML{lang}); } else { $HTML{COUNTRY_LIST} = locale_build_country_list($HTML{country}); } if ($reg_domain =~ /be$/){ $HTML{LANGUAGE_LIST} = build_be_languages_list($HTML{lang}); } my $template="modify_contact.html"; if ($reg_domain =~ /ca$/) { $template="modify_contact_ca.html"; $HTML{GLOBAL_CHANGE_MENU} = make_global_menu($reg_f_owner,$reg_permission,$type)."
Only .ca will be affected
\n"; } elsif ($reg_domain =~ /(be|eu)$/i){ $template="modify_contact_beu.html"; $HTML{GLOBAL_CHANGE_MENU} = make_beu_global_menu($reg_domain,$reg_f_owner,$reg_permission,$type); } else { $HTML{GLOBAL_CHANGE_MENU} = make_global_menu($reg_f_owner,$reg_permission,$type); } if ($type eq 'owner' and $response->{attributes}->{contact_set}->{'owner'}->{ownership_changes_request}){ my $shortcut=$response->{attributes}->{contact_set}->{'owner'}->{ownership_changes_request}; $HTML{revoke_registrant_changes}=< The new registrant name will be '$shortcut'
Click Here if you want to revoke this request.
EOF } print_form("$path_templates/$template",\%HTML); } sub do_modify_org_contact_de { my $descr = $in{descr}; my $orig_descr = $in{orig_descr}; my $affect_domains = $in{affect_domains}; if(($descr eq $orig_descr) and !$affect_domains ) { return undef; } my $xcp_request = { action => "modify", object => "domain", cookie => $cookie, attributes => { data => "descr", affect_domains => $affect_domains, domainname => $reg_domain, contact_set => { owner => {descr => $descr }, }, } }; return $xcp_request; } # process data to modify contact info sub do_modify_contact { my ($key, $error, $type); my $resultString; if ($in{submit} =~ /cancel/i) { main_menu("Changes cancelled"); exit; } $type = $in{type}; delete $in{type}; my $xcp_request; $xcp_request = { action => "modify", object => "domain", cookie => $cookie, attributes => { data => "contact_info", affect_domains => $in{affect_domains}, report_email => $in{report_email}, contact_set => { $type => {}, also_apply_to => [], }, } }; foreach $key ( keys %in ) { next unless exists $contact_keys{$key}; $xcp_request->{attributes}->{contact_set}->{$type}->{$key} = $in{$key}; } if ($reg_domain =~ /ca$/) { foreach $key (@CA_EXTRA_FIELDS) { $xcp_request->{attributes}->{contact_set}->{$type}->{$key} = $in{$key} if defined $in{$key}; } } # basic error checking on request vs user permissions my $affect_domains = $in{affect_domains}; foreach $key (keys %contact_types) { if ($in{"affect_$key"}) { if ((not $reg_f_owner) and (not $reg_permission & $PERMISSIONS{"F_MODIFY_$key"})) { error_out("No permission to modify contact type: $contact_types{$key}.
\n"); exit; } push @{$xcp_request->{attributes}->{contact_set}->{also_apply_to}}, $key; } } if ($affect_domains and (not $reg_f_owner)) { error_out("Only the domain owner can apply changes to multiple domains.
\n"); exit; } my $response = $XML_Client->send_cmd( $xcp_request ); if (not $response->{is_success}) { # only go into the total failure page if there # are not any details, because OpenSRS # will return not is_success if none # of the contacts were succesfully modified # for reasons particular to each domain applied to. if ( not keys %{$response->{attributes}{details}} ) { $error .= "Failed attempt: $response->{response_text}.
\n"; if ($response->{attributes}{error}) { $response->{attributes}{error} =~ s/\n/
\n/g; $error .= $response->{attributes}{error}; } error_out($error); exit; } } # response_code of 250 indicates that an asynchronous registry has # received the request and the modification completion will # occur later. if ( $response->{response_code} == 250 ) { $waiting_requests_no = $response->{attributes}->{waiting_requests_no}; main_menu($resultString."Contact modification submitted, could take up to ".time_to_wait()."."); } else { my $domainResult; if ( exists $response->{attributes} && keys %{$response->{attributes}->{details}} ) { $resultString .= $response->{attributes}->{response_text}; $resultString .= "
"; my $tempDetailHash; foreach $domainResult ( keys %{$response->{attributes}->{details}} ) { $tempDetailHash = $response->{attributes}->{details}->{$domainResult}; if ( $tempDetailHash->{response_text} =~ /Update of licensee company name is not allowed/){ $tempDetailHash->{response_text} .= "

Please contact your service provider to make this change."; } $resultString = sprintf( '%s%s : %s
', $resultString, $domainResult, $tempDetailHash->{response_text} ); if ( $domainResult eq $reg_domain && exists $tempDetailHash->{waiting_requests_no}) { $waiting_requests_no = $tempDetailHash->{waiting_requests_no}; } } } else { $resultString .= $response->{response_text}; } main_menu($resultString); } } # show domain tld-specific info sub modify_domain_extras { my ($error); my $rsp_auth_info; if ($capabilities->{domain_auth_info}) { my $xcp_auth_info = { action => "get", object => "domain", cookie => $cookie, attributes => { type => "domain_auth_info", } }; $rsp_auth_info = $XML_Client->send_cmd( $xcp_auth_info ); if (not $rsp_auth_info->{is_success}) { $error = "Failed attempt: $rsp_auth_info->{response_text}
\n"; error_out($error); exit; } escape_hash_values( $rsp_auth_info ); } my $rsp_forwarding_email; if ($capabilities->{forwarding_email}) { my $xcp_forwarding_email = { action => "get", object => "domain", cookie => $cookie, attributes => { type => "forwarding_email", } }; $rsp_forwarding_email = $XML_Client->send_cmd( $xcp_forwarding_email ); if (not $rsp_forwarding_email->{is_success}) { $error = "Failed attempt: $rsp_forwarding_email->{response_text}
\n"; error_out($error); exit; } escape_hash_values( $rsp_forwarding_email ); } my $rsp_nexus_info; if ($capabilities->{nexus_info}) { my $xcp_nexus_info = { action => "get", object => "domain", cookie => $cookie, attributes => { type => "nexus_info", } }; $rsp_nexus_info = $XML_Client->send_cmd( $xcp_nexus_info ); if (not $rsp_nexus_info->{is_success}) { $error = "Failed attempt: $rsp_nexus_info->{response_text}
\n"; error_out($error); exit; } escape_hash_values( $rsp_nexus_info ); } my $rsp_ced_info; if ($capabilities->{ced_info}) { my $xcp_ced_info = { action => "get", object => "domain", cookie => $cookie, attributes => { type => "ced_info", } }; $rsp_ced_info = $XML_Client->send_cmd( $xcp_ced_info ); if (not $rsp_ced_info->{is_success}) { $error = "Failed attempt: $rsp_ced_info->{response_text}
\n"; error_out($error); exit; } escape_hash_values( $rsp_ced_info ); } my $rsp_trademark; if ($capabilities->{trademark}) { my $xcp_trademark = { action => "get", object => "domain", cookie => $cookie, attributes => { type => "trademark", } }; $rsp_trademark = $XML_Client->send_cmd( $xcp_trademark ); if (not $rsp_trademark->{is_success}) { $error = "Failed attempt: $rsp_trademark->{response_text}
\n"; error_out($error); exit; } escape_hash_values( $rsp_trademark ); } my $rsp_uk_whois_opt; if ($capabilities->{uk_whois_opt}) { my $xcp_uk_whois_opt = { action => "get", object => "domain", cookie => $cookie, attributes => { type => "uk_whois_opt", } }; $rsp_uk_whois_opt = $XML_Client->send_cmd( $xcp_uk_whois_opt ); if (not $rsp_uk_whois_opt->{is_success}) { $error = "Failed attempt: $rsp_uk_whois_opt->{response_text}
\n"; error_out($error); exit; } escape_hash_values( $rsp_uk_whois_opt ); } my $rsp_whois_privacy; if ($capabilities->{whois_privacy_state}) { my $xcp_whois_privacy = { action => "get", object => "domain", cookie => $cookie, attributes => { type => "whois_privacy_state", } }; $rsp_whois_privacy = $XML_Client->send_cmd( $xcp_whois_privacy ); if (not $rsp_whois_privacy->{is_success}) { $error = "Failed attempt: $rsp_whois_privacy->{response_text}
\n"; error_out($error); exit; } escape_hash_values( $rsp_whois_privacy ); } my %HTML = (); $HTML{domain_auth_info} = $rsp_auth_info->{attributes}->{domain_auth_info} if ($rsp_auth_info); $HTML{forwarding_email} = $rsp_forwarding_email->{attributes}->{forwarding_email} if ($rsp_forwarding_email); if ($rsp_nexus_info) { $HTML{old_app_purpose} = $rsp_nexus_info->{attributes}->{nexus}->{app_purpose}; $HTML{old_nexus_category} = $rsp_nexus_info->{attributes}->{nexus}->{category}; $HTML{old_nexus_validator} = $rsp_nexus_info->{attributes}->{nexus}->{validator}; $HTML{old_app_purpose} =~ tr/a-z/A-Z/; $HTML{old_nexus_category} =~ tr/a-z/A-Z/; $HTML{old_nexus_validator} =~ tr/a-z/A-Z/; $HTML{"category_" . $HTML{old_nexus_category}} = "checked"; } if ($rsp_ced_info) { $HTML{old_contact_type} = $rsp_ced_info->{attributes}->{ced_info}->{contact_type}; $HTML{old_locality_country} = $rsp_ced_info->{attributes}->{ced_info}->{locality_country}; $HTML{old_locality_city} = $rsp_ced_info->{attributes}->{ced_info}->{locality_city}; $HTML{old_locality_state_prov} = $rsp_ced_info->{attributes}->{ced_info}->{locality_state_prov}; $HTML{old_legal_entity_type} = $rsp_ced_info->{attributes}->{ced_info}->{legal_entity_type}; $HTML{old_legal_entity_type_info} = $rsp_ced_info->{attributes}->{ced_info}->{legal_entity_type_info}; $HTML{old_id_type} = $rsp_ced_info->{attributes}->{ced_info}->{id_type}; $HTML{old_id_type_info} = $rsp_ced_info->{attributes}->{ced_info}->{id_type_info}; $HTML{old_id_number} = $rsp_ced_info->{attributes}->{ced_info}->{id_number}; } if ($HTML{forwarding_email}) { $HTML{text_comment} = '!-- '; $HTML{text_comment_close} = ' --'; } else { $HTML{email_comment} = '!-- '; $HTML{email_comment_close} = ' --'; } $HTML{CGI} = $cgi; # include domain auth code form in the main html page if domain auth code is avaliable if ($rsp_auth_info) { $HTML{domain_auth_code_form} = get_content("$path_templates/domain_auth_code_form.html", \%HTML); } # include forwarding email form in the main html page if it is capable for forwarding email modification if ($rsp_forwarding_email) { $HTML{forwarding_email_form} = get_content("$path_templates/forwarding_email_form.html", \%HTML); } # include trademark form in the main html page if it is capable for trademark modification if ($rsp_trademark) { if ( $rsp_trademark->{attributes}->{trademark} eq "Y" ) { $HTML{trademark_enabled}='checked'; $HTML{trademark_disabled}=''; } else { $HTML{trademark_enabled}=''; $HTML{trademark_disabled}='checked'; } $HTML{trademark} = $rsp_trademark->{attributes}->{trademark}; $HTML{trademark_form} = get_content("$path_templates/trademark_form.html", \%HTML); } if ($reg_domain =~ /\.uk$/){ if ( $capabilities->{change_ips_tag} ) { $HTML{change_ips_tag_form} = get_content("$path_templates/change_ips_tag.html", \%HTML); } else { $HTML{change_ips_tag_form} = get_content("$path_templates/cant_change_ips_tag.html", \%HTML); } } # include uk whois opt out from in the main html page if it is capable for Nominet whois opt out modification if ($rsp_uk_whois_opt) { $HTML{old_uk_whois_opt} = $rsp_uk_whois_opt->{attributes}->{uk_whois_opt}; # flip the value as the question is 'Display whois info?', so 'Y' means # no, I don't want to opt out. $HTML{old_uk_whois_opt} = $HTML{old_uk_whois_opt} eq 'Y' ? 'N' : 'Y'; $HTML{uk_reg_type_ind} = $rsp_uk_whois_opt->{attributes}->{reg_type} eq 'IND' ? 'checked' : ''; $HTML{uk_reg_type_find} = $rsp_uk_whois_opt->{attributes}->{reg_type} eq 'FIND' ? 'checked' : ''; if ( $HTML{uk_reg_type_ind} ne 'checked' && $HTML{uk_reg_type_find} ne 'checked') { $HTML{uk_reg_type_other} = 'checked'; } else { $HTML{uk_reg_type_other} = ''; } if ( $HTML{old_uk_whois_opt} eq "Y" ) { $HTML{uk_whois_opt_enabled}='checked'; $HTML{uk_whois_opt_disabled}=''; } else { $HTML{uk_whois_opt_enabled}=''; $HTML{uk_whois_opt_disabled}='checked'; } $HTML{uk_whois_opt_form} = get_content("$path_templates/uk_whois_opt_form.html", \%HTML); } # include nexus data form in the main html page if it is capable for .us nexus data modification if ($rsp_nexus_info) { $HTML{app_purpose_menu} = build_app_purpose_list($HTML{old_app_purpose}); $HTML{citizen_country_list} = locale_build_country_list($HTML{old_nexus_validator}?$HTML{old_nexus_validator}:'--'); $HTML{us_nexus_form} = get_content("$path_templates/us_nexus_form.html", \%HTML); } # include ced data form in the main html page if it is capable for .asia ced data modification if ($rsp_ced_info) { $HTML{contact_type_menu} = build_ced_contact_type_select_list($HTML{old_contact_type}); $HTML{locality_country_menu} = build_ced_locality_select_list($HTML{old_locality_country}); $HTML{legal_entity_type_menu} = build_ced_entity_type_select_list($HTML{old_legal_entity_type}); $HTML{id_type_menu} = build_ced_identification_type_select_list($HTML{old_id_type}); $HTML{asia_ced_form} = get_content("$path_templates/asia_ced_form.html", \%HTML); } # include domain whois_privacy form in the main html page if domain whois_privacy state is enabled or disabled if ($rsp_whois_privacy->{attributes}->{changeable}) { $HTML{whois_privacy_state} = $rsp_whois_privacy->{attributes}->{state} if ($rsp_whois_privacy); $HTML{old_whois_privacy_state} = $HTML{whois_privacy_state} eq 'disabled' ? 'N' : 'Y'; if ($HTML{whois_privacy_state} eq "enabled" ) { $HTML{wp_state_cur} = 'Enabled'; $HTML{wp_state_change_to} = 'Disable'; $HTML{whois_privacy_radio_button}=' '; } else { $HTML{wp_state_cur} = 'Disabled'; $HTML{wp_state_change_to} = 'Enable'; $HTML{whois_privacy_radio_button}=''; } $HTML{whois_privacy_changes_menu} = make_whois_privacy_changes_menu(); $HTML{whois_privacy_form} = get_content("$path_templates/whois_privacy_form.html", \%HTML); } if($dns_errors) { $HTML{full_dns_error} = $dns_errors; $HTML{dns_error_form} = get_content("$path_templates/dns_error_form.html", \%HTML); } if ( $capabilities->{cira_email_pwd} and $MANAGE{enable_cira_email_pwd} ) { $HTML{cira_email_pwd} = get_content("$path_templates/cira_email_pwd.html", \%HTML); } my $template="modify_domain_extras.html"; print_form("$path_templates/$template",\%HTML); } # process data to modify domain extras sub do_modify_domain_extras { my ($ok_flag, $do_flag, $resultString); if ($in{submit} =~ /cancel/i) { main_menu("Changes cancelled"); exit; } if ($in{domain_auth_info} && $in{domain_auth_info} ne $in{old_domain_auth}) { $do_flag = 1; my $xcp_auth_info = { action => "modify", object => "domain", cookie => $cookie, attributes => { data => "domain_auth_info", domain_auth_info => $in{domain_auth_info}, } }; my $rsp_auth_info = $XML_Client->send_cmd( $xcp_auth_info ); if (not $rsp_auth_info->{is_success}) { $resultString .= "Failed to modify domain auth code for $reg_domain : $rsp_auth_info->{response_text}
"; } else { $resultString .= "Domain auth code modification successful for $reg_domain
"; $ok_flag = 1; } } if ($in{trademark} && $in{trademark} ne $in{old_trademark}) { $do_flag = 1; my $xcp_trademark = { action => "modify", object => "domain", cookie => $cookie, attributes => { data => "trademark", trademark => $in{trademark}, } }; my $rsp_trademark = $XML_Client->send_cmd( $xcp_trademark ); if (not $rsp_trademark->{is_success}) { $resultString .= "Failed to modify domain trademark for $reg_domain : $rsp_trademark->{response_text}
"; } else { $resultString .= "Domain trademark modification successful for $reg_domain
"; $ok_flag = 1; } } # do modification for whois_privacy state if ($in{whois_privacy} && $in{whois_privacy} ne $in{old_whois_privacy}) { $do_flag = 1; my $xcp_whois_privacy = { action => "modify", object => "domain", cookie => $cookie, attributes => { data => "whois_privacy_state", state => $in{whois_privacy}, affect_domains => $in{wp_affect_domains}, report_email => $in{report_email}, } }; my $rsp_whois_privacy = $XML_Client->send_cmd( $xcp_whois_privacy ); if (not $rsp_whois_privacy->{is_success}) { $resultString .= "Failed to modify domain whois_privacy state for $reg_domain : $rsp_whois_privacy->{_response_text}
"; } else { if($in{wp_affect_domains}){ $resultString .= $rsp_whois_privacy->{response_text}; }else{ $resultString .= "Domain Whois Privacy state modification successful for $reg_domain.
"; #$resultString .= $rsp_whois_privacy->{_response_text} ." for " . $reg_domain . "
"; } $ok_flag = 1; } } if ( $in{new_ips_tag} ) { my $xcp_change_ips_tag = { action => "modify", object => "domain", cookie => $cookie, attributes => { data => "change_ips_tag", gaining_registrar_tag => $in{new_ips_tag}, domain => $reg_domain, change_tag_all => $in{uk_change_tag_all}, } }; my $rsp_change_ips_tag = $XML_Client->send_cmd( $xcp_change_ips_tag ); if ( ! $rsp_change_ips_tag->{is_success} ){ $resultString .= "Failed to modify ips_tag for $reg_domain : $rsp_change_ips_tag->{response_text}.
"; } else { if ( $in{uk_change_tag_all} ) { $resultString .= "Domain Domain Tag modification successfully submitted for all domains.
"; } else { $resultString .= "Failed to modify ips_tag for $reg_domain : " if $rsp_change_ips_tag->{error}; $resultString .= $reg_domain . ": " . $rsp_change_ips_tag->{response_text} . "
"; } } } if ($in{uk_whois_opt} && $in{uk_whois_opt} ne $in{old_uk_whois_opt}) { $do_flag = 1; # the question is: Display personal info in whois? So answer 'no' means # yes, I want to opt out. $in{uk_whois_opt} = $in{uk_whois_opt} eq 'Y' ? 'N' : 'Y'; my $xcp_uk_whois_opt = { action => "modify", object => "domain", cookie => $cookie, attributes => { data => "uk_whois_opt", uk_whois_opt => $in{uk_whois_opt}, reg_type => $in{reg_type}, uk_affect_domains => $in{uk_affect_domains}, } }; my $rsp_uk_whois_opt = $XML_Client->send_cmd( $xcp_uk_whois_opt ); if (not $rsp_uk_whois_opt->{is_success}) { $resultString .= "Failed to submit modifications to Nominet whois settings for $reg_domain : $rsp_uk_whois_opt->{response_text}
"; } else { $resultString .= "Nominet whois settings modification successfully submitted for $reg_domain
"; $ok_flag = 1; } } if ($in{forwarding_email} && $in{forwarding_email} ne $in{old_forwarding_email}) { $do_flag = 1; my $xcp_forwarding_email = { action => "modify", object => "domain", cookie => $cookie, attributes => { data => "forwarding_email", forwarding_email => $in{forwarding_email}, } }; my $rsp_forwarding_email = $XML_Client->send_cmd( $xcp_forwarding_email ); if (not $rsp_forwarding_email->{is_success}) { $resultString .= "Failed to modify forwarding email for $reg_domain : $rsp_forwarding_email->{response_text}
"; } elsif ($rsp_forwarding_email->{response_code} == 250) { $resultString .= "Forwarding email modification successfully submitted, could take up to ".time_to_wait().".
"; $ok_flag = 1; } else { $resultString .= "Forwarding email modification successful for $reg_domain
"; $ok_flag = 1; } } if ($capabilities->{nexus_info}) { my $xcp_nexus_info = { action => "modify", object => "domain", cookie => $cookie, attributes => { data => "nexus_info", nexus => { app_purpose => $in{app_purpose}, category => $in{nexus_category}, } } }; my $mod_flag = 0; $mod_flag =1 if ($in{app_purpose} ne $in{old_app_purpose}); $mod_flag =1 if ($in{nexus_category} ne $in{old_nexus_category}); if ($in{nexus_category} =~ /^C3/) { $xcp_nexus_info->{attributes}->{nexus}->{validator} = $in{nexus_validator}; $mod_flag =1 if ($in{nexus_validator} ne $in{old_nexus_validator}); } if ($mod_flag) { $do_flag = 1; my $rsp_nexus_info = $XML_Client->send_cmd( $xcp_nexus_info ); if (not $rsp_nexus_info->{is_success}) { $resultString .= "Failed to modify nexus info for $reg_domain : $rsp_nexus_info->{response_text}
"; } else { $resultString .= "Nexus info modification successful for $reg_domain
"; $ok_flag = 1; } } } if ($capabilities->{ced_info}) { my $xcp_ced_info = { action => "modify", object => "domain", cookie => $cookie, attributes => { data => "ced_info", ced_info => { contact_type => $in{contact_type}, locality_country => $in{locality_country}, locality_city => $in{locality_city}, locality_state_prov => $in{locality_state_prov}, legal_entity_type => $in{legal_entity_type}, legal_entity_type_info => $in{legal_entity_type_info}, id_type => $in{id_type}, id_type_info => $in{id_type_info}, id_number => $in{id_number}, } } }; my $mod_flag = 0; $mod_flag =1 if ($in{contact_type} ne $in{old_contact_type}); $mod_flag =1 if ($in{locality_country} ne $in{old_locality_country}); $mod_flag =1 if ($in{locality_city} ne $in{old_locality_city}); $mod_flag =1 if ($in{locality_state_prov} ne $in{old_locality_state_prov}); $mod_flag =1 if ($in{legal_entity_type} ne $in{old_legal_entity_type}); $mod_flag =1 if ($in{legal_entity_type_info} ne $in{old_legal_entity_type_info}); $mod_flag =1 if ($in{id_type} ne $in{old_id_type}); $mod_flag =1 if ($in{id_type_info} ne $in{old_id_type_info}); $mod_flag =1 if ($in{id_number} ne $in{old_id_number}); if ($mod_flag) { $do_flag = 1; my $rsp_ced_info = $XML_Client->send_cmd( $xcp_ced_info ); if (not $rsp_ced_info->{is_success}) { $resultString .= "Failed to modify CED contact info for $reg_domain : $rsp_ced_info->{response_text}
"; } else { $resultString .= "CED contact info modification successful for $reg_domain
"; $ok_flag = 1; } } } if($in{flag_do_validate_domain} and $dns_errors) { $do_flag = 1; my $validate_command = { action => "activate", object => "domain", cookie => $cookie, attributes => { domainname => $reg_domain, } }; my $val_res = $XML_Client->send_cmd($validate_command); if (not $val_res->{is_success}) { $resultString .= "Failed to submit domain validation for $reg_domain : $val_res->{response_code} $val_res->{response_text}
"; } else { $resultString .= "Domain validation successfully submitted to registry. Please review your changes in 15" . "minutes to verify that they were accepted.
"; $ok_flag = 1; } } if( $in{cira_email_pwd} and $MANAGE{enable_cira_email_pwd} ) { $do_flag = 1; my $xcp_cira_email_pwd = { action => "cira_email_pwd", object => "domain", attributes => { domain => $reg_domain, } }; my $cira_email_pwd = $XML_Client->send_cmd( $xcp_cira_email_pwd ); if (not $cira_email_pwd->{is_success}) { $resultString .= "Failed attempt: $cira_email_pwd->{response_text}
"; } else { $resultString .= "CIRA password sent to admin contact.
You can check email address in domain notes.
"; $ok_flag = 1; } } if (not $do_flag) { main_menu("Domain Extras Data modification successful
"); } elsif ($ok_flag == 1) { main_menu($resultString); } else { error_out($resultString); } } sub do_change_ips_tag { my $resultString; $in{new_ips_tag} =~ s/^\s+//; $in{new_ips_tag} =~ s/\s+$//; if ( $in{new_ips_tag} ) { my $xcp_change_ips_tag = { action => "modify", object => "domain", cookie => $cookie, attributes => { data => "change_ips_tag", gaining_registrar_tag => $in{new_ips_tag}, domain => $reg_domain, change_tag_all => $in{uk_change_tag_all}, } }; my $rsp_change_ips_tag = $XML_Client->send_cmd( $xcp_change_ips_tag ); if ( ! $rsp_change_ips_tag->{is_success} ){ $resultString .= "Failed to modify ips_tag for $reg_domain : $rsp_change_ips_tag->{response_text}.
"; } else { if ( $in{uk_change_tag_all} ) { $resultString .= "Domain Domain Tag modification successfully submitted for all domains.
"; } else { $resultString .= "Failed to modify ips_tag for $reg_domain : " if $rsp_change_ips_tag->{error}; $resultString .= $rsp_change_ips_tag->{response_text} . "
"; } } } main_menu($resultString); } # display domains a user owns sub view_domains { my (%HTML,$domain_name,$domain_html,$next_page,$previous_page); my $page = $in{ page }; if ( not $page ) { $page = 0 } my $order_by = $in{ orderby }; if ( not $order_by ) { $order_by = 'name' } my $limit = $in{ limit }; if( not $limit ) { $limit = 40 } $in{ sort_by } = 'DESC' if not $in{ sort_by } or $in{ sort_by } !~ /^(ASC|DESC)$/; my $sort = $in{sort_by}; my $domain = lc $in{domain}; $domain = trim($domain); my $domain_search = $in{domain_search}; $domain_search = trim($domain_search); if ( not $domain_search ) { $domain_search = '*'; } # get domains for a given user my $xcp_request = { action => "get", object => "domain", cookie => $cookie, attributes => { page => $page, type => "list", with_encoding_types => 1, domain => $domain, domain_search => $domain_search, expiry_date => $in{ expiry_date }, auto_renew => $in{ auto_renew }, order_by => $order_by, sort_by => $sort, limit => $in{ limit }, } }; my $response = $XML_Client->send_cmd( $xcp_request ); if (not $response->{is_success}) { error_out("Failed attempt: $response->{response_text}\n"); exit; } my $remainder = $response->{attributes}->{remainder}; # are there more domains to show? my @test_array = @{ $response->{ attributes }{ ext_results } }; my %domains = map { %{ $_ } } @{ $response->{ attributes }{ ext_results } }; foreach my $domain ( keys %domains ) { $domains{ $domain }{ NATIVE } = $domain; $domains{ $domain }{ auto_renew } = $domains{ $domain }{ auto_renew } ? "Y" : "N"; $domains{ $domain }{ expiredate } =~ s/\s.*//; # get rid of the time $domains{ $domain }{ wp_service } = $domains{ $domain }{ wp_service } eq 'enabled' ? "Y" : "N"; $domains{ $domain }{ wp_expiredate } = $domains{ $domain }{ wp_expiredate } ? $domains{ $domain }{ wp_expiredate } : "N"; } foreach my $test ( @test_array ){ foreach my $domain ( keys %$test ){ my $domain_link; if ( $reg_domain eq $domain ) { $domain_link = $domains{ $domain }{ NATIVE }; } else { $domain_link = qq($domains{$domain}{NATIVE}); } $domain_html .= < $domain_link $domains{ $domain }{ expiredate } EOROW if ( $MANAGE{ show_auto_renew } ) { $domain_html .= <$domains{ $domain }{ auto_renew } EOROW } $domain_html .= <$domains{ $domain }{ wp_service } $domains{ $domain }{ wp_expiredate } EOROW } } my $num_page_links = 10; $HTML{page} = $page; my $navbar = make_navbar( "view_domains&limit=$in{limit}&domain_search=$in{domain_search}&domain=$in{domain}&expiry_date=$in{expiry_date}&auto_renew=$in{auto_renew}&orderby=$order_by&sort_by=$sort", $response->{ attributes }{ count }, $limit, $num_page_links, $HTML{page} ); $navbar .= "

\n"; my $new_sort = $sort eq 'ASC' ? 'DESC' : 'ASC'; if ( $MANAGE{ show_auto_renew } ) { $HTML{header} = <Auto Renew EOF } else { $HTML{header} = " "; } $HTML{DOMAIN_COUNT} = $response->{ attributes }{ count }; $HTML{DOMAINS} = $domain_html; $HTML{domain} = $in{domain}; $HTML{domain_search} = $in{domain_search}; $HTML{page} = $page; $HTML{limit} = $limit; $HTML{auto_renew} = $in{auto_renew}; $HTML{cgi} = $cgi; $HTML{NAVBAR} = $navbar; $HTML{expiry_date} = $in{expiry_date}; $HTML{new_sort} = $new_sort; print_form("$path_templates/view_domains.html",\%HTML); } # switches authentication to specified domain (updates cookie) sub manage_domain { my $domain = lc $in{domain}; $domain =~ s/(^\s+)|(\s+$)//g; my ($tld) = $domain =~ /$OPENSRS{OPENSRS_TLDS_REGEX}$/; if ( exists $CANT_SUPPORT{$tld} ) { my $message = < interface. We will have a $tld enabled Manage Domain interface in place as
soon as possible.
If need to make emergency nameserver changes to your domain, please contact support\@opensrs.org. EOF error_out($message); exit; } my $xcp_request = { action => "update", object => "cookie", cookie => $cookie, attributes => { reg_username => $reg_username, reg_password => $reg_password, domain => $reg_domain, domain_new => $domain, } }; my $response = $XML_Client->send_cmd( $xcp_request ); if (not $response->{is_success}) { error_out("Failed attempt: $response->{response_text}\n"); exit; } $reg_domain = $domain; $reg_f_owner = $response->{attributes}->{f_owner}; $reg_permission = $response->{attributes}->{permission}; $domain_count = $response->{attributes}->{domain_count}; $expiredate = $response->{attributes}->{expiredate}; $waiting_requests_no = $response->{attributes}->{waiting_requests_no}; validate(); my $mm_str = "Now managing $domain."; $mm_str .= "[IDN]" if $domain =~ /^xn--/; main_menu($mm_str); } sub make_de_org_change_menu { my ($type,$html); my ($reg_domain,$f_owner,$permission,$current_type) = @_; my ($tld) = $reg_domain =~ /$OPENSRS{OPENSRS_TLDS_REGEX}$/; my $table_start = < Also Apply these changes to: YES NO EOF my $need_report_email = 0; if ($reg_f_owner && ($domain_count > 1)) { $need_report_email = 1; $html .= < All UNLOCKED Domains ($domain_count) EOF } my $table_end = "\n"; my ($menu); if ($html) { $menu = < If you are modifying all the domains in the profile and you would like a status
report sent to you, please enter a valid email address in the field provided.
Report Email
Only $tld will be affected
EOF } return $menu; } else { return ""; } } #generate menu for applying whois_privacy changes to all domains in the profile sub make_whois_privacy_changes_menu { my ($type,$html); my $table_start = < Also Apply these changes to: YES NO EOF my $need_report_email = 0; if ($reg_f_owner && ($domain_count > 1)) { $need_report_email = 1; $html .= < All UNLOCKED Domains ($domain_count) EOF } my $table_end = "\n"; my ($menu); if ($html) { $menu = < If you are modifying all the domains in the profile and you would like a status
report sent to you, please enter a valid email address in the field provided.
Report Email
EOF } return $menu; } else { return ""; } } sub make_beu_global_menu { my ($type,$html); my ($reg_domain,$f_owner,$permission,$current_type) = @_; my ($tld) = $reg_domain =~ /$OPENSRS{OPENSRS_TLDS_REGEX}$/; my $table_start = < Also Apply these changes to: YES NO EOF my $need_report_email = 0; if ($reg_f_owner && ($domain_count > 1)) { $need_report_email = 1; $html .= < All UNLOCKED Domains ($domain_count) EOF } my $table_end = "\n"; my ($menu); if ($html) { $menu = < If you are modifying all the domains in the profile and you would like a status
report sent to you, please enter a valid email address in the field provided.
Report Email
Only $tld will be affected
EOF } return $menu; } else { return ""; } } # generaste menu for applying contact changes to other types/domains sub make_global_menu { my ($type,$html); my ($f_owner,$permission,$current_type) = @_; my $table_start = < Also Apply these changes to: YES NO EOF if($reg_domain =~ /de$/) { $contact_types{billing} = "Zone"; } else { $contact_types{billing} = "Billing"; } foreach $type (qw/owner admin billing tech/) { next unless exists $contact_types{$type}; if ((($type =~ /owner/i ) && ( $reg_domain =~ /ca$/ )) || (($type =~ /billing/i ) && ( $reg_domain =~ /ca$/ )) || (($type =~ /tech/i ) && ($reg_domain =~ /uk$/) )) { next; } if (($f_owner or $permission & $PERMISSIONS{"F_MODIFY_$type"}) and ($type ne $current_type)) { $html .= < $contact_types{$type} Contact EOF } } # # We can't normalize the data with .ca domains so we don't allow # for universal changes with .ca domains. # # If it is in the organization contact page and if it is .uk domains, # we do not allow for universal changes with .uk domains right now. # my $need_report_email = 0; if ($reg_f_owner && ($domain_count > 1)) { $need_report_email = 1; $html .= < All UNLOCKED Domains ($domain_count) EOF } my $table_end = "\n"; my ($menu); if ($html) { $menu = < If you are modifying all the domains in the profile and you would like a status
report sent to you, please enter a valid email address in the field provided.
Report Email EOF } return $menu; } else { return ""; } } sub manage_nameservers { my (%HTML,$ns,$key,$fqdn,$ip,$delete,$message); if (@_) { $message = shift; } # retrieve nameserver info my $xcp_request = { action => "get", object => "nameserver", cookie => $cookie, attributes => { type => "all", }, }; my $response = $XML_Client->send_cmd( $xcp_request ); if (not $response->{is_success}) { error_out("Unable to retrieve nameservers: $response->{response_text}\n"); exit; } foreach $key ( @{$response->{attributes}->{nameserver_list}} ) { $fqdn = $key->{name}; $ip = $key->{ipaddress}; if ( $key->{can_delete} ) { $delete = < EOF } else { $delete = ""; } $HTML{nameservers} .= <

$fqdn EOF $HTML{nameservers} .= < $delete EOF } $HTML{DOMAIN_NAME} = $reg_domain; $HTML{CGI} = $cgi; $HTML{MESSAGE} = $message ? "$message

" : ""; print_form("$path_templates/manage_nameservers.html",\%HTML); } # change ip address for a given nameserver sub do_manage_nameserver { my $fqdn = $in{fqdn}; my $new_fqdn = $in{new_fqdn}; my $ip = $in{ip}; my $xcp_request = { action => "", object => "nameserver", cookie => $cookie, attributes => { name => $fqdn, ipaddress => $ip, } }; if ($in{submit} =~ /delete/i) { $xcp_request->{action} = "delete"; my $need_lock = manage_ns_locked_domain('unlock'); my $response = $XML_Client->send_cmd( $xcp_request ); manage_ns_locked_domain('lock') if $need_lock; if (not $response->{is_success}) { my $error = "Unable to delete nameserver: $response->{response_text}"; # check to see why nameservers can't be modified. If because # domain is locked, return a message to that affect. if ( get_domain_lock_status() && !$MANAGE{ allow_ns_change_locked_domain } ) { $error = "This domain is currently locked. The lock must be removed to allow nameservers to be modified." } error_out( $error ); exit; } # response_code of 250 indicates that an asynchronous registry has # received the request and the completion of the request will # occur later. if ( $response->{response_code} == 250 ) { $waiting_requests_no = $response->{attributes}->{waiting_requests_no}; manage_nameservers("Nameserver deletion submitted, could take up to ".time_to_wait()."."); } else { manage_nameservers("Nameserver $new_fqdn deleted"); } } else { # only pass the new_fqdn param if it is changing if ( $fqdn ne $new_fqdn ) { $xcp_request->{attributes}->{new_name} = $new_fqdn; } $xcp_request->{action} = "modify"; my $need_lock = manage_ns_locked_domain('unlock'); my $response = $XML_Client->send_cmd( $xcp_request ); manage_ns_locked_domain('lock') if $need_lock; if (not $response->{is_success}) { my $error = "Unable to modify nameserver: $response->{response_text}"; # if reason can't add is because domain is locked, return message # to that affect. if ( get_domain_lock_status() && !$MANAGE{ allow_ns_change_locked_domain } ) { $error = "This domain is currently locked. The lock must be removed to allow nameservers to be modified."; } error_out( $error ); exit; } # response_code of 250 indicates that an asynchronous registry has # received the request and the completion of the request will # occur later. if ( $response->{response_code} == 250 ) { $waiting_requests_no = $response->{attributes}->{waiting_requests_no}; if ( $fqdn ne $new_fqdn ) { manage_nameservers("Nameserver rename modification submitted, could take up to ".time_to_wait()."."); } else { manage_nameservers("Nameserver modification submitted to registry for processing. " . "Please review your changes in 15 minutes to verify that they were accepted."); } } else { if ($fqdn ne $new_fqdn ) { manage_nameservers("Nameserver $fqdn renamed to $new_fqdn"); } else { manage_nameservers("Nameserver $fqdn successfully modified"); } } } } # display nameserver information for the current domain sub modify_nameservers { my (%fqdns,$fqdn,$ip,$key,$num,$ns_html,%HTML,$title,$add_ns); my $message = shift; # retrieve nameserver info my $xcp_request = { action => "get", object => "domain", cookie => $cookie, attributes => { type => 'nameservers', } }; my $response = $XML_Client->send_cmd( $xcp_request ); if (not $response->{is_success}) { error_out("Unable to retrieve nameserver information: $response->{response_text}\n"); exit; } $HTML{CGI} = $cgi; foreach $key ( @{$response->{attributes}->{nameserver_list}} ) { $fqdns{$key->{sortorder}} = 1; } my $count = 1; my $total = 13; foreach $key ( @{$response->{attributes}->{nameserver_list}} ) { if ($count == 1) { $title = "Primary"; } elsif ($count == 2) { $title = "Secondary"; } else { $title = "Nameserver $count"; } $total--; $fqdn = $key->{name}; $ip = $key->{ipaddress}; $ns_html .= < $title: EOF $ns_html .= <$ip EOF $count++; } foreach (0..$total-1){ if ($count == 1) { $title = "Primary"; } elsif ($count == 2) { $title = "Secondary"; } else { $title = "Nameserver $count"; } $ns_html .= < $title: EOF $ns_html .= <  EOF $count++; } # only show the option to create new nameservers for domain owners if (($reg_f_owner) || ($reg_permission & $PERMISSIONS{f_modify_nameservers})) { $HTML{CREATE_NAMESERVERS} = <
If you want to create or modify a nameserver which is based on $reg_domain click here. EOF } $HTML{NAMESERVERS} = $ns_html; $HTML{MESSAGE} = $message ? "$message" : ""; print_form("$path_templates/modify_nameservers.html",\%HTML); } # process data to modify nameservers for the current domain sub do_modify_nameservers { my ($sortorder,$key,%remove_ids,$ns_data,$response); if ($in{submit} =~ /cancel/i) { modify_nameservers("Changes cancelled\n"); exit; } my $xcp_request = { action => "advanced_update_nameservers", object => "domain", cookie => $cookie, attributes => { op_type => 'assign', assign_ns => [], }, }; my @ns_key = (); my %uniq = (); foreach $key (keys %in) { if ($key =~ /^fqdn(\d+)$/) { push @ns_key => $key; } } foreach $key (sort {$a cmp $b} @ns_key){ next unless $in{$key}; $in{$key} =~ s/\s+//g; next unless $in{$key}; $in{$key} = lc $in{$key}; next if $uniq{$in{$key}}++; push @{$xcp_request->{attributes}{assign_ns}} => $in{$key}; } my $need_lock = manage_ns_locked_domain('unlock'); $response = $XML_Client->send_cmd( $xcp_request ); manage_ns_locked_domain('lock') if $need_lock; if (not $response->{is_success}) { my $error = "Unable to update nameservers: $response->{response_text}"; # check to see why nameservers can't be modified. If because # domain is locked, return a message to that affect. if ( get_domain_lock_status() && !$MANAGE{allow_ns_change_locked_domain} ) { $error = "This domain is currently locked. The lock must be removed to make DNS changes."; } error_out( $error ); exit; } # response_code of 250 indicates that an asynchronous registry has # received the request and the completion of the request will # occur later. if ( $response->{response_code} == 250 ) { $waiting_requests_no = $response->{attributes}->{waiting_requests_no}; modify_nameservers("Nameservers update for $reg_domain successfully submitted, could take up to ".time_to_wait()."."); } elsif ( $response->{response_code} == 251 ) { # removing a nameserver from a UK domain which is based upon that # domain will cause any other domains using that nameserver to not # function properly. In this case, send back a message to that affect. # This applies at the moment to .uk nameservers, due to the way # Nominet handles glue records. modify_nameserver( $response->{ response_text } ); } else { modify_nameservers("Nameservers modification for $reg_domain successfully submitted to registry."); } } sub do_create_nameserver { my $domain = $in{domain}; my $hostname = $in{hostname}; my $ip = $in{ip}; my $fqdn = "$hostname.$domain"; my $xcp_request = { action => "create", object => "nameserver", cookie => $cookie, attributes => { name => $fqdn, ipaddress => $ip, }, }; my $need_lock = manage_ns_locked_domain('unlock'); my $response = $XML_Client->send_cmd( $xcp_request ); manage_ns_locked_domain('lock') if $need_lock; if (not $response->{is_success}) { my $error = "Unable to create nameserver: $response->{response_text}"; # check to see why nameservers can't be modified. If because # domain is locked, return a message to that affect. if ( get_domain_lock_status() && !$MANAGE{ allow_ns_change_locked_domain } ) { $error = "This domain is currently locked. The lock must be removed to allow nameservers to be modified." } error_out( $error ); exit; } # response_code of 250 indicates that an asynchronous registry has # received the request and the completion of the request will # occur later. # # A response_code of 251 indicated that the nameserver has been created # in the OSRS database, but will not be usable by other domains until it # is attached to the parent domain. if ( $response->{response_code} == 250 ) { $waiting_requests_no = $response->{attributes}->{waiting_requests_no}; manage_nameservers("Name Server Creation successfully submitted, could take up to ".time_to_wait()."."); } elsif ( $response->{ response_code } == 251 ) { manage_nameservers( $response->{ response_text } ); } else { manage_nameservers("Name Server Created"); } } sub manage_profile { my (%HTML); # only allow the domain owner to access this routine if (not $reg_f_owner) { error_out("You do not have permission to access this feature.\n"); exit; } $HTML{CGI} = $cgi; print_form("$path_templates/manage_profile.html",\%HTML); } sub change_ownership { my (%HTML); # only allow the domain owner to access this routine if (not $reg_f_owner) { error_out("You do not have permission to access this feature.\n"); exit; } $HTML{CGI} = $cgi; print_form("$path_templates/change_ownership.html",\%HTML); } sub do_change_ownership { # only allow the domain owner to access this routine if (not $reg_f_owner) { error_out("You do not have permission to access this feature.\n"); exit; } my $username = lc $in{reg_username}; my $password = $in{reg_password}; my $confirm_password = $in{confirm_password}; my $flag_use_profile = $in{flag_use_profile}; my $flag_move_all_domains = $in{flag_move_all_domains}; my $domain = $in{domain}; my ($xcp_request, $response); if (not $username) { error_out("Please provide a username.\n"); exit; } elsif ($username !~ /^[a-z0-9]+$/) { error_out("Invalid syntax for new username.\n"); exit; } elsif ($password ne $confirm_password) { error_out("Password mismatch.\n"); exit; } elsif (not $password) { error_out("Please provide a password.\n"); exit; } elsif ($password !~ /^[A-Za-z0-9\[\]\(\)!@\$\^,\.~\|=\-\+_\{\}\#]+$/) { error_out("Invalid syntax for new passsword. The only allowed characters are all alphanumerics (A-Z, a-z, 0-9) and symbols []()!@\$^,.~|=-+_{}#\n"); exit; } elsif ($flag_use_profile and not $domain) { error_out("Please provide a domain to match the profile with.\n"); exit; } $xcp_request = { action => "change", object => "ownership", cookie => $cookie, attributes => { username => $username, password => $password, } }; if ($flag_move_all_domains) { $xcp_request->{attributes}->{move_all} = 1; } if ($flag_use_profile) { $xcp_request->{attributes}->{reg_domain} = $domain; } $response = $XML_Client->send_cmd( $xcp_request ); if (not $response->{is_success}) { error_out("Unable to change domain's ownership: $response->{response_text}.\n"); exit; } # make them logout # note that the cookie here is both needed for authentication and # for the command itself, hence why it appears twice in the request data $XML_Client->send_cmd( { action => "delete", object => "cookie", cookie => $cookie, attributes => { cookie => $cookie, }, } ); # make them login again so they are managing the domain under the new # profile $in{reg_domain} = $reg_domain; login("Ownership change successful. Now logged in as new owner.\n"); } # retrieve subuser information sub get_subuser { my ($sub_id,$sub_username,$sub_permission); # get subuser for a given user my $xcp_request = { action => "get", object => "subuser", cookie => $cookie, }; my $response = $XML_Client->send_cmd( $xcp_request ); if (not $response->{is_success}) { error_out("Unable to retrieve subuser information: $response->{response_text}\n"); exit; } $sub_id = $response->{attributes}->{id}; $sub_username = $response->{attributes}->{username}; $sub_permission = $response->{attributes}->{permission}; return($sub_id,$sub_username,$sub_permission); } # display waiting request history for this domain sub view_waiting_history { my (%HTML,$record); my $waiting_actions = { enhanced_update_nameservers => "Nameserver Update", update_nameservers => "Nameserver Update", add_nameserver => "Nameserver Update", remove_nameserver => "Nameserver Update", modify_contact_info => "Modify Contact Info", sw_register => "Registration", register_domain => "Registration", process_sw_order => "Registration", ukstatus => "Transfer", renew_domain => "Renewal", modify_uk_whois_opt => "Whois Opt Out", tld_update_contacts => "Modify Contact Info", modify_nameserver => "Nameserver Update", }; # get domains for a given user my $xcp_request = { action => "get", object => "domain", cookie => $cookie, attributes => { type => "waiting_history", } }; my $response = $XML_Client->send_cmd( $xcp_request ); if (not $response->{is_success}) { error_out("Failed attempt: $response->{response_text}\n"); exit; } my $record_count = $response->{attributes}->{record_count}; my @records = @{$response->{attributes}->{waiting_history}}; $HTML{waiting_history} = ""; if ( not scalar @records ) { $HTML{waiting_history} .= < No history found EOF } else { foreach $record (@records) { my $w_action = $waiting_actions->{$record->{action}}; $w_action||=$record->{action}; # if undefined or new action $HTML{waiting_history} .= < $record->{request_id}  $w_action  $record->{request_time}  $record->{response_time}  $record->{request_status}  $record->{response_text}  EOF } } $HTML{CGI} = $cgi; print_form("$path_templates/waiting_history.html",\%HTML); } ########################################################################### # print a html header sub print_header { if (not $flag_header_sent) { print "Content-type: text/html; charset=$OPENSRS{HTTP_ENCODING}\n\n"; $flag_header_sent = 1; } } ########################################################################## # substitute values on the specified template and print it to the client # an optional 'type' arg can be passed: 'framed' specifies to pull in base.html # as the outer frame and the given template as the inner frame # 'single' specifies to use the given template alone # the default behavior is 'framed' sub print_form { my ($type,$content,$template_html); print_header(); my @args = @_; my ($template,$HTML) = @args[0,1]; if ($args[2]) { $type = $args[2] } else { $type = 'framed' } if (not $domain_count) { $domain_count = 0; } my $action; # show domain search box if they have multiple domains if ($reg_f_owner and $domain_count > 1) { my $link; if ( $MANAGE{ allow_renewals } ) { $link = qq($domain_count Total); $action = "get_expire_domains"; } else { $link = qq($domain_count Total
); $action = "view_domains"; } if (not $HTML->{ auto_renew }) { $HTML->{auto_renew} = '*'}; my @selected; my %selected_show = ( '*' => "All", Y => "Yes", N => "No" ); foreach my $select (keys %selected_show){ if ( $select ne $HTML->{ auto_renew } ){ push @selected, $select; } } $HTML->{SEARCH_BOX} = <

EOF if ( $MANAGE{allow_renewals} ){ $HTML->{SEARCH_BOX} .= < EOF } $HTML->{SEARCH_BOX} .= <
Manage Another Domain: $link
Domain (Use an asterisk '*' to do wildcard searches.)
Expiry Date (E.g., mm/dd/yyyy)
Auto Renew
Number of Records
per Page
(Default is 40 records per page)

EOF } $HTML->{DOMAIN_NAME} = $reg_domain; $HTML->{CONVERT_LINK} = "[IDN]" if $reg_domain =~ /^xn--/; $HTML->{EXPIREDATE} = $expiredate; $HTML->{WAITING_REQUESTS_NO} = $waiting_requests_no; if ($inaccuratewhois){ $HTML->{INACCURATEWHOIS} = 'Inaccurate WHOIS Lock is ON. Please contact your Reseller to have this corrected'; $HTML->{INACCURATEWHOISLOCK} = "Changes CANNOT be applied while Inaccurate WHOIS lock is ON. Please contact your Reseller to have this corrected"; } if ($auction_escrow) { $HTML->{AUCTION_ESCROW} = 'Auction Escrow Lock is ON. Please contact your Reseller for more information'; } if ($dom_locked) { $HTML->{dom_locked} = "is Locked"; } $HTML->{TOP_NAVBAR} = make_top_navbar(); if ($type eq 'framed') { $HTML->{AUTORENDATA} = ""; if ($MANAGE{allow_auto_renewal_message}){ my $xcp_request = { action => "get", object => "domain", cookie => $cookie, attributes => { type => "expire_action", } }; my $response = $XML_Client->send_cmd( $xcp_request ); my $flag = $response->{attributes}->{auto_renew}; if($flag){ my $expiry_epoch = get_expiry_epoch_time($expiredate); my $new_epoch = $expiry_epoch - 30 * 86400; $HTML->{AUTORENDATA} = get_date_from_epoch($new_epoch, "stripped"); $HTML->{AUTORENDATA} = get_content("$path_templates/base_autoren.html", $HTML); } } $HTML->{CONTENT} = get_content("$template",$HTML); if($MANAGE{allow_renewals}){ get_warning_type(); } if ((defined $t_mode) and $t_mode) { $template_html = "base2.html"; if (($t_mode == $T_EXPIRED) || ($t_mode == ($T_EXPIRED + $T_EXPIRING))) { $HTML->{EXPIRED} = "Click here to see the list of names that will be deleted if not renewed."; } if (($t_mode == $T_EXPIRING) || ($t_mode == ($T_EXPIRED + $T_EXPIRING))) { $HTML->{EXPIRING} = "Click here to see the list of names expiring within the next $notice_days days."; } } else { $template_html = "base.html"; } $content .= get_content("$path_templates/$template_html",$HTML); } else { $content .= get_content("$template", $HTML); } print $content; } sub make_top_navbar { my ($navbar); #for .de we mask billing contact into zone contact my $billing_con_name = "Billing"; if($reg_domain =~ /de$/) { $billing_con_name = "Zone"; } if ($reg_f_owner) { $navbar = "Profile"; $navbar .= <Organization EOF # # .ca does not have a billing contact. # if ($reg_domain =~ /ca$/) { $navbar .= <Admin | Technical | Name Servers | Reseller Contact | Logout EOF } elsif ($reg_domain =~ /uk$/) { $navbar .= <Admin | $billing_con_name | Name Servers | Reseller Contact | Logout EOF } elsif ($reg_domain =~ /(eu|be)$/) { $navbar .= <Technical | Name Servers | Reseller Contact | Logout EOF } elsif ( $reg_domain =~ /$OPENSRS{ TLDS_SUPPORTING_LOCKING }/ ) { $navbar .= <Admin | $billing_con_name | Technical | Name Servers | Reseller Contact
Domain Locking | Logout EOF } else { $navbar .= <Admin | $billing_con_name | Technical | Name Servers | Reseller Contact
Domain Locking | Logout EOF } $navbar =~ /(.+Name Servers<\/a>)(.*)/s; if ($capabilities->{domain_extras} or $dns_errors) { $navbar = $1 . " | Domain Extras<\/a>\n" . $2; } else { $navbar = $1 . " | Domain Extras\n" . $2; } return $navbar; } else { # these first two are never available for sub-users $navbar .= "Profile\n"; # The owner contact type cannot be modified if the # domain ends with uk # if ( ( $reg_permission & $PERMISSIONS{f_modify_owner} ) && # ( $reg_domain !~ /uk$/ ) ) { if ($reg_permission & $PERMISSIONS{f_modify_owner}) { $navbar .= <Organization EOF } else { $navbar .= "| Organization\n"; } if ($reg_permission & $PERMISSIONS{f_modify_admin}) { $navbar .= <Admin EOF } else { $navbar .= "| Admin\n"; } if (($reg_permission & $PERMISSIONS{f_modify_billing}) && ($reg_domain !~ /ca$/)) { $navbar .= <$billing_con_name EOF } else { $navbar .= "| $billing_con_name\n"; } if ($reg_permission & $PERMISSIONS{f_modify_tech}) { $navbar .= <Technical EOF } else { $navbar .= "| Technical\n"; } if ($reg_permission & $PERMISSIONS{f_modify_nameservers}) { $navbar .= <Manage Name Servers EOF } else { $navbar .= "| Manage Name Servers\n"; } if (($reg_permission & $PERMISSIONS{f_modify_domain_extras}) && $capabilities->{domain_extras}) { $navbar .= <Domain Extras EOF } else { $navbar .= "| Domain Extras\n"; } if ($reg_permission & $PERMISSIONS{f_modify_whois_rsp_info}) { $navbar .= <Reseller Contact EOF } else { $navbar .= "| Reseller Contact"; } $navbar .= < Domain Locking | Logout EOF return $navbar; } } # handy method to show default error page sub error_out { my ( $error_msg, $domain ) = @_; my (%HTML); $HTML{CGI} = $cgi; $HTML{ERROR} = $error_msg; $HTML{SHOW_PASS} = ""; if ( defined $domain and defined $MANAGE{allow_password_requests} and $MANAGE{allow_password_requests} ) { if ( $MANAGE{password_send_to_admin} ) { $HTML{SHOW_PASS} = qq(Click here to have lost password sent to admin.); if ($MANAGE{password_send_subuser}){ $HTML{SHOW_PASS} .= qq(
Click here to have lost subuser password sent to admin.); } } if ( $MANAGE{password_send_to_owner} ) { $HTML{SHOW_PASS} .= qq(
Click here to have lost password sent to owner.); if ($MANAGE{password_send_subuser}){ $HTML{SHOW_PASS} .= qq(
Click here to have lost subuser password sent to admin.); } } } print_form("$path_templates/error.html",\%HTML,'single'); } sub escape_hash_values { my $hash_ref = shift; foreach my $hash_key ( keys %$hash_ref ) { if ( ref( $hash_ref->{$hash_key} ) eq "HASH" ) { escape_hash_values( $hash_ref->{$hash_key} ); } elsif ( ref( $hash_ref->{$hash_key} ) eq "ARRAY" ) { escape_array_values( $hash_ref->{$hash_key} ); } else { $hash_ref->{$hash_key} = escape( $hash_ref->{$hash_key} ); } } } sub escape_array_values { my $array_ref = shift; foreach my $array_element ( @$array_ref ) { if ( ref( $array_element ) eq "HASH" ) { escape_hash_values( $array_element ); } elsif ( ref( $array_element ) eq "ARRAY" ) { escape_array_values( $array_element ); } else { $array_element = escape( $array_element ); } } } sub escape { my $string = shift; $string =~ s/\"/"/g; return $string; } #################################################### # grab the contents of a template, substitute any supplied values, and return # the results sub get_content { my $content; my ($template,$HTML) = @_; open (FILE, "<$template") or die "Couldn't open $template: $!\n"; while () { s/{{(.*?)}}/pack('A*',$HTML->{$1})/eg; $content .= $_; } close FILE; return $content; } # attempt to validate a user's cookie sub validate { my ($expire,$response); $reg_username = ""; if (exists $cookies{$COOKIE_KEY}) { $cookie = $cookies{$COOKIE_KEY}; my $xcp_request = { action => "get", object => "userinfo", cookie => $cookie, }; $response = $XML_Client->send_cmd( $xcp_request ); if (not $response->{is_success}) { return undef; } $reg_username = $response->{attributes}->{username}; $reg_domain = $response->{attributes}->{domain}; $reg_f_owner = $response->{attributes}->{f_owner}; $reg_permission = $response->{attributes}->{permission}; $domain_count = $response->{attributes}->{domain_count}; $inaccuratewhois = $response->{attributes}->{inaccuratewhois}||0; $auction_escrow = $response->{attributes}->{auction_escrow}||0; $dom_locked = get_domain_lock_status()||0; $expiredate = $response->{attributes}->{expiredate}; $waiting_requests_no = $response->{attributes}->{waiting_requests_no}; $capabilities = $response->{attributes}->{capabilities}; if($SHOW_DNS_ERRORS) { $dns_errors = $response->{attributes}->{dns_errors}; } my $domain_extras = 0; while (my($k,$v) = each %$capabilities) { $domain_extras += $v; } $capabilities->{domain_extras} = $domain_extras; return 1; } else { return undef; } } # get cookies from the client sub GetCookies { my ($cookie, %cookies,$key,$value); foreach $cookie (split /\; /, $ENV{HTTP_COOKIE}) { ($key, $value) = (split /=/, $cookie)[0,1]; $value =~ s/\\0/\n/g; $cookies{$key} = $value; } return %cookies; } ##################################################################### # authenticate user sub login { my $message = shift; $reg_username = $in{reg_username}; $reg_password = $in{reg_password}; $in{reg_domain} =~ s/^\s+//; $in{reg_domain} =~ s/\s+$//; $reg_domain = $in{reg_domain}; if ( not $in{reg_domain} ) { error_out("Please enter a domain name."); exit; } if ( $in{reg_domain} =~ /\s/ ) { error_out("Spaces not allowed inside domain name [$in{reg_domain}]."); exit; } if ( $in{reg_domain} =~ /[^A-Za-z0-9\.\-]/ ) { error_out( "It seems that $in{reg_domain} is an IDN domain.
". " Please convert". " to Punycode first" ); exit; } if ( $in{reg_domain} =~ /^www\..*$OPENSRS{OPENSRS_TLDS_REGEX}$/i ) { error_out("Please, do not put www. as part of your domain name"); exit; } my ($tld) = $reg_domain =~ /$OPENSRS{OPENSRS_TLDS_REGEX}$/; if ( exists $CANT_SUPPORT{$tld} ) { my $message = < interface. We will have a $tld enabled Manage Domain interface in place as
soon as possible.

If need to make emergency nameserver changes to your domain, please contact support\@opensrs.org. EOF error_out($message); exit; } # get permissions for a given user my $xcp_request = { action => "set", object => "cookie", attributes => { domain => $reg_domain, reg_username => $reg_username, reg_password => $reg_password, } }; my $response = $XML_Client->send_cmd( $xcp_request ); if (not $response->{is_success}) { my $error; if ( $response->{response_code} == 415 ) { # bad un/pw $error = "Error: Invalid username/password combination for $reg_domain.

"; $response->{response_text} =~ s/\n/
\n/g; $error .= $response->{response_text}; error_out( $error, $reg_domain ); exit; } else { # any other error $error = "$response->{response_text}
Please contact Support for assistance."; error_out( $error ); exit; } } if ( $response->{redirect_url} ) { print "Location: ".$response->{redirect_url}."\n\n"; } $domain_count = $response->{attributes}->{domain_count}; $reg_permission = $response->{attributes}->{permission}; $reg_f_owner = $response->{attributes}->{f_owner}; $expiredate = $response->{attributes}->{expiredate}; $last_access_time = $response->{attributes}->{last_access_time}; $last_ip = $response->{attributes}->{last_ip}; # XXX what about waiting request stuff??? $waiting_requests_no = $response->{attributes}->{waiting_requests_no}; $cookie = $response->{attributes}->{cookie}; #run validate() here to get capabilities, which is used to decide #how to diplay the "Domain Extras" page. $cookies{$COOKIE_KEY} = $cookie; validate(); my $path = ""; print "Content-type: text/html\n"; print "Set-Cookie: $COOKIE_KEY=$cookie; PATH=$path\n"; print "\n"; $flag_header_sent = 1; main_menu($message); } ############################################################################# # logout user (delete cookie) sub logout { my ($cookie); if (exists($cookies{$COOKIE_KEY})) { $cookie = $cookies{$COOKIE_KEY}; my $xcp_request = { action => "delete", object => "cookie", cookie => $cookie, attributes => { cookie => $cookie, } }; $XML_Client->send_cmd( $xcp_request ); } show_login(); } ######################################################## # dynamically build all .ca legal types. sub build_ca_domain_legal_types { my $type = shift; my $string = ""; return $string; } sub build_ca_language_preferences { my $type = shift; my $string = "\n\nPreferred Language:\n\n\n"; return $string; } sub build_ca_nationality_pulldown { my $type = shift; my $string = "\n\nNationality:\n\n\n"; return $string; } sub get_expiry_epoch_time { my $tmptime = $_[0]; my @db = $tmptime =~ /^(\d{4})-(\d{1,2})-(\d{1,2}) (\d{1,2}):(\d{1,2}):(\d{1,2})$/; return timelocal($db[5], $db[4], $db[3], $db[2], $db[1]-1, $db[0]); } sub get_date_from_epoch { my ($ampm); my $time = shift; my $flag = shift; my @months = qw( Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec ); my ($min,$hour,$day,$month,$year) = (localtime($time))[1,2,3,4,5]; $year += 1900; if ($hour > 12) { $ampm = "pm"; $hour -= 12; } else { $ampm = "am"; } if ($flag eq 'stripped') { return sprintf("%3s %2d, %4d", $months[$month], $day, $year); } else { return sprintf("%2d:%02d %2s %3s %2d, %4d", $hour, $min, $ampm, $months[$month], $day, $year); } } sub get_expire_domains { #get list of expired domains or ones to expire within $notice_days days #/manage?action=get_expire_domains&type={expired/expiring} my ($error,$sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst); my (%HTML,$domain_name,$domain_html,$next_page,$previous_page); my @domains = () ; my $title = "List of domains due to expire within next $notice_days days"; my @auto_renew = (); my @expiredate = (); my @sponsoring = (); my @expired_index = (); # keep array of expired domain indexes my @expiring_index = (); # array of domain indexes with date whithin $notice_days days my $type = $in{type}; my $xcp_request = undef; my $response = undef; my $option = ""; my $type_string = ""; my $SELECT_ALL = "Select All"; my $DESELECT_ALL = "De-select All"; my $select_all_mode = $in{select_all_mode} || $SELECT_ALL ; my $select_all_renew_mode = $in{select_all_renew_mode} || $SELECT_ALL ; my $submitted = $in{submitted}; # flag to indicate if the user actually submitted request my $prev_submitted = $submitted; my $not_first_time = $in{not_first_time}; my $cb_auto_set = $in{cb_auto_set} || "0"; my $cb_renew_set = $in{cb_renew_set} || "0"; my $first_reg_domain = $in{first_reg_domain} || $reg_domain; my $auto_update_status = 0; my $updated_domain_html = ""; my $page = $in{page}; my $hpage = $in{hpage} || $page; my $select_all_autorenew = $in{select_all_autorenew}; my $select_all_renew = $in{select_all_renew}; my $submit_renewals = $in{submit_renewals}; my $dlterm0 = $in{"dlterm-0"}; my %hterm = {}; my %hauto = {}; my %hrenew = {}; my @hdomain= (); my $rtmp; my $i=0; my @status_msg = (); my $diff_rsp = 0; my $with_encoding_types=1; if (not $page) { $page = 0 } if ($submit_renewals) { # user submitted the request $submitted = 1; } $in{ sort_by } = 'ASC' if not $in{ sort_by } or $in{ sort_by } !~ /^(ASC|DESC)$/; my $sort = $in{sort_by}; my $order_by = $in{ orderby }; if ( not $order_by ) { $order_by = 'name' } my $limit = $in{ limit }; if( not $limit ) { $limit = 40 } my $auto_renew = $in{ auto_renew }; if( not $auto_renew ) { $auto_renew = '*' } my $domain = lc $in{domain}; $domain = trim($domain); my $domain_search = $in{domain_search}; $domain_search = trim($domain_search); if( not $domain ) { $domain = '*' } if( not $domain_search ) { $domain_search = '*' } my $expiry_date = $in{ expiry_date }; foreach my $key (keys %in){ $rtmp = $key; if ($rtmp =~ /^domain-/) { $hdomain[$i++]=$in{"$rtmp"}; } } my $arraycnt = @hdomain; foreach my $key (0..$arraycnt){ $hterm{$hdomain[$key]} = $in{"dlterm-$hdomain[$key]"}; $hauto{$hdomain[$key]} = $in{"autorenew-$hdomain[$key]"}; $hrenew{$hdomain[$key]} = $in{"renew-$hdomain[$key]"}; } if ($type eq "") { error_out("Missing type for $action"); return; }; if ((lc $type) eq "expired") { $response = do_expired_domains($page, $with_encoding_types, $sort, $domain, $domain_search, $auto_renew, $limit, $order_by, $expiry_date); $type_string = "&type=expired"; $title = "List of domains that will be deleted if not renewed"; } elsif ((lc $type) eq "expiring") { $response = do_expiring_domains($page, $with_encoding_types, $sort, $domain, $domain_search, $auto_renew, $limit, $order_by, $expiry_date); $type_string = "&type=expiring"; $title = "List of domains expiring within the next $notice_days days"; } elsif ((lc $type) eq "all") { $response = do_all_domains($page, $with_encoding_types, $sort, $domain, $domain_search, $auto_renew, $limit, $order_by, $expiry_date); $type_string = "&type=all"; $title = "List of domains in profile"; } else { error_out("
Wrong type used
"); return; } my $remainder = $response->{attributes}->{remainder}; # are there more domains to show? # Get domains: separate domain names from enctypes @domains = get_domains_store_enctypes($response); if (defined $domains[0]){ #Get expiredate & auto_renew arrays: for (my $i=0; $i<@domains; $i++){ $auto_renew[$i] = $response->{attributes}->{ext_results}->[$i]->{$domains[$i]}->{auto_renew}; $expiredate[$i] = $response->{attributes}->{ext_results}->[$i]->{$domains[$i]}->{expiredate}; $sponsoring[$i] = $response->{attributes}->{ext_results}->[$i]->{$domains[$i]}->{sponsoring_rsp}; } } my $ref = ref ($response->{attributes}->{domain_list}); if ($ref eq "ARRAY" and (defined $domains[0])) { for my $i ( 0..$#expiredate) { my $cb_auto=""; $status_msg[$i] = ""; my $orig_dom_name = $domains[$i]; if ($select_all_autorenew) { # user pressed SELECT_ALL for auto renew this time if ($select_all_mode eq $SELECT_ALL){ $cb_auto="CHECKED"; } elsif ($select_all_mode eq $DESELECT_ALL) { $cb_auto=""; } } else { # user did not press SELECT_ALL for auto renew this time if (($auto_renew[$i] == 1) and !$not_first_time) { $cb_auto="CHECKED"; } else { # set preserved state: $cb_auto=$hauto{$domains[$i]}; } } my $cb_renew =$hrenew{$domains[$i]}; # set preserved state if ( $select_all_renew) { # user pressed SELECT_ALL for renew this time: if ($select_all_renew_mode eq $SELECT_ALL) { $cb_renew = "CHECKED"; } elsif ($select_all_renew_mode eq $DESELECT_ALL) { $cb_renew = ""; } } $auto_update_status = 0; if ($submitted and $sponsoring[$i]) { # process domains if user submitted the request: if ( $cb_auto eq "CHECKED") { # change auto-renew: if (!$auto_renew[$i]) { change_profile($domains[$i]); $status_msg[$i] = renewals_autorenew(1); $auto_update_status = 1; } } else { if ($auto_renew[$i] ) { change_profile($domains[$i]); $status_msg[$i] = renewals_autorenew(0); $auto_update_status = 1; } } if ($i == $#expiredate) { # if this is the last one - change the profile back: if ($reg_domain ne $first_reg_domain) { change_profile($first_reg_domain); } } if ( $cb_renew eq "CHECKED") { # renew submitted domains: my ($exp_year) = $expiredate[$i] =~ m/^(\d+)/; if ($status_msg[$i]){ $status_msg[$i] = $status_msg[$i] . ", " . renewals_renew($domains[$i], $exp_year, $hterm{$domains[$i]}); } else { $status_msg[$i] = renewals_renew($domains[$i], $exp_year, $hterm{$domains[$i]}); } } if (($cb_renew eq "CHECKED") or $auto_update_status){ $updated_domain_html .= "$orig_dom_name"; $updated_domain_html .= "$status_msg[$i]"; } } my %termlist= ( '1' => ' 1 year', '2' => ' 2 years', '3' => ' 3 years', '4' => ' 4 years', '5' => ' 5 years', '6' => ' 6 years', '7' => ' 7 years', '8' => ' 8 years', '9' => ' 9 years', '10' => '10 years', ); my $option_data = ""; if ($hterm{$domains[$i]}) { $option_data = get_select_content($hterm{$domains[$i]}, \%termlist); } else { $option_data = get_select_content('1', \%termlist); } my $domain_link; if ( $type eq 'all' and $domains[ $i ] ne $reg_domain ) { $domain_link = qq($orig_dom_name); } else { $domain_link = $orig_dom_name; } # only show renewal options for domains sponsored by this RSP if ( $sponsoring[ $i ] ) { $domain_html .= < $domain_link $expiredate[$i] EOF if ( $MANAGE{show_auto_renew} ){ $domain_html .= <  EOF } $domain_html .= <  EOF } else { $domain_html .= < $domain_link $expiredate[$i] EOF my $colspan = 3; if ( not $MANAGE{show_auto_renew} ){ $colspan = 2; } $domain_html .= < Can't renew this domain. See below. EOF $diff_rsp = 1; } } # end of the for loop if ($updated_domain_html) { $HTML{DOMAINS} = $updated_domain_html; $HTML{TITLE} = "Update Status"; $HTML{CGI} = $cgi; print_form("$path_templates/expire_domains_result.html",\%HTML); exit; } # change names of submit buttons acording to the user's choice: if ( $select_all_autorenew) { if ($select_all_mode eq $SELECT_ALL) { $select_all_mode = $DESELECT_ALL; } else { $select_all_mode = $SELECT_ALL; } $cb_auto_set = "1"; } if ( $select_all_renew ) { if ($select_all_renew_mode eq $SELECT_ALL) { $select_all_renew_mode = $DESELECT_ALL; } else { $select_all_renew_mode = $SELECT_ALL; } $cb_renew_set = "1"; } $prev_submitted = $submitted; if ($submitted) { $submitted =0; } my (%HTML); $HTML{select_all_mode}= $select_all_mode; $HTML{select_all_renew_mode}= $select_all_renew_mode; if ( $MANAGE{show_auto_renew} ){ $HTML{select_auto_renew} = < EOF } $domain_html .= get_content("$path_templates/manage_rview_btns.html", \%HTML); } my $num_page_links = 10; my $navbar = make_navbar( "get_expire_domains&type=$in{type}&sort_by=$sort&expiry_date=$in{expiry_date}&limit=$limit&orderby=$in{orderby}&domain=$in{domain}&domain_search=$in{domain_search}&auto_renew=$in{auto_renew}", $response->{ attributes }{ count }, $limit, $num_page_links, $page); $navbar .= "

\n"; if ( $diff_rsp ) { $HTML{diff_rsp_msg} = < Note: Some domains are not sponsored by this domain provider, and can't be renewed/auto_renewed from this interface. EOF } my $new_sort = $sort eq 'ASC' ? 'DESC' : 'ASC'; $HTML{rows} = "4"; $HTML{header} = <Expiry Date EOF if ( $MANAGE{show_auto_renew} ){ $HTML{header} .= <Set Auto Renew EOF $HTML{rows} = "5"; } $not_first_time =1; $HTML{DOMAINS} = $domain_html; $HTML{TITLE} = $title; $HTML{CGI} = $cgi; $HTML{ACTION_VALUE} = "get_expire_domains"; $HTML{TYPE} = $type; $HTML{SELECT_ALL_MODE} = $select_all_mode; $HTML{SELECT_ALL_RENEW_MODE} = $select_all_renew_mode; $HTML{CB_AUTO_SET} = $cb_auto_set; $HTML{CB_RENEW_SET} = $cb_renew_set; $HTML{SUBMITTED} = $submitted; $HTML{NOT_FIRST_TIME} = $not_first_time; $HTML{NAVBAR} = $navbar; $HTML{HPAGE} = $hpage; $HTML{PAGE} = $page; $HTML{FIRST_REG_DOMAIN} = $first_reg_domain; $HTML{domain} = $in{domain}; $HTML{domain_search} = $in{domain_search}; $HTML{limit} = $limit; $HTML{auto_renew} = $in{auto_renew}; $HTML{expiry_date} = $in{expiry_date}; $HTML{DOMAIN_COUNT} = $response->{ attributes }{ count }; $HTML{new_sort} = $new_sort; $HTML{TYPE} = $in{type}; print_form("$path_templates/view_expire_domains.html",\%HTML); } sub get_select_content { my $sel_opt = shift; my $hashptr = shift; my $htmldata = ""; foreach my $item (sort {$a<=>$b} keys %$hashptr){ if ($item eq $sel_opt){ $htmldata .= "
Locking cannot be enabled/disabled from this interface. Please contact your domain supplier for assistance. EOFORM } $HTML{ FORM } = $form; $HTML{ CGI } = $cgi; print_form("$path_templates/domain_locking.html",\%HTML); } } opensrs-client-3.0.0/cgi/reg_cert.cgi0000755017777601777760000007011210770014202020555 0ustar nobodynogroup00000000000000#!/usr/bin/perl # .Copyright (C) 2002 TUCOWS.com Inc. # .Created: 2002/11/11 # .Contactid: # .Url: http://opensrs.org # # This program is free software; you can redistribute it and/or # modify it under the terms of the GNU Lesser General Public # License as published by the Free Software Foundation; either # version 2.1 of the License, 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 # Lesser General Public License for more details. # # You should have received a copy of the GNU Lesser General Public # License along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place, Suite 330, Boston, # MA 02111-1307 USA # $Id: reg_cert.cgi,v 1.28 2006/07/05 18:24:34 mnieweglowski Exp $ use vars qw( %in $cgi $path_templates %actions $action %cc_types $TPP_Client %contact_keys %data @cc_types %CERT_CONTACT_FIELDS $user_id $COOKIE_NAME $flag_header_sent %cookies $path_to_config ); # Null these things out for mod_perl users (%in, $cgi, $path_templates, %actions, $action, %cc_types, @cc_types, $TPP_Client, %contact_keys, %data, $path_to_config) = (); # pull in conf file with defined values BEGIN { $path_to_config = ""; # first "do" the major config file do "$path_to_config/OpenSRS.conf"; # now load up the config for Certificate service do "$path_to_config/Cert.conf"; } use strict; use lib $PATH_LIB; use CGI ':cgi-lib'; use Email::Valid; use HTML::Template; use Data::Dumper; use Core::Checksum qw(calculate compare); use OpenSRS::TPP_Client; use OpenSRS::ResponseConverter; use OpenSRS::Util::ConfigJar "$path_to_config/OpenSRS.conf"; use OpenSRS::Util::Common qw(send_email build_select_menu build_select_menu3 build_country_list CODE_2_Country); # global defines $user_id = 0; $COOKIE_NAME = "OPENSRS_TPP_CLIENT"; $flag_header_sent = 0; $cgi = $ENV{SCRIPT_NAME}; $path_templates = "$PATH_TEMPLATES/reg_cert"; %in = (); # list of valid actions to execute %actions = ( login => undef, do_login => undef, main => undef, collect_data => undef, verify_data => undef, register => undef, create_primary_contact => undef, renew => undef, logout => undef, ); # List of mandatory contact fields %CERT_CONTACT_FIELDS = ( organization => { org_name => 1, address1 => 1, address2 => 0, address3 => 0, duns => 0, city => 1, state => 1, postal_code => 1, country => 1, phone => 1, fax => 1, }, admin => { first_name => 1, last_name => 1, address1 => 1, city => 1, state => 1, postal_code => 1, country => 1, phone => 1, email => 1, } ); # make tech and billing same as admin $CERT_CONTACT_FIELDS{tech} = $CERT_CONTACT_FIELDS{admin}; $CERT_CONTACT_FIELDS{billing} = $CERT_CONTACT_FIELDS{admin}; %cc_types = ( visa => 'Visa', mastercard => 'Mastercard', amex => 'American Express', discover => 'Discover', ); @cc_types = qw( visa mastercard amex discover ); # start things up start_up(); # create a client object which we will use to connect to the Tucows server $TPP_Client = new OpenSRS::TPP_Client( %OPENSRS, response_converter => new OpenSRS::ResponseConverter(), ); $TPP_Client->login; # read in the form data ReadParse(\%in); delete $in{error_message}; %cookies = GetCookies(); $action = $in{action}; # perform necessary action if (not $action) { # if no action was supplied, use the defaults validate() ? main() : login(); } elsif (exists $actions{$action}) { # they passed a valid action if (($action eq 'do_login') or validate()) { no strict "refs"; &$action(); use strict; } else { login(); } } else { # they passed an invalid action error_out("Invalid action: $action"); } # close connection to the server $TPP_Client->logout; exit; ########################################################### sub start_up { if ($REG_CERT{debug}) { # print error to the page select (STDOUT); $| = 1; open (STDERR, ">&STDOUT") or die "Can't dump stdout: $!\n"; select (STDERR); $| = 1; select (STDOUT); } OpenSRS::Util::Common::initialize( path_templates => $PATH_TEMPLATES, mail_settings => \%MAIL_SETTINGS ); } # get cookies from the client sub GetCookies { my %cookies = (); foreach my $cookie (split /\; /, $ENV{HTTP_COOKIE}) { my ($key, $value) = (split /=/, $cookie)[0,1]; $value =~ s/\\0/\n/g; $cookies{$key} = $value; } return %cookies; } sub error_out { my %HTML = (ERROR => shift); print_form(template => "$path_templates/error.html", data => \%HTML); } # print html header sub print_header { my %cookies = @_; return if $flag_header_sent; print "Content-type: text/html\n"; foreach my $key (keys %cookies) { printf "Set-Cookie: %s=%s; PATH=;\n", $key, $cookies{$key}; } print "\n"; $flag_header_sent = 1; } # Substitute values on the specified template and print it to the client an # optional 'type' arg can be passed: 'framed' specifies to pull in base.html # as the outer frame and the given template as the inner frame 'single' # specifies to use the given template alone the default behavior is 'framed'. sub print_form { my %args = @_; $args{title} = $args{title} || 'Digital Certificate Registration'; my $template = HTML::Template->new( cache => 1, filename => $args{template}, die_on_bad_params => 0, ); $template->param( CGI => $cgi, %{ $args{data} }, ); if (not $args{not_framed}) { my $content = $template->output; $template = HTML::Template->new( cache => 1, filename => "$path_templates/base.html", die_on_bad_params => 0, ); $template->param(CONTENT => $content); } $template->param( CGI => $cgi, %{ $args{data} }, user_id => $user_id, ); print_header(); print $template->output; } # Credit Card bare-minimum validation sub cc_verify { my $number = shift; $number =~ s/\D//g; return 0 unless length($number) >= 13 and int($number); my $weight; my $sum = 0; for (my $i = 0; $i < length($number) - 1; $i++) { $weight = substr($number, -1 * ($i + 2), 1) * (2 - ($i % 2)); $sum += (($weight < 10) ? $weight : ($weight - 9)); } if (substr($number, -1) == (10 - $sum % 10) % 10) { return 1; } else { return 0; } } sub cc_exp_verify { my ($cc_exp_mon, $cc_exp_yr) = @_; my ($month, $year) = (localtime)[4,5]; $month++; $year += 1900; if (12 * $year + $month <= 12 * $cc_exp_yr + $cc_exp_mon) { return 1; } else { return 0; } } sub get_cc_years { my $year = 1900 + (localtime)[5]; return ($year .. $year + 5); } sub get_approvers { my $domain = shift; my $request = { action => 'query', object => 'approver', requestor => { username => $OPENSRS{username} }, attributes => { service => 'cert', product_data => { domain => $domain, } } }; my $response = $TPP_Client->send_cmd($request); if (not defined $response or not exists $response->{is_success}) { error_out('Empty or invalid response from server'); exit; } elsif ($response->{is_success} == 0) { error_out($response->{response_text} || 'Unable to get approvers list'); exit; } my $approver_list = $response->{attributes}{product_data}{approver_list}; my (%result, %processed); foreach my $approver (@$approver_list) { # we use %processed hash to filter out duplicate emails in response unless (exists $processed{$approver->{type}.':'.$approver->{email}}) { $processed{$approver->{type}.':'.$approver->{email}} = undef; push @{$result{$approver->{type}}}, $approver->{email}; } } return \%result; } sub populate_contact { my $source = shift; my $type = shift; my %contact = (); my @errors = (); foreach my $field (keys %{$CERT_CONTACT_FIELDS{$type}}) { my $required = $CERT_CONTACT_FIELDS{$type}{$field}; my $value = $source->{$field}; if ($required and not $value) { push @errors, sprintf('%s field of %s contact must be specified', ucfirst $field, ucfirst $type); } my $field_error = 0; if ($value) { $field_error = 1 if ($field eq 'country' and $value !~ /^[a-zA-Z]{2}$/); $field_error = 1 if ($field eq 'email' and not (Email::Valid->rfc822($value) && $value !~ /@[^.]+$/)); $field_error = 1 if ($field eq 'phone' and not OpenSRS::Syntax::PhoneSyntax($value)); $field_error = 1 if ($field eq 'fax' and not OpenSRS::Syntax::PhoneSyntax($value)); push @errors, sprintf('Invalid %s field of %s contact', ucfirst $field, ucfirst $type) if $field_error; if ($field =~ /first_name|last_name|org_name|city|state/) { if ($value !~ /[a-zA-Z]/) { push @errors, sprintf('%s field of %s contact must contain at least 1 alpha character', ucfirst $field, ucfirst $type); } } } $contact{$field} = $value; } return (\%contact, \@errors); } sub validate { my $ok = 0; if ($cookies{$COOKIE_NAME}) { my ($csum, $uid) = split /:/, $cookies{$COOKIE_NAME}; if ($csum) { $ok = compare($csum, $OPENSRS{private_key}, $uid); $user_id = $uid if $ok; } } return $ok; } ########################################################### sub login { my $error_message = shift; my %HTML = (); $HTML{error_message} = $error_message; $HTML{cgi} = $cgi; print_form(template => "$path_templates/login.html", data => \%HTML); } sub do_login { my $result; if (not $in{username} or not $in{password}) { login('Authentication failed.'); return; } if ($in{new_user}) { if ($in{password} ne $in{password1}) { login('Passwords do not match. Please re-enter.'); return; } # create new user $result = $TPP_Client->create_user( $in{username}, $in{password}, $OPENSRS{username} ); } else { # check if user exists $result = $TPP_Client->login_user( $in{username}, $in{password}, $OPENSRS{username} ); } if (not defined $result or not $result->{is_success}) { my $err = sprintf 'Failed to %s user: %s', $in{new_user} ? 'create' : 'authenticate', $result->{response_text} || 'Empty response from server'; login($err); return; } $user_id = $result->{attributes}{user_id}; if (not $user_id) { error_out('Unable to get user ID.'); return; } # sign user_id and set the cooke. my $csum = calculate($OPENSRS{private_key}, $user_id); print_header($COOKIE_NAME => "$csum:$user_id"); main(); } sub logout { # reset global user_id and a cookie $user_id = 0; print_header($COOKIE_NAME => ''); login(); } sub main { if ($in{new_user}) { return primary_contact_form(); } my %HTML = (); $HTML{product_select} = ''; my @products = @CERT_PRODUCTS; while (@products) { my $prod_code = shift @products; my $prod_name = shift @products; $HTML{product_select} .= sprintf "
EOF my $tech_use_contact_info=<Same as Owner Information
EOF my $tech_use_admin_info=<Same as Admin Information
EOF my $if_more_than_one = <If more than one checkbox is selected, 'Owner Information' has precedence over 'Admin Information', and 'Admin Information' has precedence over 'Billing Information'. EOF if ( not $data->{ca_domains} ) { $tech_address .= < *optional* (eg: Suite #245): *optional* Address 3: EOF if ($data->{domain} =~ /(eu|be)$/){ $tech_use_billing_info = ''; $tech_use_admin_info = ''; $if_more_than_one = ''; } } else { $tech_use_billing_info = ''; $tech_use_contact_info = ''; $if_more_than_one = ''; } my $fax_option = $in{ domain } =~ /\.de$/ ? "" : "*optional*"; my $html = < Tech Contact Information $tech_use_contact_info $tech_use_admin_info $tech_use_billing_info $if_more_than_one First Name: Last Name: Organization Name: $tech_address City: State: Country: Postal Code: Phone Number:
(eg. +1.4165551122)* $fax_option Fax Number: Email:
Must be currently valid address EOF if ($data->{domain} =~ /(eu|be)$/){ $html .= < *optional* VAT Registration Number::
Language of Correspondence: EOF } return $html; } sub build_tech_verify { my $data = shift; my $tech_address2 = $data->{tech_address2}; my $tech_address3 = $data->{tech_address3}; my ($tech_vat,$tech_lang); if ($data->{domain} =~ /(eu|be)$/) { $tech_vat= "vat: $data->{tech_vat}
\n"; $tech_lang = "language: $data->{tech_lang}
\n"; } if ($tech_address2) { $tech_address2 .= "
\n" } if ($tech_address3) { $tech_address3 .= "
\n" } my $html = <Tech Contact Information $data->{tech_first_name} $data->{tech_last_name}
$data->{tech_org_name}
$data->{tech_address1}
$tech_address2 $tech_address3 $data->{tech_city}, $data->{tech_state} $data->{tech_postal_code}
$data->{tech_country}
Phone:$data->{tech_phone}
Fax:$data->{tech_fax}
E-mail:$data->{tech_email}
$tech_vat $tech_lang EOF return $html; } sub build_nameservers { my (%fqdns,%nameservers,$key,$num,$fqdn_punycode_obj); my $data = shift; foreach $key (grep /^fqdn\d+$/, keys %$data) { ($num) = $key =~ m/^fqdn(\d+)$/; $fqdns{$num} = $data->{$key}; } my $count = 1; foreach $num (sort keys %fqdns) { $nameservers{"fqdn$count"} = $fqdns{$num}; $count++; } # # We need to get a list of available # my $html = < DNS Information EOF $html .= < Primary DNS Hostname:
EOF $html .= < Secondary DNS Hostname:
EOF $html .= < *optional* Third DNS Hostname:
EOF $html .= < *optional* Fourth DNS Hostname:
EOF $html .= < *optional* Fifth DNS Hostname:
EOF $html .= < *optional* Sixth DNS Hostname:
EOF return $html; } opensrs-client-3.0.0/cgi/register.cgi0000644017777601777760000002506110770014202020607 0ustar nobodynogroup00000000000000#!/usr/bin/perl # .Copyright (C) 1999-2000 TUCOWS.com Inc. # .Created: 11/19/1999 # .Contactid: # .Url: http://www.opensrs.org # .Originally Developed by: # VPOP Technologies, Inc. for Tucows/OpenSRS # .Authors: Joe McDonald, Tom McDonald, Matt Reimer, Brad Hilton, # Daniel Manley # # # This program is free software; you can redistribute it and/or # modify it under the terms of the GNU Lesser General Public # License as published by the Free Software Foundation; either # version 2.1 of the License, 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 # Lesser General Public License for more details. # # You should have received a copy of the GNU Lesser General Public # License along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA use vars qw( %in $cgi $path_templates $XML_Client %actions $action ); ( %in, $cgi, $path_templates, $XML_Client, %actions, $action ) = (); # pull in conf file with defined values # XXX NOTE XXX Update this configuration file BEGIN { $path_to_config = ""; if ($ENV{OSRS_CLIENT_ETC}){ $path_to_config = "$ENV{OSRS_CLIENT_ETC}"; } do "$path_to_config/OpenSRS.conf"; } use CGI ':cgi-lib'; use strict; use lib $PATH_LIB; $path_templates = "$PATH_TEMPLATES/register"; $cgi = $ENV{SCRIPT_NAME}; # Do not make this script publicly accessible if you # are not sure what you are doing. # # This script will by-pass any settings to pend orders. # if ( not $SHOW_REGISTER ) { print "Content-type: text/html\n\n"; error_out("This script is disabled via the flag within the OpenSRS.conf file. Please keep in mind that this script will by-pass your \"pend orders\" setting as set in the RWI. "); exit; } use OpenSRS::XML_Client qw(:default); use OpenSRS::Util::Common qw/locale_build_country_list/; # global defines %in = (); # allowed actions %actions = ( register => undef, register_new => undef, do_register => undef, get_userinfo => undef, ); print "Content-type: text/html\n\n"; # set the debugging level start_up(); # make a client object we will use to talk to the OpenSRS server $XML_Client = new OpenSRS::XML_Client(%OPENSRS); $XML_Client->login; # read in the form data ReadParse(\%in); $action = $in{action}; # no action was passed so use the default if (not $action) { main_menu(); # they passed a valid action } elsif (exists $actions{$action}) { no strict "refs"; &$action(); use strict; # they passed an invalid action } else { main_menu("Invalid action: $action"); } # close the connection to the server $XML_Client->logout; exit; sub start_up { if ($REGISTER{debug}) { # print error to the page select (STDOUT); $| = 1; open (STDERR, ">&STDOUT") or die "Can't dump stdout: $!\n"; select (STDERR); $| = 1; select (STDOUT); } } ########################################################################## sub print_form { my ($content); my ($template,$HTML) = @_; open (FILE, "<$template") or die "Couldn't open $template: $!\n"; while () { s/{{(.*?)}}/$HTML->{$1}/g; $content .= $_; } close FILE; print $content; } sub error_out { my (%HTML); $HTML{CGI} = $cgi; $HTML{ERROR} = shift; print_form("$path_templates/error.html",\%HTML); } #################################################### sub get_content { my $content; my ($template,$HTML) = @_; open (FILE, "<$template") or die "Couldn't open $template: $!\n"; while () { s/{{(.*?)}}/$HTML->{$1}/g; $content .= $_; } close FILE; return $content; } sub fancy_sort { my (@words,@ints); my @list = @_; foreach (@list) { if ($_ =~ /^\d+$/) { push @ints, $_; } else { push @words, $_; } } @words = sort @words; @ints = sort { $a <=> $b } @ints; return (@ints,@words); } sub build_select_menu { my ($key,$html); my $href = shift; my $default = shift; foreach $key (fancy_sort(keys %$href)) { if ($key eq $default) { $html .= < $href->{$key} EOF } else { $html .= < $href->{$key} EOF } } return $html; } sub escape_hash_values { my $hash_ref = shift; foreach my $hash_key ( keys %$hash_ref ) { if ( ref( $hash_ref->{$hash_key} ) eq "HASH" ) { escape_hash_values( $hash_ref->{$hash_key} ); } elsif ( ref( $hash_ref->{$hash_key} ) eq "ARRAY" ) { escape_array_values( $hash_ref->{$hash_key} ); } else { $hash_ref->{$hash_key} = escape( $hash_ref->{$hash_key} ); } } } sub escape_array_values { my $array_ref = shift; foreach my $array_element ( @$array_ref ) { if ( ref( $array_element ) eq "HASH" ) { escape_hash_values( $array_element ); } elsif ( ref( $array_element ) eq "ARRAY" ) { escape_array_values( $array_element ); } else { $array_element = escape( $array_element ); } } } sub escape { my $string = shift; $string =~ s/\"/"/g; return $string; } ###################################################### ## sub main_menu { my (%HTML); $HTML{CGI} = $cgi; print_form("$path_templates/main_menu.html",\%HTML); } sub register_new { my (%HTML); $HTML{CGI} = $cgi; $HTML{PERIOD_LIST} = build_select_menu(\%REG_PERIODS,1); $HTML{ADMIN_COUNTRY_LIST} = locale_build_country_list(); $HTML{BILLING_COUNTRY_LIST} = $HTML{ADMIN_COUNTRY_LIST}; $HTML{TECH_COUNTRY_LIST} = $HTML{ADMIN_COUNTRY_LIST}; $HTML{OWNER_COUNTRY_LIST} = $HTML{ADMIN_COUNTRY_LIST}; print_form("$path_templates/register_new.html",\%HTML); } sub do_register { my (%HTML,$error,$field,$xcp_request); my $form_data = {%in}; my $f_new_profile = $in{f_new_profile}; my $reg_username = $in{reg_username}; my $reg_password = $in{reg_password}; my $reg_password2 = $in{reg_password2}; if ($f_new_profile) { if ($reg_password ne $reg_password2) { error_out("Password mismatch.
\n"); exit; } } my @contact_fields = qw( first_name last_name org_name address1 address2 address3 city state postal_code country phone fax email url ); # if they chose these flags, assign the admin contact data to the others my $billing_same_as_admin = $in{billing_same_as_admin}; my $tech_same_as_admin = $in{tech_same_as_admin}; foreach $field (@contact_fields) { $form_data->{contact_set}->{owner}->{$field} = $form_data->{"owner_$field"}; delete $form_data->{"owner_$field"}; $form_data->{contact_set}->{admin}->{$field} = $form_data->{"admin_$field"}; delete $form_data->{"admin_$field"}; $form_data->{contact_set}->{billing}->{$field} = $form_data->{"billing_$field"}; delete $form_data->{"billing_$field"}; $form_data->{contact_set}->{tech}->{$field} = $form_data->{"tech_$field"}; delete $form_data->{"tech_$field"}; } # assign the admin data to billing if ($billing_same_as_admin) { $form_data->{contact_set}->{billing} = $form_data->{contact_set}->{admin} } # assign the admin data to tech if ($tech_same_as_admin) { $form_data->{contact_set}->{tech} = $form_data->{contact_set}->{admin} } $form_data->{nameserver_list} = []; my $sortorder = 1; foreach my $fqdn ( grep /^fqdn\d+$/, sort keys %{$form_data} ) { my $name = $form_data->{$fqdn}; if ( defined $name ) { push @{$form_data->{nameserver_list}}, { name => $name, sortorder => $sortorder }; delete $form_data->{$fqdn}; $sortorder++; } } $form_data->{custom_nameservers} = ''; $xcp_request = { action => "register", object => "domain", attributes => $form_data, }; my $response = $XML_Client->send_cmd( $xcp_request ); if (not $response->{is_success}) { $error = "Failed registration: $response->{response_text}.
\n"; if ($response->{attributes}->{error}) { $response->{attributes}->{error} =~ s/\n/
\n/g; $error .= $response->{attributes}->{error}; } error_out($error); exit; } $HTML{MESSAGE} = "Domain $in{domain} successfully registered.
\n"; print_form("$path_templates/do_register.html",\%HTML); } sub get_userinfo { my $reg_username = $in{username}; my $reg_password = $in{password}; my $reg_domain = $in{domain}; my %HTML; my $xcp_request = { action => "get", object => "domain", attributes => { type => "all_info", reg_username => $reg_username, reg_password => $reg_password, domain => $reg_domain, } }; my $response = $XML_Client->send_cmd( $xcp_request ); if (not $response->{is_success}) { error_out("Failed attempt: $response->{response_text}"); exit; } # process this through escape() to account for " and ' in the data escape_hash_values( $response ); # # now have to convert object format into denormalized format # foreach my $typeKey ( keys %{$response->{attributes}->{contact_set}} ) { foreach my $dataKey ( keys %{$response->{attributes}->{contact_set}->{$typeKey}} ) { $HTML{$typeKey."_".$dataKey} = $response->{attributes}->{contact_set}->{$typeKey}->{$dataKey}; } } delete $response->{attributes}->{contact_set}; my $fqdnCounter = 1; foreach my $nameserver ( @{$response->{attributes}->{nameserver_list}} ) { $HTML{"fqdn".$fqdnCounter} = $nameserver->{name}; $fqdnCounter++; } delete $response->{attributes}->{nameserver_list}; foreach my $attrKey ( keys %{$response->{attributes}} ) { $HTML{$attrKey} = $response->{attributes}->{$attrKey}; } $HTML{CGI} = $cgi; $HTML{reg_username} = $reg_username; $HTML{reg_password} = $reg_password; $HTML{reg_domain} = $reg_domain; $HTML{PERIOD_LIST} = build_select_menu(\%REG_PERIODS,1); $HTML{OWNER_COUNTRY_LIST} = locale_build_country_list($HTML{owner_country}); $HTML{ADMIN_COUNTRY_LIST} = locale_build_country_list($HTML{admin_country}); $HTML{BILLING_COUNTRY_LIST} = locale_build_country_list($HTML{billing_country}); $HTML{TECH_COUNTRY_LIST} = locale_build_country_list($HTML{tech_country}); print_form("$path_templates/register.html",\%HTML); } opensrs-client-3.0.0/cgi/renew.cgi0000755017777601777760000005306110770014202020107 0ustar nobodynogroup00000000000000#!/usr/bin/perl #$Id: renew.cgi,v 1.41 2006/11/22 22:17:27 sbelikov Exp $ # vi: set tabstop=4: # .Copyright (C) 1999-2000 TUCOWS.com Inc. # .Created: 11/19/2000 # .Contactid: # .Url: http://www.opensrs.org # .Developed by: TUCOWS.com Inc. for OpenSRS.com # .Written by: John Jerkovic, Vlad Jebelev # # This program is free software; you can redistribute it and/or # modify it under the terms of the GNU Lesser General Public # License as published by the Free Software Foundation; either # version 2.1 of the License, 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 # Lesser General Public License for more details. # # You should have received a copy of the GNU Lesser General Public # License along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA use vars qw( %in %contact_types %actions $XML_Client %cookies $action $authentication $cgi $path_templates $flag_header_sent $reg_username $reg_password $reg_domain $cookie $domain_count $reg_permission $reg_f_owner $expiredate $last_access_time $last_ip %contact_keys $waiting_request $domain_info $whois_privacy_state $COOKIE_KEY $affiliate_id $path_to_config %unauthenticated_actions ); ( %in, %contact_types, %actions, $XML_Client, %cookies, $action, $authentication, $cgi, $path_templates, $flag_header_sent, $reg_username, $reg_password, $reg_domain, $cookie, $domain_count, $reg_permission, $reg_f_owner, $expiredate, $last_access_time, $last_ip, %contact_keys, $waiting_request, $domain_info, $whois_privacy_state ) = (); # pull in conf file with defined values # XXX NOTE XXX Update this configuration file BEGIN { $path_to_config = ""; if ($ENV{OSRS_CLIENT_ETC}){ $path_to_config = "$ENV{OSRS_CLIENT_ETC}"; } do "$path_to_config/OpenSRS.conf"; } use lib $PATH_LIB; use OpenSRS::Util::ConfigJar "$path_to_config/OpenSRS.conf"; use strict; use Time::Local; use CGI ':cgi-lib'; use OpenSRS::XML_Client qw(:default); use OpenSRS::Util::Common qw(send_email); use Data::Dumper; # initialize global defines $cgi = $ENV{SCRIPT_NAME}; $path_templates = "$PATH_TEMPLATES/renew"; $COOKIE_KEY = $TEST_SERVER?"REGISTRANT_KEY":"REGISTRANT_LIVE_KEY"; $waiting_request = ""; # allowed actions %actions = ( renew_domain => \&renew_domain, send_password => undef, ); %unauthenticated_actions = ( send_password => undef, ); start_up(); # make a client object we will use to talk to the OpenSRS server $XML_Client = new OpenSRS::XML_Client(%OPENSRS); $XML_Client->login; # read in the form data ReadParse(\%in); %cookies = GetCookies(); $action = $in{action}; #----------------------------------------------------- # perform necessary actions # a few actions are allowed without authentication. if ( $action and exists $unauthenticated_actions{$action} ) { no strict 'refs'; &$action(); exit; } $affiliate_id = $in{ affiliate_id }; #----------------------------------------------------- # perform necessary actions # if they have specified 'login', bypass validate(), and do login() if ($action eq 'login') { login(); exit } elsif ($action eq 'logout') {logout(); exit } # for all other actions, do validate() (grab cookie if it exists) $authentication = validate(); # show them the login page if they don't have a valid cookie if (not $authentication) { show_login(); # they asked for a valid action } elsif ($authentication and exists $actions{$action}) { &{$actions{ $action }}(); # they gave us an invalid command } else { show_login(); } # close the connection to the server $XML_Client->logout; exit; ####################### START OF SUBS ############################## sub start_up { if ($REGISTER{debug}) { # print error to the page select (STDOUT); $| = 1; open (STDERR, ">&STDOUT") or die "Can't dump stdout: $!\n"; select (STDERR); $| = 1; select (STDOUT); } } sub print_form { my ($content); my ($template,$HTML) = @_; print_header(); open (FILE, "<$template") or die "Couldn't open $template: $!\n"; while () { s/{{(.*?)}}/$HTML->{$1}/g; $content .= $_; } close FILE; print $content; } sub error_out { my ( $error_msg, $domain ) = @_; my (%HTML); $HTML{CGI} = $cgi; $HTML{ERROR} = $error_msg; $HTML{SHOW_PASS} = ""; if ( defined $domain and defined $RENEW{allow_password_requests} and $RENEW{allow_password_requests} ) { $domain = $domain; if ( $RENEW{password_send_to_admin} ) { $HTML{SHOW_PASS} = qq(Click here to have lost password sent to admin.); if ($RENEW{password_send_subuser}){ $HTML{SHOW_PASS} .= qq(
Click here to have subuser lost password sent to admin.); } } if ( $RENEW{password_send_to_owner} ) { $HTML{SHOW_PASS} .= qq(
Click here to have lost password sent to owner.); if ($RENEW{password_send_subuser}){ $HTML{SHOW_PASS} .= qq(
Click here to have subuser lost password sent to owner.); } } } print_form("$path_templates/error.html",\%HTML); } sub get_content { my $content; my ($template,$HTML) = @_; open (FILE, "<$template") or die "Couldn't open $template: $!\n"; while () { s/{{(.*?)}}/$HTML->{$1}/g; $content .= $_; } close FILE; return $content; } sub fancy_sort { my (@words,@ints); my @list = @_; foreach (@list) { if ($_ =~ /^\d+$/) { push @ints, $_; } else { push @words, $_; } } @words = sort @words; @ints = sort { $a <=> $b } @ints; return (@ints,@words); } sub build_select_menu { my ($key,$html); my $href = shift; my $default = shift; foreach $key (fancy_sort(keys %$href)) { if ($key eq $default) { $html .= < $href->{$key} EOF } else { $html .= < $href->{$key} EOF } } return $html; } ######################################################## sub escape_hash_values { my $hash_ref = shift; foreach my $hash_key ( keys %$hash_ref ) { if ( ref( $hash_ref->{$hash_key} ) eq "HASH" ) { escape_hash_values( $hash_ref->{$hash_key} ); } elsif ( ref( $hash_ref->{$hash_key} ) eq "ARRAY" ) { escape_array_values( $hash_ref->{$hash_key} ); } else { $hash_ref->{$hash_key} = escape( $hash_ref->{$hash_key} ); } } } sub escape_array_values { my $array_ref = shift; foreach my $array_element ( @$array_ref ) { if ( ref( $array_element ) eq "HASH" ) { escape_hash_values( $array_element ); } elsif ( ref( $array_element ) eq "ARRAY" ) { escape_array_values( $array_element ); } else { $array_element = escape( $array_element ); } } } sub escape { my $string = shift; $string =~ s/\"/"/g; return $string; } # attempt to validate a user's cookie sub validate { my ($expire,$response); $reg_username = ""; if (exists $cookies{$COOKIE_KEY}) { $cookie = $cookies{$COOKIE_KEY}; my $xcp_request = { action => "get", object => "userinfo", cookie => $cookie, }; $response = $XML_Client->send_cmd( $xcp_request ); if (not $response->{is_success}) { return undef; } $reg_username = $response->{attributes}->{reg_username}; $reg_domain = $response->{attributes}->{domain}; $reg_f_owner = $response->{attributes}->{f_owner}; $reg_permission = $response->{attributes}->{permission}; $domain_count = $response->{attributes}->{domain_count}; $expiredate = $response->{attributes}->{expiredate}; $waiting_request = $response->{attributes}->{waiting_request}; return 1; } else { return undef; } } # get cookies from the client sub GetCookies { my ($cookie, %cookies,$key,$value); foreach $cookie (split /\; /, $ENV{HTTP_COOKIE}) { ($key, $value) = (split /=/, $cookie)[0,1]; $value =~ s/\\0/\n/g; $cookies{$key} = $value; } return %cookies; } # get all info on this domain. Remember: you are only getting info on one # domain (the one you specified in 'set_cookie' call). If you want info # on other domains, either switch the cookie to other domains ('update_cookie') # or get a list of domains ('get_domain' with 'type => list') and use its # ext_results data sub get_domain_info { my ( $domain_name, $cookie ) = @_; my $xcp_req = { action => "get", object => "domain", cookie => $cookie, attributes => { type => "all_info" } }; return $XML_Client->send_cmd( $xcp_req ); } sub get_whois_privacy_state { my ($domain_name, $cookie) = @_; my $xcp_rsp; my $xcp_req = { action => "get", object => "domain", cookie => $cookie, attributes => { type => "whois_privacy_state", } }; return $XML_Client->send_cmd( $xcp_req ); } sub renew_domain { my (%HTML); my $apply_to_all = "Not processed"; # set initial steps results $HTML{affiliate_id} = $affiliate_id; $HTML{step1_res} = $HTML{step2_res} = $HTML{step3_res} = "Not processed"; $reg_domain = $in{reg_domain}; # data to set my $affect_domains = $in{ affect_domains } eq 'on' ? 1 : 0; my $period = $in{ renewal_period }; my $auto_renew = $in{ auto_renew } eq 'on' ? 1 : 0; my $renew_ok = 0; $HTML{auto_renew} = $auto_renew; $HTML{orig_domain} = $reg_domain; $HTML{idn_link} .= $reg_domain =~ /^xn--/ ? "[IDN]" : ''; PROCESS: { # step 1: get domain info (API: 'get_domain', type: 'all_info' ). $domain_info = get_domain_info( $reg_domain, $cookie ); $HTML{step1_text} = $domain_info->{ response_text }; if (not $domain_info->{is_success}) { $HTML{step1_res} = "Failed attempt!"; last PROCESS; } #for .CA use admin contacts because they do not have owner contacts if ($reg_domain =~ /\.ca$/){ $HTML{step1_owner} = $domain_info->{attributes}{contact_set}{admin}{email}; $HTML{step1_first_name} = $domain_info->{attributes}{contact_set}{admin}{first_name}; }else{ $HTML{step1_owner} = $domain_info->{attributes}{contact_set}{owner}{email}; $HTML{step1_first_name} = $domain_info->{attributes}{contact_set}{owner}{first_name}; } $HTML{step1_res} = "Success!"; $HTML{step1_expiredate} = $domain_info->{attributes}{ expiredate }; $HTML{step1_auto_renew} = $domain_info->{attributes}{ auto_renew }; # step 2: renew domain (API: 'renew_domain' ) my ($year, undef) = split('-',$domain_info->{ attributes }{ expiredate }); my $xcp_req = { action => 'renew', object => 'domain', attributes => { # Uncomment one of the string or pass a specific value of parameter # If not passed or value not save|process then settings # from RSP profile will be used # handle => 'save', #save order only regardless RSP settings # handle => 'process', #process order always regardless RSP settings domain => $reg_domain, currentexpirationyear => $year, period => $period, auto_renew => $auto_renew, affiliate_id => $affiliate_id, }, }; my $res = $XML_Client->send_cmd( $xcp_req ); $HTML{step2_text} = $res->{ response_text }; $HTML{step2_success} = $res->{is_success} ? "Successful" : "Fail"; if (not $res->{is_success}) { if ( $F_QUEUE_SUPPLIER_UNAVAILABLE and $res->{attributes}{queue_request_id} ){ $HTML{step2_text} = "Renewal Request has been placed in a registrar's queue"; $HTML{step2_success} = "Queued"; $renew_ok = 1; #last or next is up to RSP and his customization if (not $RENEW{PROCESS_LIST_IF_QUEUED}){ last PROCESS; } } else { $HTML{step2_res} = "Failed attempt!"; $HTML{step2_auto_renew} = $HTML{step1_auto_renew}; $HTML{step2_expiredate} = $HTML{step1_expiredate}; last PROCESS; } } else { $renew_ok = 1; } $HTML{step2_res} = "Success!"; $HTML{step2_auto_renew} = $res->{attributes}{ auto_renew }; $HTML{step2_order_id} = $res->{attributes}{ order_id }; # get new expiration year from the result $HTML{step2_expiredate} = $res->{ attributes }{ 'registration expiration date' }; # step 3: apply auto_renew to all domains in the profile - # only if 'affected_domains' checkbox was checked # ( API: 'modify_domain', with data: 'auto_renew' ) if ( not $affect_domains ) { $HTML{step3_res} = $apply_to_all = "Not requested by user"; last PROCESS; } $xcp_req = { action => "modify", object => "domain", cookie => $cookie, attributes => { data => "expire_action", auto_renew => $auto_renew, let_expire => 0, affect_domains => 1, } }; $res = $XML_Client->send_cmd( $xcp_req ); $HTML{step3_text} = $res->{ response_text }; if (not $res->{is_success}) { $apply_to_all = "Failed: $res->{response_text}"; $HTML{step3_res} = "Fail!"; last PROCESS; } $apply_to_all = "Successfully Set"; $HTML{step3_res} = "Success!"; # modify_domain doesn't echo info back, so rely on 'is_success' attr $HTML{step3_auto_renew} = $auto_renew; } send_email ( "$path_templates/renew.txt", { domain => $reg_domain, success => $HTML{step2_success}, message => $HTML{step2_text}, mailfrom => $HTML{step1_owner}, mailto => $RENEW_EMAIL, old_expiry => $HTML{step1_expiredate}, old_auto_renew => $HTML{step1_auto_renew}, new_expiry => $HTML{step2_expiredate}, new_auto_renew => $HTML{step2_auto_renew}, apply_to_all => $apply_to_all, affiliate_id => $affiliate_id, order_id => $HTML{step2_order_id}, }, ) if $RENEW{F_SEND_EMAIL}; send_email ( "$path_templates/thankyou.txt", { mailfrom => $RENEW_EMAIL, mailto => $HTML{step1_owner}, domain => $reg_domain, first_name => $HTML{step1_first_name}, num_years => $period, order_id => $HTML{step2_order_id}, affiliate_id=> $affiliate_id, }, ) if $RENEW{F_SEND_EU_EMAIL} and $renew_ok; print_form("$path_templates/renewal_results.html",\%HTML); } # authenticate user sub login { my $message = shift; $reg_username = $in{reg_username}; $reg_password = $in{reg_password}; $in{reg_domain} =~ s/^\s+//; $in{reg_domain} =~ s/\s+$//; $reg_domain = $in{reg_domain}; if ( not $in{reg_domain} ) { error_out("Please enter a domain name."); exit; } if ( $in{reg_domain} =~ /\s/ ) { error_out("Spaces not allowed inside domain name [$in{reg_domain}]."); exit; } if ( $in{reg_domain} =~ /[^A-Za-z0-9\.\-]/ ) { error_out( "It seems that $in{reg_domain} is an IDN domain.
". " Please convert". " to Punycode first" ); exit; } if ( not is_capable( $reg_domain )) { error_out(" Renew functionality is not currently enabled for $reg_domain.

Please contact your Registration Services Provider for further assistance."); exit; } # get permissions for a given user my $xcp_request = { action => "set", object => "cookie", attributes => { domain => $reg_domain, reg_username => $reg_username, reg_password => $reg_password, } }; my $response = $XML_Client->send_cmd( $xcp_request ); if (not $response->{is_success}) { my $error; if ( $response->{response_code} == 415 ) { # bad un/pw $error = "Error: Invalid username/password combination for $reg_domain.

"; $response->{response_text} =~ s/\n/
\n/g; $error .= $response->{response_text}; error_out( $error, $reg_domain ); exit; } else { # any other error $error = "$response->{response_text}
Please contact Support for assistance."; error_out( $error ); exit; } } $cookie = $response->{attributes}->{cookie}; $expiredate = $response->{attributes}->{expiredate}; if (not $cookie) { error_out("Invalid username/password given.
\n"); exit; } my $path = ""; print "Content-type: text/html\r\n"; print "Set-Cookie: $COOKIE_KEY=$cookie; PATH=$path\r\n"; print "\r\n"; $flag_header_sent = 1; # get whois_privacy_state my $whois_privacy = get_whois_privacy_state($reg_domain, $cookie); $whois_privacy_state = ($whois_privacy->{attributes}->{state} eq "enabled") ? "Yes" : "No"; # get domain info $domain_info = get_domain_info( $reg_domain, $cookie ); if (not $domain_info->{is_success}) { error_out("Failed attempt: $domain_info->{response_text}\n"); exit; } # domain used to login with must be one sponsored by this reseller if ( not $domain_info->{ attributes }{ sponsoring_rsp } ) { error_out( "This domain is not sponsored by this domain provider, and cannot be renewed/autorenewed from this interface." ); exit; } main_menu($cgi); } ############################################################################# # logout user (delete cookie) sub logout { my ($cookie, $response); if (exists($cookies{$COOKIE_KEY})) { $cookie = $cookies{$COOKIE_KEY}; my $xcp_request = { action => "delete", object => "cookie", cookie => $cookie, attributes => { cookie => $cookie, } }; $response = $XML_Client->send_cmd( $xcp_request ); } show_login(); } sub show_login { my $message = shift; my (%HTML); $HTML{MESSAGE} = $message; $HTML{CGI} = $cgi; $HTML{affiliate_id} = $affiliate_id; if ( defined $message and $message ) { $HTML{MESSAGE} = qq($message

); } print_form("$path_templates/login.html",\%HTML,'single'); } sub main_menu { my (%HTML); $HTML{CGI} = $cgi; $HTML{reg_domain} = $reg_domain; $HTML{orig_domain} = $reg_domain; $HTML{idn_link} .= $reg_domain =~ /^xn--/ ? "[IDN]" : ''; $HTML{affiliate_id} = $affiliate_id; $HTML{expiredate} = $domain_info->{ attributes }{ expiredate }; $HTML{auto_renew} = $domain_info->{ attributes }{ auto_renew } ? 'CHECKED' : ''; $HTML{whois_privacy_state} = $whois_privacy_state; my ( $tld ) = $reg_domain =~ m/$OPENSRS_TLDS_REGEX$/i; if ($tld eq '.name') { $HTML{forwarding_email} = $domain_info->{ attributes }{ forwarding_email } ? $domain_info->{ attributes }{ forwarding_email } : 'n/a'; print_form("$path_templates/renew_domain_menu_name.html",\%HTML,'single'); } else { print_form("$path_templates/renew_domain_menu.html",\%HTML,'single'); } } ########################################################################### # print a html header sub print_header { if (not $flag_header_sent) { print "Content-Type: text/html\r\n\r\n"; $flag_header_sent = 1; } } # function to check whether a given operation applies to a domain sub is_capable { my ( $domain_name ) = @_; my $is_it; my $caps = $RENEW{capability}; foreach my $tld ( keys %$caps ) { next unless $caps->{ $tld }; if ( $domain_name =~ /$tld$/i ) { $is_it = 1; last; } } return $is_it; } sub send_password { if ( not exists $RENEW{allow_password_requests} or not $RENEW{allow_password_requests} ) { show_login("Invalid action: $action"); exit; } my $domain = $in{domain}; $domain =~ s/^\s+|\s+$//g; if ( not $domain ) { error_out( "No domain specified"); exit; } my $xcp_request = { action => 'send_password', object => 'domain', attributes => { domain_name => $domain, send_to => $in{user}, sub_user => ($in{subuser} and $RENEW{password_send_subuser}) ? 1 : 0, } }; my $response = $XML_Client->send_cmd( $xcp_request ); if ( $response->{is_success} ) { show_login( "Password has been sent." ); } else { error_out("Couldn't send password: $response->{response_text}\n"); exit; } } opensrs-client-3.0.0/cgi/tpp_renew.cgi0000755017777601777760000002146610770014202020776 0ustar nobodynogroup00000000000000#!/usr/bin/perl # .Copyright (C) 2002 TUCOWS.com Inc. # .Created: 2002/11/11 # .Contactid: # .Url: http://opensrs.org # # This program is free software; you can redistribute it and/or # modify it under the terms of the GNU Lesser General Public # License as published by the Free Software Foundation; either # version 2.1 of the License, 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 # Lesser General Public License for more details. # # You should have received a copy of the GNU Lesser General Public # License along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place, Suite 330, Boston, # MA 02111-1307 USA # $Id: tpp_renew.cgi,v 1.6 2004/01/13 21:29:36 epirogov Exp $ use vars qw( %in $cgi $path_templates %actions $action %cc_types $TPP_Client %contact_keys %data @cc_types %CERT_CONTACT_FIELDS $COOKIE_NAME %cookies $flag_header_sent $user_id ); # Null these things out for mod_perl users (%in, $cgi, $path_templates, %actions, $action, %cc_types, @cc_types, $TPP_Client, %contact_keys, %data) = (); # pull in conf file with defined values BEGIN { # first "do" the major config file do "/OpenSRS.conf"; # now load up the config for Certificate service do "/Renewals.conf"; } use strict; use lib $PATH_LIB; use CGI ':cgi-lib'; use HTML::Template; use Core::Exception; use Core::Checksum qw(calculate compare); use OpenSRS::TPP_Client; use OpenSRS::ResponseConverter; use OpenSRS::Util::Common qw(build_select_menu build_select_menu3 build_country_list CODE_2_Country); # global defines $user_id = undef; $cgi = $ENV{SCRIPT_NAME}; $COOKIE_NAME = "OPENSRS_TPP_CLIENT"; $flag_header_sent = 0; $path_templates = "$PATH_TEMPLATES/tpp_renew"; %in = (); # list of valid actions to execute %actions = ( login => undef, do_login => undef, logout => undef, main => undef, check_renew => undef, renew => undef, ); # start things up start_up(); # create a client object which we will use to connect to the Tucows server $TPP_Client = new OpenSRS::TPP_Client( %OPENSRS, response_converter => new OpenSRS::ResponseConverter(), ); $TPP_Client->login; # read in the form data ReadParse(\%in); delete $in{error_message}; %cookies = GetCookies(); $action = $in{action}; # perform necessary action if (not $action) { # if action was supplied, use the defaults validate() ? main() : login(); } elsif (exists $actions{$action}) { # they passed a valid action if (($action eq 'do_login') or validate()) { no strict "refs"; &$action(); use strict; } else { login(); } } else { # they passed an invalid action error_out("Invalid action: $action"); } # close connection to the server $TPP_Client->logout; exit; ########################################################### sub start_up { if ($RENEWALS{debug}) { # print error to the page select (STDOUT); $| = 1; open (STDERR, ">&STDOUT") or die "Can't dump stdout: $!\n"; select (STDERR); $| = 1; select (STDOUT); } OpenSRS::Util::Common::initialize( path_templates => $PATH_TEMPLATES, mail_settings => \%MAIL_SETTINGS ); } # get cookies from the client sub GetCookies { my %cookies = (); foreach my $cookie (split /\; /, $ENV{HTTP_COOKIE}) { my ($key, $value) = (split /=/, $cookie)[0,1]; $value =~ s/\\0/\n/g; $cookies{$key} = $value; } return %cookies; } sub error_out { my %HTML = (ERROR => shift); print_form(template => "$path_templates/error.html", data => \%HTML); } # print html header sub print_header { my %cookies = @_; return if $flag_header_sent; print "Content-type: text/html\n"; foreach my $key (keys %cookies) { printf "Set-Cookie: %s=%s; PATH=;\n", $key, $cookies{$key}; } print "\n"; $flag_header_sent = 1; } # Substitute values on the specified template and print it to the client an # optional 'type' arg can be passed: 'framed' specifies to pull in base.html # as the outer frame and the given template as the inner frame 'single' # specifies to use the given template alone the default behavior is 'framed'. sub print_form { my %args = @_; $args{title} = $args{title} || 'Renewal Management'; my $template = HTML::Template->new( cache => 1, filename => $args{template}, die_on_bad_params => 0, ); $template->param( CGI => $cgi, %{ $args{data} }, ); if (not $args{not_framed}) { my $content = $template->output; $template = HTML::Template->new( cache => 1, filename => "$path_templates/base.html", die_on_bad_params => 0, ); $template->param(CONTENT => $content); } $template->param( CGI => $cgi, %{ $args{data} }, user_id => $user_id, ); print_header(); print $template->output; } sub validate { my $ok = 0; if ($cookies{$COOKIE_NAME}) { my ($csum, $uid) = split /:/, $cookies{$COOKIE_NAME}; if ($csum) { $ok = compare($csum, $OPENSRS{private_key}, $uid); $user_id = $uid if $ok; } } return $ok; } ########################################################### sub login { my $error_message = shift; my %HTML = (); $HTML{error_message} = $error_message; $HTML{cgi} = $cgi; print_form(template => "$path_templates/login.html", data => \%HTML); } sub logout { # reset global user_id and a cookie $user_id = 0; print_header($COOKIE_NAME => ''); login(); } sub do_login { if (not $in{username} or not $in{password}) { login('Authentication failed.'); return; } my $result = $TPP_Client->login_user( $in{username}, $in{password}, $OPENSRS{username} ); if (not defined $result or not $result->{is_success}) { login('Authentication failed.'); return; } $user_id = $result->{attributes}{user_id}; if (not $user_id) { error_out('Unable to get user information.'); return; } my $csum = calculate($OPENSRS{private_key}, $user_id); print_header($COOKIE_NAME => "$csum:$user_id"); main(); } sub main { my %HTML = (); my $items = $TPP_Client->get_renewable_items( user_id => $user_id, requestor => $OPENSRS{username}, days_before_expiry => $RENEWALS{cert}{days_before_expiry}, days_after_expiry => $RENEWALS{cert}{days_after_expiry}, ); my $counter = 0; foreach my $item (@{$items}) { # XXX FIXME - we currently support certs' renewal only if ($item->{service} ne 'cert' or $item->{state} !~ /^(active|renewal_in_progress)$/) { # mark item for later removal $item->{inventory_item_id} = undef; next; } $item->{even} = $counter++ % 2; $item->{active} = $item->{state} eq 'active' ? 1 : 0; $item->{state} =~ s/_/ /g; $item->{state} = ucfirst $item->{state}; $item->{description} = 'N/A' unless $item->{description}; $item->{service} = ucfirst $item->{service}; $item->{object_type} = ucfirst $item->{object_type}; $item->{show_renewal_settings} = $RENEWALS{show_renewal_settings}; $item->{renewal_ctrl} = $item->{renewal_ctl_mask} == 0 ? 'Let Expire' : $item->{renewal_ctl_mask} == 1 ? 'Normal' : 'Auto Renew'; } # remove marked items $items = [ grep { defined $_->{inventory_item_id} } @{$items} ]; $HTML{show_renewal_settings} = $RENEWALS{show_renewal_settings}; $HTML{items} = $items; $HTML{total} = scalar @{$items}; print_form(template => "$path_templates/main.html", data => \%HTML); } sub check_renew { my %HTML = (); my $item = $TPP_Client->get_item( id => $in{id}, requestor => $OPENSRS{username}, ); if (not $item or $item->{user_id} != $user_id) { error_out('Cannot find Inventory item ID #' . $in{id}); return; } my $service = $item->{service}; if (not exists $RENEWALS{$service} or not $RENEWALS{$service}{enabled}) { error_out( 'Product Item ID #' . $in{id} . ' cannot be renewed: ' . $service . ' service is not configured or disabled.' ); return; } elsif ($item->{state} ne 'active') { error_out( 'Product Item ID #' . $in{id} . ' cannot be renewed: ' . 'item is not active.' ); return; } if ($RENEWALS{$service}{renew_url}) { # if defined external cgi for renewal processing - # re-direct request to its renew action along with # item's id. printf "Location: %s?action=renew&id=%d\n\n", $RENEWALS{$service}{renew_url}, $in{id}; return; } } # default renew action sub renew { error_out('Default renew action is not implemented'); } opensrs-client-3.0.0/cgi/tpp_renew.css0000644017777601777760000000043210770014202021007 0ustar nobodynogroup00000000000000 opensrs-client-3.0.0/cgi/verify_install.cgi0000755017777601777760000004567210770014202022032 0ustar nobodynogroup00000000000000#!/usr/bin/perl # .Copyright (C) 1999-2000 TUCOWS.com Inc. # .Created: 01/13/2000 # .Contactid: # .Url: http://www.opensrs.org # .Originally Developed by: # VPOP Technologies, Inc. for Tucows/OpenSRS # .Authors: Joe McDonald, Tom McDonald, Matt Reimer, Brad Hilton, # Daniel Manley, Mark # # # This program is free software; you can redistribute it and/or # modify it under the terms of the GNU Lesser General Public # License as published by the Free Software Foundation; either # version 2.1 of the License, 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 # Lesser General Public License for more details. # # You should have received a copy of the GNU Lesser General Public # License along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA use strict; use vars qw($shell $cipher @modules $optional); ( $shell, $cipher ) = (); # pull in conf file with defined values # XXX NOTE XXX Update this configuration file BEGIN { if ($ENV{OSRS_CLIENT_ETC}){ do "$ENV{OSRS_CLIENT_ETC}/OpenSRS.conf"; } else { do "/OpenSRS.conf"; } } use lib $PATH_LIB; use Config; use IO::Socket; # global defines $shell = 0; $cipher = ""; $optional = 0; # list of modules to check for existence of. No need to check for standard # modules, or ones that are included in the client code distribution. my @CBC_modules = qw( Digest::MD5 Unicode::String Storable Data::Dumper HTML::Template XML::Parser ); if ($] >= 5.008) { push @CBC_modules => "Crypt::CBC"; } else { push @CBC_modules => "CBC"; } my @HTTPS_modules = qw( Digest::MD5 Unicode::String Storable Data::Dumper HTML::Template XML::Parser LWP::UserAgent LWP::Protocol::https HTTP::Request::Common ); my @LibIDN_modules = qw(Net::LibIDN); my @Date_modules = qw(Date::Calc); # common start_up(); check_settings(); # get connection type my $connection_type = $OPENSRS{connection_type}; my $oposite_type = $OPENSRS{connection_type} eq 'HTTPS' ? 'CBC' : 'HTTPS'; @modules = $connection_type eq 'HTTPS' ? @HTTPS_modules : @CBC_modules; check_modules($connection_type); check_osrs_modules(); $connection_type eq 'HTTPS' ? check_login_https() : check_login(); shut_down(); start_optional(); @modules = $oposite_type eq 'HTTPS' ? @HTTPS_modules : @CBC_modules; check_modules($oposite_type); check_osrs_modules(); $oposite_type eq 'HTTPS' ? check_login_https() : check_login(); @modules = @LibIDN_modules; start_idn(); check_modules('IDN'); check_osrs_idn(); @modules = @Date_modules; start_date(); check_modules('Date::Calc'); shut_down(); exit; sub start_up { if (not $ENV{SCRIPT_NAME}) { $shell = 1; print "\n_________OpenSRS Client Debugger__________\n\n"; } else { print "Content-type: text/html\n\n"; print <

OpenSRS Client Debugger

EOF print_th('Client Software Configuration'); } # print error to the page select (STDOUT); $| = 1; open (STDERR, ">&STDOUT") or die "Can't dump stdout: $!\n"; select (STDERR); $| = 1; select (STDOUT); } sub shut_down { if (not $shell) { print < EOF } } sub start_optional { $optional = 1; my $msg1 = "This test will check the requirements for the connection type other than the one currently selected."; my $msg2 = "It is provided to indicate your readiness to switch between different connection types."; my $msg3 = "The failure at any point of this test does NOT impact the operation of the current configuration."; if (not $shell) { print <
EOF } else { print("\n".("-" x 80)."\n".$msg1."\n".$msg2."\n".$msg3."\n".("-" x 80)."\n"); } } sub start_idn { my $msg1 = "Following tests will check the requirements for the IDN (Internationalized Domain Name) conversion."; my $msg2 = "Tests will check local conversion support (using Net::LibIDN), and OpenSRS IDN conversion server connection and operation."; my $msg3 = "If the conversion is supported locally, any failures reported for OpenSRS conversion server will not impact your operations."; my $msg4 = "If the conversion is supported using OpenSRS conversion server, any failure reported for local support (Net::LibIDN) will not impact your operations."; if (not $shell) { print <
$msg1
$msg2
$msg3
EOF } else { print("\n".("-" x 80)."\n".$msg1."\n".$msg2."\n".$msg3."\n".("-" x 80)."\n"); } } sub start_date { my $msg1 = "Following tests will check the requirements for the Date Calculation."; my $msg2 = "Tests will check date calculation support (using Date::Calc)."; if (not $shell) { print <
$msg1
$msg2
$msg3
$msg4
EOF } else { print("\n".("-" x 80)."\n".$msg1."\n".$msg2."\n".("-" x 80)."\n"); } } sub check_settings { my $uname; if ( not $shell) { print_message("Verify Install URL", "http://$ENV{HTTP_HOST}$ENV{REQUEST_URI}"); print_message("OpenSRS Client IP Address", $ENV{SERVER_ADDR}); } print_message("OpenSRS version", $OpenSRS::VERSION || "Unknown" ); print_message("Perl version", $]); # attempt to display the OS type (requires uname to be in your path) foreach my $path ( '/bin', '/usr/bin', (split /:/, $ENV{PATH})) { if (-x "$path/uname") { chomp($uname = `$path/uname -a`); print_message("Operating System", $uname); last; } } if (defined $Config{osname}) { print_message("Perl compiled for", "$Config{osname} ($Config{archname})"); } if ($OPENSRS{connection_type} =~ /^(CBC|HTTPS)$/) { print_message("Connection Type", $OPENSRS{connection_type}); } else { print_error("Connection Type", "ERROR: Unknown connection type $OPENSRS{connection_type}. Please check the value of \$OPENSRS{connection_type} in your configuration file"); shut_down(); exit; } print_message("Server Hostname", $OPENSRS{REMOTE_HOST}); print_message("Server Port", $OPENSRS{REMOTE_PORT}); if ( $OPENSRS{connection_type} eq 'HTTPS' && not $OPENSRS{REMOTE_HTTPS_PORT}) { print_error("HTTPS Port", "ERROR: HTTPS port must be specified for the current configuration [HTTPS]"); shut_down(); exit; } else { print_message("HTTPS Port", $OPENSRS{REMOTE_HTTPS_PORT}); } print_message("Reseller Username", $OPENSRS{username}); print_message("Private Key Length", length $OPENSRS{private_key}); print_th("Encryption [$OPENSRS{connection_type}]"); if ( $OPENSRS{connection_type} eq 'CBC') { if ($OPENSRS{crypt_type} =~ /^(DES|Blowfish|Blowfish_PP)$/) { print_message("Encryption Method", $OPENSRS{crypt_type}); } else { print_error("Encryption Method", "ERROR: Unknown crypt type $OPENSRS{crypt_type}. Please check the value of \$OPENSRS{crypt_type} in your configuration file"); shut_down(); exit; } } else { print_message("Encryption Method","SSL"); } if ( $OPENSRS{connection_type} eq 'CBC') { test_for_module("Crypt::$OPENSRS{crypt_type}"); } } sub check_modules { my $ctype = shift; my $th = "Software Requirement Tests [$ctype]"; $th .= " (Local IDN conversion support)" if $ctype eq 'IDN'; print_th($th); test_for_module($_) foreach @modules; } sub test_for_module { my $module = shift; my $test = "Checking for $module"; eval "require $module"; if ( $@ ) { print_error($test, "ERROR: $module not found: $@"); unless ($optional){ shut_down(); exit; } print_message($test, "Failed"); return; } my $version = eval "\$${module}::VERSION"; print_message($test, "OK ".($version ? "(version $version)" : "")); } sub check_osrs_idn { print_th('OpenSRS IDN Conversion Server Test'); my $ua = LWP::UserAgent->new; my $test = "Connecting to conversion server"; my $test2 = "Converting IDN [Punycode to Native]"; my $test3 = "Converting IDN [Native to Punycode]"; my $name = 'xn--6oq304hzhk0hl.com'; my $encoding = $OPENSRS{IDN_ENCODING_TYPE}; my $http_request = HTTP::Request::Common::GET ( 'http://'.$OPENSRS{REMOTE_IDN_HOST}.':'.$OPENSRS{REMOTE_IDN_PORT}."?to=$encoding&name=$name" ); my $response = $ua->request($http_request); my $response2 = undef; if ( defined $response and $response->is_success ) { print_message($test, "OK"); $response2 = parse_http_response($response); if ( defined $response2 and $response2->{is_success} ) { print_message($test2, "OK - FROM: $response2->{punycode} TO: $response2->{native}"); } else { #can connect but conversion failed print_error($test2, "Conversion failed: $response2->{response_text}"); } } else { print_error($test, "ERROR: Unable to login to conversion server"); return; } $name = $response2->{native}; $http_request = HTTP::Request::Common::GET ( 'http://'.$OPENSRS{REMOTE_IDN_HOST}.':'.$OPENSRS{REMOTE_IDN_PORT}."?from=$encoding&name=$name" ); $response = $ua->request($http_request); my $response3 = parse_http_response($response); if ( defined $response3 and $response3->{is_success} ) { print_message($test3, "OK - FROM: $response3->{native} TO: $response3->{punycode}"); } else { print_error($test3, "Conversion failed: $response3->{response_text}"); } } sub parse_http_response { my $http_response = shift; my %response; foreach ( split "\015\012", $http_response->content ) { $response{$1} = $2 if $_ =~ /(.*)=(.*)/; } return \%response; } sub check_osrs_modules { require OpenSRS::XML_Client; require OpenSRS::TPP_Client; print_th('OpenSRS Client Modules'); print_message("XML Client Version", $OpenSRS::XML_Client::VERSION); print_message("TPP Client Version", $OpenSRS::TPP_Client::VERSION); } sub check_login_https { require OPS; require HTTP::Request::Common; require LWP::UserAgent; require LWP::Protocol::https; require Digest::MD5; { my $net_ssl_ok = 1; print_th("Checking for Net::SSL"); eval { require Net::SSL; }; if ($@) { $net_ssl_ok = 0; print_message("Net::SSL",$@); } my $io_socket_ok = 1; print_th("Checking for IO::Socket::SSL"); eval { require IO::Socket::SSL; }; if ($@) { $io_socket_ok = 0; print_message("IO::Socket::SSL",$@); } unless ($io_socket_ok || $net_ssl_ok){ print_error("HTTPS","Some modules missing from perl installation test may fail"); } } print_th('HTTPS Authentication Test'); my $test = "Logging in to OpenSRS server"; my $answer = auth_https(); if ( not $answer ) { print_error($test, "ERROR: Unable to login to server"); } else { print_message($test, "OK"); } } sub auth_https { my $OPS = new OPS(); my $ua = LWP::UserAgent->new; my $request = { protocol => 'XCP', action => 'lookup', object => 'domain', attributes => { domain => 'tucows.com', } }; my $xml = $OPS->encode($request)."\n"; my $signature = Digest::MD5::md5_hex(Digest::MD5::md5_hex($xml,$OPENSRS{private_key}),$OPENSRS{private_key}); my $https_request = HTTP::Request::Common::POST ( 'https://'.$OPENSRS{REMOTE_HOST}.':'.$OPENSRS{REMOTE_HTTPS_PORT}, 'Content-Type' => 'text/xml', 'X-Username' => $OPENSRS{username}, 'X-Signature' => $signature, 'Keep-Alive' =>'off', 'Content-Length' => length($xml), 'Content' => $xml ); my $response = $ua->request($https_request); if (defined $response and $response->is_success){ my $response2 = $OPS->decode($response->{_content}); if ( defined $response2 and $response2->{is_success}) { return 1; } else { #can connect but key is invalid or Lookup failed print_error("auth_https","can connect but key is invalid or Lookup failed"); return 0; } } else { return 0; } } sub check_login { # keep the following as require statements, rather than use, so we # can check for any external modules that they may require. No # point having verify_install bomb out for something that's missing, # when it's supposed to tell you what's missing. :) They should also # stay here, rather than at the top of the code for the same reason. require OPS; my ($fh); print_th('CBC Authentication Test'); my $test = "Logging in to OpenSRS server"; # make or get the socket filehandle if (not $fh = init_socket()) { print_error($test, "ERROR: Unable to establish socket!"); return; } my $answer = authenticate($fh); if (not $answer) { print_error($test, "ERROR: Unable to login to server. Make sure you have properly defined the \$USERNAME and \$PRIVATE_KEY values in your configuration file"); } elsif ($answer != 1) { print_error($test, "ERROR: Unable to login to server: $answer"); close_socket($fh); } else { print_message($test, "OK"); close_socket($fh); } } sub authenticate { my ($answer,$prompt); my ($challenge, $session_key); my $fh = shift; my $OPS = new OPS(); if (not $OPENSRS{username} or not $OPENSRS{private_key}) { return "400\tMissing username or crypt key"; } $prompt = read_data( $fh, $OPS ); if ( $prompt->{response_code} == 555 ) { # the ip address from which we are connecting is not accepted return ( $prompt->{response_text} ); } elsif ( $prompt->{attributes}->{sender} !~ /OpenSRS\sSERVER/ || $prompt->{attributes}->{version} !~ /^XML/ ) { return ( "401\tUnrecognized Peer" ); } # first response is server version send_data( $fh, $OPS, { action => "check", object => "version", attributes => { sender => "OpenSRS CLIENT", version => $OpenSRS::XML_Client::VERSION, state => "ready", } } ); my $crypt = lc $OPENSRS{crypt_type}; if ($crypt eq 'blowfish_pp') { $crypt = 'blowfish' } send_data( $fh, $OPS, { action => "authenticate", object => "user", attributes => { crypt_type => $crypt, username => $OPENSRS{username}, password => $OPENSRS{username}, } } ); # Encrypt the challenge bytes with our password to generate # the session key. # Respond to the challenge with the MD5 checksum of the challenge. $challenge = read_data( $fh, $OPS, no_xml => 1 ); if ($Crypt::CBC::VERSION >= 2.17){ $cipher = new Crypt::CBC( -key => pack('H*', $OPENSRS{private_key}), -cipher => $OPENSRS{crypt_type}, -header => 'randomiv' ); } else { $cipher = new Crypt::CBC(pack('H*', $OPENSRS{private_key}), $OPENSRS{crypt_type}); } send_data( $fh, $OPS, Digest::MD5::md5( $challenge ), no_xml => 1); # Read the server's response to our login attempt. # This is in XML $answer = read_data( $fh, $OPS ); if ($answer->{response_code} =~ /^2/) { return 1; } elsif ( $answer->{response_code} == 400 ) { return $answer->{response_text}; } else { return "Authentication failed"; } } sub init_socket { my ($REMOTE_HOST,$REMOTE_PORT,$fh,$connect_type); $REMOTE_HOST = $OPENSRS{REMOTE_HOST}; $REMOTE_PORT = $OPENSRS{REMOTE_PORT}; # create a socket $fh = IO::Socket::INET->new( Proto => "tcp", PeerAddr => $REMOTE_HOST, PeerPort => $REMOTE_PORT, ); if ( not defined $fh ) { return 0; } select($fh); $| = 1; select(STDOUT); return $fh; } sub close_socket { my ($fh) = @_; close($fh); $cipher = undef; } sub read_data { my $buf; my $fh = shift; my $OPS = shift; my %args = @_; # Read the length of this input. $buf = $OPS->read_data( $fh ); $buf = ($cipher) ? $cipher->decrypt($buf) : $buf; if ( not $args{no_xml} ) { $buf = $OPS->decode( $buf ); } return $buf; } # Sends request to the server. # XXX Need error checking? sub send_data { my $fh = shift; my $OPS = shift; my $message = shift; # hash ref or binary data (for challenge) my %args = @_; # other flags my $data_to_send; if ( not $args{no_xml} ) { $message->{protocol} = "XCP"; $data_to_send = $OPS->encode( $message ); } else { # no XML encoding $data_to_send = $message; } $data_to_send = $cipher->encrypt($data_to_send) if $cipher; return $OPS->write_data( $fh, $data_to_send ); } sub print_message { my ($test, $response) = @_; if ($shell) { printf("%-30s: %s\n",$test, $response); } else { print < EOF } } sub print_error { my ($test, $response) = @_; if ($shell) { printf("%-30s: %s\n",$test, $response); } else { print < EOF } } sub print_th { my $header = shift; if (not $shell) { print < EOF } else { print "==========================================\n"; print $header,"\n\n"; } } opensrs-client-3.0.0/cgi/whois_privacy.cgi0000755017777601777760000003570310770014202021660 0ustar nobodynogroup00000000000000#!/usr/bin/perl #$Id: whois_privacy.cgi,v 1.3 2006/10/20 23:22:19 sbelikov Exp $ # vi: set tabstop=4: # .Copyright (C) 1999-2000 TUCOWS.com Inc. # .Created: 11/19/2000 # .Contactid: # .Url: http://www.opensrs.org # .Developed by: TUCOWS.com Inc. for OpenSRS.com # .Written by: John Jerkovic, Vlad Jebelev # # This program is free software; you can redistribute it and/or # modify it under the terms of the GNU Lesser General Public # License as published by the Free Software Foundation; either # version 2.1 of the License, 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 # Lesser General Public License for more details. # # You should have received a copy of the GNU Lesser General Public # License along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA use vars qw( %in %actions $XML_Client %cookies $action $authentication $cgi $path_templates $flag_header_sent $reg_username $reg_password $reg_domain $cookie $domain_count $reg_permission $reg_f_owner $expiredate $waiting_request $domain_info $COOKIE_KEY $affiliate_id $path_to_config %unauthenticated_actions ); ( %in, %actions, $XML_Client, %cookies, $action, $authentication, $cgi, $path_templates, $flag_header_sent, $reg_username, $reg_password, $reg_domain, $cookie, $domain_count, $reg_permission, $reg_f_owner, $expiredate, $waiting_request, $domain_info, ) = (); # pull in conf file with defined values # XXX NOTE XXX Update this configuration file BEGIN { $path_to_config = ""; if ($ENV{OSRS_CLIENT_ETC}){ $path_to_config = "$ENV{OSRS_CLIENT_ETC}"; } do "$path_to_config/OpenSRS.conf"; } use lib $PATH_LIB; use OpenSRS::Util::ConfigJar "$path_to_config/OpenSRS.conf"; use strict; use Time::Local; use CGI ':cgi-lib'; use OpenSRS::XML_Client qw(:default); use OpenSRS::Util::Common qw(send_email); use Data::Dumper; use warnings; # initialize global defines $cgi = $ENV{SCRIPT_NAME}; $path_templates = "$PATH_TEMPLATES/whois_privacy"; $COOKIE_KEY = $TEST_SERVER?"REGISTRANT_KEY":"REGISTRANT_LIVE_KEY"; $waiting_request = ""; # allowed actions %actions = ( wp_register => \&wp_register, send_password => undef, ); %unauthenticated_actions = ( send_password => undef, ); start_up(); # make a client object we will use to talk to the OpenSRS server $XML_Client = new OpenSRS::XML_Client(%OPENSRS); $XML_Client->login; # read in the form data ReadParse(\%in); %cookies = GetCookies(); $action = $in{action}; #----------------------------------------------------- # perform necessary actions # a few actions are allowed without authentication. if ( $action and exists $unauthenticated_actions{$action} ) { no strict 'refs'; &$action(); exit; } $affiliate_id = $in{ affiliate_id }; #----------------------------------------------------- # perform necessary actions # if they have specified 'login', bypass validate(), and do login() if ($action eq 'login') { login(); exit } elsif ($action eq 'logout') {logout(); exit } # for all other actions, do validate() (grab cookie if it exists) $authentication = validate(); # show them the login page if they don't have a valid cookie if (not $authentication) { show_login(); # they asked for a valid action } elsif ($authentication and exists $actions{$action}) { &{$actions{ $action }}(); # they gave us an invalid command } else { show_login(); } # close the connection to the server $XML_Client->logout; exit; ####################### START OF SUBS ############################## sub start_up { if ($REGISTER{debug}) { # print error to the page select (STDOUT); $| = 1; open (STDERR, ">&STDOUT") or die "Can't dump stdout: $!\n"; select (STDERR); $| = 1; select (STDOUT); } } sub print_form { my ($content); my ($template,$HTML) = @_; print_header(); open (FILE, "<$template") or die "Couldn't open $template: $!\n"; while () { s/{{(.*?)}}/$HTML->{$1}/g; $content .= $_; } close FILE; print $content; } sub error_out { my ( $error_msg, $domain ) = @_; my (%HTML); $HTML{CGI} = $cgi; $HTML{ERROR} = $error_msg; $HTML{SHOW_PASS} = ""; print_form("$path_templates/error.html",\%HTML); } sub get_content { my $content; my ($template,$HTML) = @_; open (FILE, "<$template") or die "Couldn't open $template: $!\n"; while () { s/{{(.*?)}}/$HTML->{$1}/g; $content .= $_; } close FILE; return $content; } ######################################################## sub escape_hash_values { my $hash_ref = shift; foreach my $hash_key ( keys %$hash_ref ) { if ( ref( $hash_ref->{$hash_key} ) eq "HASH" ) { escape_hash_values( $hash_ref->{$hash_key} ); } elsif ( ref( $hash_ref->{$hash_key} ) eq "ARRAY" ) { escape_array_values( $hash_ref->{$hash_key} ); } else { $hash_ref->{$hash_key} = escape( $hash_ref->{$hash_key} ); } } } sub escape_array_values { my $array_ref = shift; foreach my $array_element ( @$array_ref ) { if ( ref( $array_element ) eq "HASH" ) { escape_hash_values( $array_element ); } elsif ( ref( $array_element ) eq "ARRAY" ) { escape_array_values( $array_element ); } else { $array_element = escape( $array_element ); } } } sub escape { my $string = shift; $string =~ s/\"/"/g; return $string; } # attempt to validate a user's cookie sub validate { my ($expire,$response); $reg_username = ""; if (exists $cookies{$COOKIE_KEY}) { $cookie = $cookies{$COOKIE_KEY}; my $xcp_request = { action => "get", object => "userinfo", cookie => $cookie, }; $response = $XML_Client->send_cmd( $xcp_request ); if (not $response->{is_success}) { return undef; } $reg_username = $response->{attributes}->{reg_username}; $reg_domain = $response->{attributes}->{domain}; $reg_f_owner = $response->{attributes}->{f_owner}; $reg_permission = $response->{attributes}->{permission}; $domain_count = $response->{attributes}->{domain_count}; $expiredate = $response->{attributes}->{expiredate}; $waiting_request = $response->{attributes}->{waiting_request}; return 1; } else { return undef; } } # get cookies from the client sub GetCookies { my ($cookie, %cookies,$key,$value); foreach $cookie (split /\; /, $ENV{HTTP_COOKIE}) { ($key, $value) = (split /=/, $cookie)[0,1]; $value =~ s/\\0/\n/g; $cookies{$key} = $value; } return %cookies; } # get all info on this domain. Remember: you are only getting info on one # domain (the one you specified in 'set_cookie' call). If you want info # on other domains, either switch the cookie to other domains ('update_cookie') # or get a list of domains ('get_domain' with 'type => list') and use its # ext_results data sub get_domain_info { my ( $domain_name, $cookie ) = @_; my $xcp_req = { action => "get", object => "domain", cookie => $cookie, attributes => { type => "all_info" } }; return $XML_Client->send_cmd( $xcp_req ); } sub wp_register { my (%HTML); # set initial steps results $HTML{affiliate_id} = $affiliate_id; $HTML{step1_res} = $HTML{step2_res} = "Not processed"; $reg_domain = $in{reg_domain}; # data to set $HTML{orig_domain} = $reg_domain; $HTML{idn_link} .= $reg_domain =~ /^xn--/ ? "[IDN]" : ''; PROCESS: { # step 1: get domain info (API: 'get_domain', type: 'all_info' ). $domain_info = get_domain_info( $reg_domain, $cookie ); $HTML{step1_text} = $domain_info->{ response_text }; if (not $domain_info->{is_success}) { $HTML{step1_res} = "Failed attempt!"; last PROCESS; } $HTML{step1_res} = "Success!"; $HTML{step1_expiredate} = $domain_info->{attributes}{ expiredate }; # step 2: register whois privacy (API: 'sw_register' ) my $xcp_req = { action => 'sw_register', attributes => { # Uncomment one of the string or pass a specific value of parameter # If not passed or value not save|process then settings # from RSP profile will be used # handle => 'save', #save order only regardless RSP settings # handle => 'process', #process order always regardless RSP settings domain => $reg_domain, reg_type => 'whois_privacy', }, }; my $res = $XML_Client->send_cmd( $xcp_req ); $HTML{step2_text} = $res->{ response_text }; $HTML{step2_success} = $res->{is_success} ? "Successful" : "Fail"; if (not $res->{is_success}) { $HTML{step2_res} = "Failed attempt!"; last PROCESS; } $HTML{step2_res} = "Success!"; $HTML{step3_text} = ""; } print_form("$path_templates/wp_results.html",\%HTML); } # authenticate user sub login { my $message = shift; $reg_username = $in{reg_username}; $reg_password = $in{reg_password}; $in{reg_domain} =~ s/^\s+//; $in{reg_domain} =~ s/\s+$//; $reg_domain = $in{reg_domain}; if ( not $in{reg_domain} ) { error_out("Please enter a domain name."); exit; } if ( $in{reg_domain} =~ /\s/ ) { error_out("Spaces not allowed inside domain name [$in{reg_domain}]."); exit; } if ( $in{reg_domain} =~ /[^A-Za-z0-9\.\-]/ ) { error_out( "It seems that $in{reg_domain} is an IDN domain.
". " Please convert". " to Punycode first" ); exit; } # get permissions for a given user my $xcp_request = { action => "set", object => "cookie", attributes => { domain => $reg_domain, reg_username => $reg_username, reg_password => $reg_password, } }; my $response = $XML_Client->send_cmd( $xcp_request ); if (not $response->{is_success}) { my $error; if ( $response->{response_code} == 415 ) { # bad un/pw $error = "Error: Invalid username/password combination for $reg_domain.

"; $response->{response_text} =~ s/\n/
\n/g; $error .= $response->{response_text}; error_out( $error, $reg_domain ); exit; } else { # any other error $error = "$response->{response_text}
Please contact Support for assistance."; error_out( $error ); exit; } } $cookie = $response->{attributes}->{cookie}; $expiredate = $response->{attributes}->{expiredate}; if (not $cookie) { error_out("Invalid username/password given.
\n"); exit; } my $path = ""; print "Content-type: text/html\r\n"; print "Set-Cookie: $COOKIE_KEY=$cookie; PATH=$path\r\n"; print "\r\n"; $flag_header_sent = 1; # get domain info $domain_info = get_domain_info( $reg_domain, $cookie ); if (not $domain_info->{is_success}) { error_out("Failed attempt: $domain_info->{response_text}\n"); exit; } # domain used to login with must be one sponsored by this reseller if ( not $domain_info->{ attributes }{ sponsoring_rsp } ) { error_out( "This domain is not sponsored by this domain provider and cannot be managed from this interface." ); exit; } main_menu($cgi); } ############################################################################# # logout user (delete cookie) sub logout { my ($cookie, $response); if (exists($cookies{$COOKIE_KEY})) { $cookie = $cookies{$COOKIE_KEY}; my $xcp_request = { action => "delete", object => "cookie", cookie => $cookie, attributes => { cookie => $cookie, } }; $response = $XML_Client->send_cmd( $xcp_request ); } show_login(); } sub show_login { my $message = shift; my (%HTML); $HTML{MESSAGE} = $message; $HTML{CGI} = $cgi; $HTML{affiliate_id} = $affiliate_id; if ( defined $message and $message ) { $HTML{MESSAGE} = qq($message

); } print_form("$path_templates/login.html",\%HTML,'single'); } sub main_menu { my (%HTML); $HTML{CGI} = $cgi; $HTML{reg_domain} = $reg_domain; $HTML{reg_type} = "whois_privacy"; $HTML{orig_domain} = $reg_domain; $HTML{idn_link} .= $reg_domain =~ /^xn--/ ? "[IDN]" : ''; $HTML{affiliate_id} = $affiliate_id; $HTML{expiredate} = $domain_info->{ attributes }{ expiredate }; print_form("$path_templates/whois_privacy_menu.html",\%HTML,'single'); } ########################################################################### # print a html header sub print_header { if (not $flag_header_sent) { print "Content-Type: text/html\r\n\r\n"; $flag_header_sent = 1; } } sub send_password { if ( not exists $RENEW{allow_password_requests} or not $RENEW{allow_password_requests} ) { show_login("Invalid action: $action"); exit; } my $domain = $in{domain}; $domain =~ s/^\s+|\s+$//g; if ( not $domain ) { error_out( "No domain specified"); exit; } my $xcp_request = { action => 'send_password', object => 'domain', attributes => { domain_name => $domain, send_to => $in{user}, sub_user => ($in{subuser} and $RENEW{password_send_subuser}) ? 1 : 0, } }; my $response = $XML_Client->send_cmd( $xcp_request ); if ( $response->{is_success} ) { show_login( "Password has been sent." ); } else { error_out("Couldn't send password: $response->{response_text}\n"); exit; } } opensrs-client-3.0.0/cgi/wsb.cgi0000755017777601777760000015225610770014202017570 0ustar nobodynogroup00000000000000#!/usr/bin/perl # .Copyright (C) 2004 TUCOWS.com Inc. # .Created: 2004/07/17 # .Contactid: # .Url: http://email.tucows.com # .Authors: Yuliya Gumerova # # # This program is free software; you can redistribute it and/or # modify it under the terms of the GNU Lesser General Public # License as published by the Free Software Foundation; either # version 2.1 of the License, 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 # Lesser General Public License for more details. # # You should have received a copy of the GNU Lesser General Public # License along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA # # # use vars qw(%in $cgi $session $path_templates %actions $action $wsb $path_to_config); # Null these things out for mod_perl users (%in, $cgi, $session, $path_templates, %actions, $action, $path_to_config) = (); use constant NUM_SERVERS => 4; # max number of servers a user can specify. # pull in conf file with defined values # XXX NOTE XXX Update this configuration file BEGIN { # first "do" the major config file $path_to_config = ""; do "$path_to_config/OpenSRS.conf"; # now load up the config for EmailDefense services do "$path_to_config/WSB.conf"; } use strict; use lib $PATH_LIB; use CGI ':cgi-lib'; use HTML::Template; use Data::Dumper; use OpenSRS::Util::ConfigJar "$path_to_config/OpenSRS.conf"; use OpenSRS::Util::ConfigJar "$path_to_config/WSB.conf"; use OpenSRS::Util::Common qw(build_select_menu build_select_menu3 build_country_list build_year_menu build_month_menu build_day_menu); use OpenSRS::XML_Client; use OpenSRS::WSB; use OpenSRS::Util::Session; use OpenSRS::Language; use Date::Calc qw(Today); use POSIX; # global defines $cgi = $ENV{SCRIPT_NAME}; $path_templates = "$PATH_TEMPLATES/wsb"; %in = (); %actions = ( do_start_up => undef, display_login => undef, recover_password => undef, create_new_account => undef, transition_actions => undef, do_login => undef, do_update_settings => undef, manage_account => undef, ); print "Content-type: text/html\n\n"; # start things up # set debugging level set_debugging_level(); init_wsb(); # read in the form data ReadParse(\%in); local $Data::Dumper::Purity = 1; local $Data::Dumper::Deepcopy = 1; local $Data::Dumper::Ident = 1; $session = OpenSRS::Util::Session->restore( $in{session}, $in{sign}, $OPENSRS{private_key}); $action = $in{action}; delete $in{session}; delete $in{sign}; delete $in{action}; process_action($action); $wsb->logout(); exit; sub init_wsb { $wsb = new OpenSRS::WSB(); $wsb->init(); } sub process_action { my $action = shift; #----------------------------------------------------- # perform necessary actions # no action was supplied, so use the default if (not $action) { do_start_up(); # they passed a valid action } elsif (exists $actions{$action}) { no strict "refs"; &$action(); use strict; # they passed an invalid action } else { error_out("Invalid action: $action"); } } # Session functions #################################################################### # delete default value from session. sub init_session { map { delete $session->{$_} } keys %{$session}; } # load default value from config file into session. sub load_defaults { foreach my $key ( keys %DEFAULT_VALUES ) { $session->{$key} = $DEFAULT_VALUES{$key}; } } # look up a value from session. sub lookup_value { my $key = shift; return $session->{$key}; } # store a value into session. sub store_value { my ($key, $value) = @_; $session->{$key} = $value; } # just a shorter version of looking up a value of # "sd_curr_domain_info" from session. sub lookup_curr_account_value { my $key = shift; my $curr_account_info = lookup_value('sd_curr_account_info'); my $value = $curr_account_info->{$key}; return $value; } sub store_curr_account_value { my ($key, $value) = @_; my $curr_account_info = lookup_value('sd_curr_account_info'); $curr_account_info->{$key} = $value; store_value('sd_curr_account_info',$curr_account_info ); $curr_account_info = lookup_value('sd_curr_account_info'); } # clears current domain info and initialises domain's accounts info. # "Current domain" holds info in the session on the domain being managed or purchased. sub init_curr_account_info { my $curr_account_info = {}; store_value('sd_curr_account_info', $curr_account_info); } sub init_action_history { my @action_history = (); store_value('action_history', \@action_history); } ######################### GENERAL FUNCTIONS ########################################### sub do_start_up { my $message = shift; start_up(); display_login($message); } sub start_up { # delete deafult values from the session. init_session(); init_curr_account_info(); init_action_history(); #load the defaults from config file load_defaults(); } sub transition_actions { map { $action = $_ if $_ =~ /^do_\w+$/; } keys %in; no strict "refs"; &$action(); use strict; } sub do_cancel_action { my $action_history = lookup_value('action_history'); $action = pop @{$action_history}; if ($action eq 'display_package_info') { store_curr_account_value('probable_package_name', ""); store_curr_account_value('trial', ""); } $action = pop @{$action_history}; no strict "refs"; &$action(); use strict; } sub do_cancel_manage_action { # return to the list of accounts if ( lookup_value('dflt_enable_rwi2') ) { init_curr_account_info(); get_wsb_accounts(); # return to the login page. } else { do_start_up(); } } ######################### RECOVER PASSWORD FUNCTIONS ########################################### sub do_display_recover_password { my %HTML; $HTML{message} = shift; $HTML{username} = $in{username}; $HTML{action} = 'do_display_recover_password'; print_form(template => "$path_templates/recover_password.html", data => \%HTML); } sub do_recover_password { my %HTML; my $result; if ( not $in{username} ) { do_display_recover_password("Please enter username."); exit; } if ( lookup_value('dflt_enable_rwi2') ) { $result = $wsb->recover_rwi2_password($in{username}); } else { $result = $wsb->recover_wsb_password($in{username}); } splice ( @{lookup_value('action_history')}, -2 ); if ( $result->{is_success} ) { display_login("An email has been sent with your password."); } else { do_display_recover_password("User \"$in{username}\" does not exist."); } } ######################### LOGIN FUNCTIONS ########################################### # Lookup is the default page to show if no action is # specified sub display_login { my %HTML; $HTML{message} = shift; $HTML{enable_manage} = lookup_value('dflt_enable_manage'); $HTML{send_password} = lookup_value('dflt_enable_send_password'); $HTML{enable_rwi2} = lookup_value('dflt_enable_rwi2'); $HTML{action} = 'do_start_up'; print_form(template => "$path_templates/login.html", data => \%HTML ); } # There are three cases of login. # 1. As RWI2 user. # 2. As WSB account, when RWI2 user is in the config. # 3. As WSB account, when RWI2 user is identical (mapping 1<=>1). sub do_login { # Login as RWI2 user. if (lookup_value('dflt_enable_rwi2')) { store_value('rwi2_username', $in{username}); store_value('rwi2_password', $in{password}); login_rwi2_user(); get_wsb_accounts(); # Login as WSB account. } else { # RWI2 user details in config. if (lookup_value('dflt_rwi2_username')) { store_value('rwi2_username', lookup_value('dflt_rwi2_username')); store_value('rwi2_password', lookup_value('dflt_rwi2_password')); # RWI2 user details from the web, the same as WSB account. } else { store_value('rwi2_username', $in{username}); store_value('rwi2_password', $in{password}); } store_curr_account_value('account_username', $in{username}); store_curr_account_value('account_password', $in{password}); login_rwi2_user(); validate_rwi2_owner(); validate_wsb_account(); manage_account(); } } # Login RWI2 user. sub login_rwi2_user { my $result = $wsb->login_user( lookup_value('rwi2_username'), lookup_value('rwi2_password')); if ($result->{is_success}) { store_value('rwi2_user_id',$result->{attributes}{user_id}); } else { display_login($result->{response_text}); exit; } } # Validate that RWI2 user owns the WSB account. sub validate_rwi2_owner { my $account_name = lookup_curr_account_value('account_username'); my $result = $wsb->query_inv_item_by_description($account_name); if ($result->{is_success}) { if ($result->{attributes}{result}[0]{user_id} ne lookup_value('rwi2_user_id')) { display_login("WSB account \"$account_name\" not found."); exit; } else { store_curr_account_value('inventory_item_id', $result->{attributes}{result}[0]{inventory_item_id}); } } else { display_login($result->{error}); exit; } } # Validate WSB account. sub validate_wsb_account { my $account_username = lookup_curr_account_value('account_username'); my $account_password = lookup_curr_account_value('account_password'); my $result = $wsb->validate_wsb_account($account_username, $account_password); if (not $result->{is_success}) { display_login($result->{response_text}); exit; } } # Function for Variant 1 after login sub get_wsb_accounts { get_rwi2_user_wsb_accounts(); query_accounts_by_id(); do_display_wsb_accounts(); } ######################### CREATE NEW ACCOUNT FUNCTIONS ######################################## # Called from "List WSB accounts" (variant 1) and "Login" pages (variants 2 and 3). sub do_create_new_account { store_value('curr_path', 'create'); store_value('curr_action', 'create'); # WSB account with RWI2 in config. if ( $VARIANT_2 ) { # Authentication is needed only for variant 2 since # variant 1 is already authenticated and # variant 3 gets authenticated after account info is collected. store_value('rwi2_username', lookup_value('dflt_rwi2_username')); store_value('rwi2_password', lookup_value('dflt_rwi2_password')); login_rwi2_user(); } display_account_info(); } sub display_rwi2_user { my %HTML; $HTML{message} = shift; $HTML{rwi2_username} = $in{rwi2_username}; $HTML{rwi2_password} = $in{rwi2_password}; $HTML{rwi2_confirm_password} = $in{rwi2_confirm_password}; print_form(template => "$path_templates/create_rwi2_user.html", data => \%HTML); } sub do_create_new_rwi2_user { display_rwi2_user(); } # Collect entered RWI2 user info from the "Create RWI2 user" page. sub do_collect_rwi2_user_info { store_value('rwi2_username', $in{rwi2_username}); store_value('rwi2_password', $in{rwi2_password}); if ( $in{rwi2_confirm_password} ne $in{rwi2_password} ) { display_rwi2_user("Password and confirm password do not match."); exit; } if ( my $error = create_rwi2_user() ) { display_rwi2_user($error); exit; } login_rwi2_user(); get_wsb_accounts(); } ######################### MANAGE ACCOUNT FUNCTIONS ######################################## # Get all WSB accounts belonging to the RWI2 user. sub get_rwi2_user_wsb_accounts { my $page = 0; my $page_size = $WSB{NUM_ITEMS_PER_PAGE}; my %data = ( user_id => lookup_value('rwi2_user_id'), page_size => $page_size, start_index => $page*$page_size + 1, ); my $result = $wsb->query_inv_items_created_by_user_id(\%data); if ($result->{is_success}) { my $count = $result->{attributes}{result_control}{record_count}; my $report_instance_id = $result->{attributes}{result_control}{report_instance_id}; my $num_pages = ceil($count/$page_size); my @wsb_accounts = @{$result->{attributes}{result}}; for ($page=1; $page<$num_pages; $page++) { $data{start_index} = $page*$page_size + 1; $data{report_instance_id} = $report_instance_id; $result = $wsb->query_inv_items_created_by_user_id(\%data); if ($result->{is_success}) { @wsb_accounts = (@wsb_accounts, @{$result->{attributes}{result}}); } else { error_out($result->{response_text}); } } my @sorted_wsb_accounts = sort { $a->{description} cmp $b->{description} } @wsb_accounts; store_value('wsb_accounts', \@sorted_wsb_accounts); } else { error_out($result->{error}); } } sub query_accounts_by_id { my (@wsb_accounts, $wsb_account); map { $wsb_account = query_inv_item_by_id($_->{inventory_item_id}); push @wsb_accounts, $wsb_account if $wsb_account; } @{lookup_value('wsb_accounts')}; store_value('wsb_accounts', \@wsb_accounts); } # Function for Variant 2 and 3 after login or Variant 1 after choosing an account from the list. # Retrieve all info on the account. sub manage_account { my $message = shift; my $inventory_item_id; # After choosing an account from the list via link all info is lost and has to be restored. if ($in{init_session}) { start_up(); $inventory_item_id = $in{inventory_item_id}; store_value('rwi2_user_id', $in{rwi2_user_id}); } else { $inventory_item_id = lookup_curr_account_value('inventory_item_id'); } my $account = query_inv_item_by_id($inventory_item_id); error_out("No WSB accounts under the specified brand.") if not $account; store_value('sd_curr_account_info', $account); store_value('curr_path', 'manage'); do_display_wsb_account($message); } sub query_inv_item_by_id { my $inventory_item_id = shift; my ($result, @wsb_accounts, $package_title, $package_name, $result_data, $expiry_date, $trial, $wsb_account); $result = $wsb->query_inv_item_by_id($inventory_item_id); error_out($result->{response_text}) if not $result->{is_success}; $result_data = $result->{attributes}{result}[0]; $package_name = $result_data->{product_data}{package_name}; $package_title = _get_package_title($package_name); $trial = $result_data->{product_data}{trial}; $expiry_date = ($result_data->{expiry_date} =~ /^(.*)(\s+00:00:00)$/) ? $1 : ($trial ? "N/A for this status" : "N/A"); $wsb_account = { inventory_item_id => $result_data->{inventory_item_id}, account_username => $result_data->{product_data}{account_username}, account_password_mail => lookup_curr_account_value('account_password'), expiry_date => $expiry_date, last_updated => $result_data->{last_updated} || "N/A", start_date => $result_data->{start_date} || "N/A", creation_date => $result_data->{creation_date} || "N/A", contact_id => $result_data->{contact_set}{owner}, status => $result_data->{state}, package_name => $package_name, package_title => $package_title, language => $result_data->{product_data}{language}, trial => $trial, brand_contact_id => $result_data->{product_data}{brand_contact_id}, brand_name => $result_data->{product_data}{brand_name}, brand_url => $result_data->{product_data}{brand_url}, purchase_url => $result_data->{product_data}{purchase_url}, ftp_default_directory => $result_data->{product_data}{ftp_default_directory}, ftp_username => $result_data->{product_data}{ftp_username}, ftp_port => $result_data->{product_data}{ftp_port}, ftp_index_filename => $result_data->{product_data}{ftp_index_filename}, ftp_password => $result_data->{product_data}{ftp_password}, ftp_server => $result_data->{product_data}{ftp_server}, domain => $result_data->{product_data}{domain}, uno => $result_data->{product_data}{brand_supplier_uno_code}, rwi2_user_id => lookup_value('rwi2_user_id'), enable_manage => lookup_value('dflt_enable_manage'), } if $result_data->{product_data}{brand_name} eq lookup_value('dflt_brand_name'); return $wsb_account; } ######################### ACCOUNT INFO FUNCTIONS ########################################### sub do_display_wsb_accounts { my %HTML; my $wsb_accounts = lookup_value('wsb_accounts'); if ( not scalar @{$wsb_accounts} ) { $HTML{message} = 'No accounts under brand name '.lookup_value('dflt_brand_name'); } else { $HTML{message} = shift; $HTML{wsb_accounts} = $wsb_accounts; } $HTML{enable_manage} = lookup_value('dflt_enable_manage'); $HTML{action} = 'do_display_wsb_accounts'; print_form(template => "$path_templates/list_wsb_accounts.html", data => \%HTML); } sub do_display_wsb_account { my %HTML; %HTML = %{lookup_value('sd_curr_account_info')}; $HTML{action} = 'do_display_wsb_account'; $HTML{message} = shift; $HTML{create_path} = (lookup_value('curr_path') eq 'create'); $HTML{allow_upgrade} = lookup_value('dflt_enable_upgrade_package') && lookup_curr_account_value('package_name') ne _get_greatest_package_name() && !lookup_curr_account_value('trial') && lookup_curr_account_value('status') eq 'active'; $HTML{allow_set_expiry} = !lookup_curr_account_value('trial') && lookup_value('dflt_enable_set_expiry_date') && lookup_curr_account_value('status') eq 'active'; $HTML{allow_update_settings} = lookup_value('dflt_enable_update_settings'); $HTML{allow_go_live} = lookup_value('dflt_enable_go_live') && lookup_curr_account_value('trial') && lookup_curr_account_value('status') eq 'active'; print_form(template => "$path_templates/display_wsb_account.html", data => \%HTML); } sub do_update_settings { my $lost_password_email; store_value('curr_action', 'update_settings'); my $lost_password_email = _get_lost_password_email(lookup_curr_account_value('account_username')); my $curr_account = lookup_value('sd_curr_account_info'); $curr_account->{lost_password_email} = $lost_password_email; $curr_account->{ftp_confirm_password} = $curr_account->{ftp_password}; %in = %{_get_contact_data_by_id(lookup_curr_account_value('contact_id'))}; %{$curr_account} = (%{$curr_account},%{_get_contact_fields()}); store_value('sd_curr_account_info',$curr_account); display_account_info(); } sub display_account_info { my %HTML; my $message = shift; my $user_data = _get_user_fields(); my $contact_data = _get_contact_fields(); my $ftp_data = _get_ftp_fields('not_dflt'); my $ftp_default_data = _get_ftp_fields('dflt'); my %ftp_updatable_data; map { $ftp_data->{$_} = $ftp_default_data->{$_} if $ftp_default_data->{$_}; } keys %{$ftp_default_data}; map { $ftp_updatable_data{'update_'.$_} = 1 if not $ftp_default_data->{$_}; } keys %{$ftp_data}; my $language = lookup_curr_account_value('language'); my $languages = lookup_value('dflt_languages'); %HTML = (%{$user_data}, %{$contact_data}, %{$ftp_data}, %ftp_updatable_data); $HTML{message} = $message; $HTML{country_menu} = build_country_list($contact_data->{country}); $HTML{language_list} = OpenSRS::Language::build_wsb_language_list(Default => $language, Languages => $languages); $HTML{display_ftp} = lookup_value('dflt_enable_update_ftp'); $HTML{test_ftp} = lookup_value('dflt_test_ftp'); $HTML{create_path} = (lookup_value('curr_path') eq 'create'); $HTML{enable_update_password} = $HTML{create_path} || lookup_value('dflt_enable_update_password'); $HTML{action} = 'display_account_info'; $HTML{language_name} = $languages->{$language}; $HTML{language} = $language; print_form(template => "$path_templates/edit_account_info.html", data => \%HTML); } sub do_collect_account_info { if (lookup_value('curr_path') eq 'create') { _get_account_info(); if ( my $errors = _validate_account_info() ) { display_account_info("Correct and re-enter.
$errors"); } else { _get_expiry_info (); display_package_info(); } } else { my $updatable_data = _get_update_settings(); if ( my $errors = _validate_account_info() ) { display_account_info("Correct and re-enter.
$errors"); } else { update_account_settings($updatable_data->{update_settings}) if $updatable_data->{update_settings}; update_contacts($updatable_data->{update_contacts}) if $updatable_data->{update_contacts}; update_lost_password_email($updatable_data->{update_lost_password_email}) if $updatable_data->{update_lost_password_email}; manage_account('Settings updated successfully.'); } } } sub _get_update_settings { my (%data); my $html_user_data = _get_user_fields('html'); my $html_contact_data = _get_contact_fields('html'); my $html_ftp_data = _get_ftp_fields('html'); my $curr_user_data = _get_user_fields('curr'); my $curr_contact_data = _get_contact_fields('curr'); my $curr_ftp_data = _get_ftp_fields('curr'); my %html_acc_data = (%{$html_user_data}, %{$html_ftp_data}); my %curr_acc_data = (%{$curr_user_data}, %{$curr_ftp_data}); if ($VARIANT_3 && $html_user_data->{account_password} ne $curr_user_data->{account_password}) { update_rwi2_user($html_user_data->{account_password}); } if ($html_user_data->{lost_password_email} ne $curr_user_data->{lost_password_email}) { $data{update_lost_password_email} = $html_user_data->{lost_password_email}; delete $html_acc_data{lost_password_email}; delete $curr_acc_data{lost_password_email}; } map { if ( $html_contact_data->{$_} ne $curr_contact_data->{$_} ) { $data{update_contacts} = $html_contact_data; } } keys %{$html_contact_data}; map { if ( $html_acc_data{$_} ne $curr_acc_data{$_} ) { $data{update_settings} = \%html_acc_data; } } keys %html_acc_data; %html_acc_data = (%html_acc_data,%{$html_contact_data}); _store_account_info(\%html_acc_data); return (\%data); } sub update_contacts { my $update_contact_data = shift; my $attributes = update_contacts_order( $update_contact_data ); my $response = $wsb->update_contacts( $attributes ); if (not $response->{is_success}) { display_account_info("$response->{attributes}{create_items}[0]{major_text}: $response->{response_text} "); exit; } } sub update_account_settings { my $error; my $update_acc_data = shift; my $attributes = update_account_settings_order( $update_acc_data ); my $response = $wsb->update_inventory_item( $attributes ); if (not $response->{is_success}) { display_account_info("$response->{attributes}{create_items}[0]{major_text}: $response->{response_text} "); exit; } } sub update_lost_password_email { my $lost_password_email = shift; my $account_username = lookup_curr_account_value('account_username'); my $response = $wsb->update_lost_password_email($account_username, $lost_password_email); if ( not $response->{is_success} ) { display_account_info("Error updating lost password email: ".$response->{response_text}); exit; } } sub update_rwi2_user { my $new_password = shift; my @users = ({ password => $new_password, user_id => lookup_value('rwi2_user_id'), }); my $attributes = { users => \@users, }; my $response = $wsb->update_rwi2_user($attributes); if (not $response->{is_success}) { display_account_info($response->{response_text}); exit; } } ######################### PACKAGE INFO FUNCTIONS ########################################### # No changing expiry date when upgrading. sub do_upgrade_package { my $package_name = lookup_curr_account_value('package_name'); my $package_title = _get_package_title($package_name); store_curr_account_value('package_title', $package_title); store_value('curr_action', 'upgrade_package'); display_package_info(); } sub display_package_info { my %HTML; $HTML{message} = shift; $HTML{packages} = _make_select_html(); my $enable_set_expiry_date = lookup_value('dflt_enable_set_expiry_date'); if ( $enable_set_expiry_date ) { my ($year,$month,$day) = Today(); my $exp_year = lookup_curr_account_value('exp_year') || $year+1; my $exp_month = lookup_curr_account_value('exp_month') || $month; my $exp_day = lookup_curr_account_value('exp_day') || $day; $HTML{years_menu} = build_year_menu($year, $year+10, $exp_year); $HTML{months_menu} = build_month_menu($exp_month); $HTML{days_menu} = build_day_menu($exp_day); $HTML{set_expiry_date} = 1; } $HTML{terms_url} = lookup_value('dflt_terms_url'); $HTML{package_comparison_url} = lookup_value('dflt_package_comparison_url'); $HTML{trial_enabled} = 'checked' if lookup_curr_account_value('trial'); $HTML{show_trial} = lookup_value('curr_action') ne 'upgrade_package'; $HTML{show_expiry} = lookup_value('curr_action') ne 'upgrade_package' && $enable_set_expiry_date; $HTML{action} = 'display_package_info'; print_form(template => "$path_templates/select_package.html", data => \%HTML); } sub do_collect_package_info { my $probable_package_title = _get_package_title($in{package_name}); store_curr_account_value('probable_package_title', $probable_package_title); store_curr_account_value('probable_package_name', $in{package_name}); store_curr_account_value('trial', $in{trial}); _get_expiry_info (); if ( my $errors = _validate_package_info() ) { display_package_info("Correct and re-enter.
$errors"); } else { display_charges_info(); } } ######################### EXPIRY INFO FUNCTIONS ########################################### sub do_change_expiry { display_change_expiry(); } sub display_change_expiry { my %HTML; my $message = shift; $HTML{message} = $message; $HTML{action} = 'display_change_expiry'; $HTML{account_username} = lookup_curr_account_value('account_username'); $HTML{status} = lookup_curr_account_value('trial') ? 'Trial' : 'Live'; $HTML{package_title} = lookup_curr_account_value('package_title'); $HTML{expiry_date} = lookup_curr_account_value('expiry_date'); my $expiry_data = _get_expiry_data_from_string(); my ($year,$month,$day) = Today(); $HTML{years_menu} = build_year_menu($year, $year+10, $in{exp_year} || $expiry_data->{exp_year}+1); $HTML{months_menu} = build_month_menu($in{exp_month} || $expiry_data->{exp_month}); $HTML{days_menu} = build_day_menu($in{exp_day} || $expiry_data->{exp_day}); $HTML{expiry_disabled} = 'disabled' if not lookup_value('dflt_enable_set_expiry_date'); print_form(template => "$path_templates/change_expiry.html", data => \%HTML); } sub do_collect_expiry_info { _get_expiry_info(); # get info from browser if ( my $errors = _validate_expiry_info() ) { display_change_expiry($errors); } else { change_expiry(); } exit; } sub change_expiry { my $attributes = update_expiry_order(); my $response = $wsb->update_inventory_item( $attributes ); if ($response->{is_success}) { manage_account("Expiry Date successfully updated."); } else { display_change_expiry("$response->{attributes}{create_items}[0]{major_text}: $response->{response_text} "); } } ######################### CHARGES INFO FUNCTIONS ########################################### sub display_charges_info { my %HTML; if ( lookup_value('curr_action') eq 'go_live' || !lookup_curr_account_value('trial') ) { _get_charges_info(); $HTML{show_charges} = 1; } $HTML{account_username} = lookup_curr_account_value('account_username'); $HTML{package_name} = lookup_curr_account_value('probable_package_name') || lookup_curr_account_value('package_name'); $HTML{package_title} = lookup_curr_account_value('probable_package_title') || lookup_curr_account_value('package_title'); $HTML{status} = (lookup_value('curr_action') eq 'go_live' || !lookup_curr_account_value('trial')) ? 'Live' : 'Trial'; $HTML{price} = lookup_curr_account_value('price'); $HTML{cc_fields} = $wsb->cc_fields("$path_templates/cc_fields.html") if $WSB{F_SHOW_CC_FIELDS}; $HTML{action} = 'display_charges_info'; print_form(template => "$path_templates/show_charges.html", data => \%HTML); } sub do_process_payment_info { process_cc_fields() if $WSB{F_VERIFY_CC}; my $curr_action = lookup_value('curr_action'); my ($attributes, $message_type); if ($curr_action eq 'create') { if ( $VARIANT_3 ) { my $error = create_rwi2_user(); error_out($error) if $error; } $attributes = create_new_wsb_acccount_order(); } elsif ($curr_action eq 'upgrade_package') { $attributes = upgrade_package_order(); } elsif ($curr_action eq 'go_live') { $attributes = go_live_order(); } else { error_out("No valid action."); } $attributes->{handling} = $WSB{process_immediate} ? 'process' : 'save'; my $response = $wsb->create_order( $attributes ); if ($response->{is_success}) { my $message; if ( $WSB{process_immediate} ) { $message = "Order # ".$response->{attributes}{order_id}." processed successfully."; store_curr_account_value('inventory_item_id', $response->{attributes}{create_items}[0]{product_item}{inventory_item_id}); manage_account($message); send_end_user_message() if lookup_value('dflt_enable_client_messaging'); } else { $message = "Order # ".$response->{attributes}{order_id}." saved successfully."; if (lookup_value('dflt_enable_rwi2')) { do_display_wsb_accounts($message); } else { do_start_up($message); } } } else { delete_rwi2_user() if $curr_action eq 'create' and $VARIANT_3; error_out("$response->{response_text}: $response->{attributes}{create_items}[0]{major_text}"); } } sub send_end_user_message { my %DATA; my $brand_contact_data = _get_contact_data_by_id(lookup_curr_account_value('brand_contact_id')); my $user_contact_data = _get_contact_data_by_id(lookup_curr_account_value('contact_id')); my $message_type = lookup_value('curr_action'); if ($message_type eq 'create') { # Create Account Trial if ( lookup_curr_account_value('trial')) { $message_type = 'create_trial'; # Create Account Live } else { $DATA{account_name} = lookup_curr_account_value('account_username'); $DATA{password} = lookup_curr_account_value('account_password_mail'); $message_type = 'create_live'; } } my $dflt_message_data = lookup_value('dflt_message_data'); my $curr_message_data = $dflt_message_data->{$message_type}; # Upgrade, Trial Go Live, Create Account Live, Create Account Trial. $DATA{mail_from} = $brand_contact_data->{email}; $DATA{mail_to} = $user_contact_data->{email}; $DATA{to_first_name} = $user_contact_data->{first_name}; $DATA{to_last_name} = $user_contact_data->{last_name}; $DATA{subject} = $curr_message_data->{'subject'}; $DATA{rsp_wsb_org_name} = $brand_contact_data->{org_name}; $DATA{rsp_wsb_email} = $brand_contact_data->{email}; $DATA{phone_number} = $brand_contact_data->{phone}; $DATA{rsp_brand_domain_name_url} = _make_brand_url_string(); send_email(template => "$path_templates/messaging/$message_type.eml", data => \%DATA); } sub _make_brand_url_string { my ($brand_url, $uno); if ( $brand_url = lookup_curr_account_value('brand_url') ) { $brand_url = "http://".$brand_url if not $brand_url =~ /^http/; $brand_url .= '?u=l'.$uno if $uno = lookup_curr_account_value('uno'); $brand_url =~ s/\s+//; } return $brand_url; } ######################### CREATE RWI2 USER FUNCTIONS ########################################### sub is_rwi2_avail { my $attributes = check_rwi2_user_order(); my $result = $wsb->check_rwi2_user($attributes); if (not $result->{is_success}) { error_out($result->{response_text}); } else { return $result->{attributes}[0]{is_available}; } } sub is_wsb_avail { my $result = $wsb->query_inv_item_by_description(lookup_curr_account_value('account_username')); if ($result->{is_success}) { # avail if empty result if ( scalar @{$result->{attributes}{result}} ) { return 0; } else { return 1; } } else { error_out($result->{error}); } } sub check_rwi2_user_order { my @users = ({ name => lookup_value('rwi2_username'), }); my $attributes = { users => \@users, }; return $attributes; } sub create_rwi2_user { my $rwi2_username = lookup_value('rwi2_username'); my $rwi2_password = lookup_value('rwi2_password'); my $rwi2_confirm_password = lookup_value('rwi2_password'); my $result = $wsb->create_user($rwi2_username, $rwi2_password, $rwi2_confirm_password); return $result->{error} if not $result->{is_success}; store_value('rwi2_user_id', $result->{attributes}{user_id}); return; } sub delete_rwi2_user { my $rwi2_user_id = lookup_value('rwi2_user_id'); my $result = $wsb->delete_rwi2_user($rwi2_user_id); } ######################### GO LIVE FUNCTIONS ########################################### sub do_go_live { store_value('curr_action', 'go_live'); display_charges_info(); } ######################### LOGIN WSB ACCOUNT FUNCTIONS ########################################### sub do_login_wsb_account { my %HTML; $HTML{uno} = lookup_curr_account_value('uno'); $HTML{txt_user_name} = lookup_curr_account_value('account_username'); my $result = _get_account_password(); if ( not $result->{is_success} ) { do_display_wsb_account('Please try to login later.'); exit; } $HTML{pwd_password} = $result->{attributes}{product_data}{account_password}; my $reseller_domain_name = lookup_curr_account_value('brand_url'); $HTML{login_url} = "http://$reseller_domain_name/sebase/common_loginaction.jsp"; print_form(template => "$path_templates/login_wsb_account.html", data => \%HTML, not_framed => 1); } ######################### ORDER FUNCTIONS ########################################### sub create_new_wsb_acccount_order { my ($attributes, @create_items, @contacts, $product_data ); #my $user_data = lookup_curr_account_value('user_data'); #my $contact_data = lookup_curr_account_value('contact_data'); #my $ftp_data = lookup_curr_account_value('ftp_data'); my $user_data = _get_user_fields(); my $contact_data = _get_contact_fields(); my $ftp_data = _get_ftp_fields(); my $language = lookup_curr_account_value('language'); my $brand_name = lookup_value('dflt_brand_name'); my $package_name = lookup_curr_account_value('probable_package_name'); my $trial = lookup_curr_account_value('trial'); my $expiry_date = _convert_date_from_digit_to_string() if not $trial and ( lookup_value('dflt_enable_set_expiry_date') or lookup_value('dflt_expiry_period') ); my $user_id = lookup_value('rwi2_user_id'); my $domain = lookup_curr_account_value('domain') ; $product_data = { %{$user_data}, %{$ftp_data}, language => $language, brand_name => $brand_name, package_name => $package_name, domain => $domain, }; @contacts = ($contact_data); @create_items = ({ service => 'wsb', object_type => 'account', orderitem_type => $trial ? 'trial' : 'new', $expiry_date ? (expiry_date => $expiry_date ) : (), contact_set => { owner => 0 }, product_data => $product_data, } ); $attributes = { user_id => $user_id, create_items => \@create_items, contacts => \@contacts, handling => lookup_value('dflt_process_immediate') ? 'process' : 'save', }; return $attributes; } sub upgrade_package_order { my ($attributes, @create_items, @contacts, $product_data ); my $user_id = lookup_value('rwi2_user_id'); my $inventory_item_id = lookup_curr_account_value('inventory_item_id'); my $trial = lookup_curr_account_value('trial'); my $expiry_date = _convert_date_from_digit_to_string() if not $trial; my $package_name = lookup_curr_account_value('probable_package_name'); $product_data = { package_name => $package_name, mc_action => 'upgrade', }; @create_items = ({ service => 'wsb', object_type => 'account', orderitem_type => 'modcontract', inventory_item_id => $inventory_item_id, $expiry_date ? (expiry_date => $expiry_date ) : (), product_data => $product_data, } ); $attributes = { user_id => $user_id, create_items => \@create_items, }; return $attributes; } sub update_contacts_order { my $contacts = shift; my $contact_id = lookup_curr_account_value('contact_id'); my $attributes = { id => $contact_id, %{$contacts}, }; return $attributes; } sub update_account_settings_order { my $inventory_item_id = lookup_curr_account_value('inventory_item_id'); my $ftp_password = lookup_curr_account_value('ftp_password'); my $product_data = { ftp_server => lookup_curr_account_value('ftp_server'), ftp_port => lookup_curr_account_value('ftp_port'), ftp_username => lookup_curr_account_value('ftp_username'), $ftp_password ? (ftp_password => $ftp_password ) : (), ftp_default_directory => lookup_curr_account_value('ftp_default_directory'), ftp_index_filename => lookup_curr_account_value('ftp_index_filename'), language => lookup_curr_account_value('language'), account_password => lookup_curr_account_value('account_password'), domain => lookup_curr_account_value('domain'), }; my $attributes = { service => 'wsb', object_type => 'account', inventory_item_id => $inventory_item_id, product_data => $product_data, }; return $attributes; } sub update_expiry_order { my @inventory_items; my $expiry_date = _convert_date_from_digit_to_string(); push @inventory_items, { inventory_item_id => lookup_curr_account_value('inventory_item_id'), service => 'wsb', expiry_date => $expiry_date, }; my $attributes = { user_id => lookup_value('rwi2_user_id'), inventory_items => \@inventory_items, }; return $attributes; } sub go_live_order { my $product_data = { mc_action => 'golive', package_name => lookup_curr_account_value('package_name'), }; my @create_items = ({ service => 'wsb', object_type => 'account', orderitem_type => 'modcontract', inventory_item_id => lookup_curr_account_value('inventory_item_id'), product_data => $product_data, } ); my $attributes = { user_id => lookup_value('rwi2_user_id'), create_items => \@create_items, }; return $attributes; } ######################### VALIDATION FUNCTIONS ########################################### sub _validate_account_info { my ($error, $error_msg); if ($VARIANT_3 && lookup_value('curr_path') eq 'create') { if ( not is_rwi2_avail() or not is_wsb_avail() ) { $error_msg = "Account name is not available.

"; } } my $curr_account = lookup_value('sd_curr_account_info'); my $validate_passwd = lookup_value('curr_path') eq 'create'; my $user = lookup_value('dflt_enable_rwi2') ? 'rwi2' : 'wsb'; $error_msg .= $error."
" if $error = $wsb->check_username_syntax($user, $curr_account->{account_username}); if ( $validate_passwd or $curr_account->{account_password} or $curr_account->{confirm_password} ) { $error_msg .= $error."
" if $error = $wsb->check_password_syntax($user, $curr_account->{account_password},$curr_account->{confirm_password}); } $error_msg .= $error."
" if $error = $wsb->check_email_syntax($curr_account->{lost_password_email}); $error_msg .= $error."
" if $error = $wsb->validate_ftp_settings(_get_ftp_fields()); $error_msg .= $error."
" if $error = $wsb->validate_contacts(_get_contact_fields()); $error_msg .= $error."
" if $error = $wsb->check_domain_syntax($curr_account->{domain}); return $error_msg; } # Validate that package not available for trial is not select for trial. sub _validate_package_info { my $error; my $trial = lookup_curr_account_value('trial'); if ( $trial ) { my $default_trial; my $package_name = lookup_curr_account_value('probable_package_name'); map { $default_trial = $_->{offertrial} if $package_name eq $_->{key}; } @{lookup_value('dflt_packages')}; return "This package is not available for Trial." if $trial ne $default_trial; } return _validate_expiry_info(); } sub _validate_expiry_info { if ( not lookup_curr_account_value('trial') and ( lookup_value('dflt_enable_set_expiry_date') or lookup_value('dflt_expiry_period') ) ) { my %data; $data{exp_year} = lookup_curr_account_value('exp_year'); $data{exp_month} = lookup_curr_account_value('exp_month'); $data{exp_day} = lookup_curr_account_value('exp_day'); return $wsb->validate_expiry_info(\%data); } } ######################### AUXILLIARY GET FUNCTIONS ########################################### sub _get_account_info { my %account_info = (%{_get_user_fields('html')},%{_get_contact_fields('html')}, %{_get_ftp_fields('html')}); _store_account_info(\%account_info); } sub _store_account_info { my $account_info = shift; map { store_curr_account_value($_, $account_info->{$_}); } keys %{$account_info}; store_curr_account_value('language', $in{language}); if ( $VARIANT_3 ) { store_value('rwi2_username', lookup_curr_account_value('account_username')); store_value('rwi2_password', lookup_curr_account_value('account_password')); } } sub _get_upgradable_packages { my $package_name = shift; my ( $pack, @upgradable_packages, @dflt_packages_bk); my $dflt_packages = lookup_value('dflt_packages'); while ( @{$dflt_packages} ) { $pack = shift @{$dflt_packages}; push @upgradable_packages, $pack if $pack->{sell}; push @dflt_packages_bk, $pack; } if ( $package_name ) { while ( @upgradable_packages ) { $pack = pop @upgradable_packages; last if $package_name eq $pack->{key}; } } store_value('dflt_packages', \@dflt_packages_bk); return \@upgradable_packages; } sub _get_package_title { my $package_name = shift; my $package_title; map { $package_title = $_->{name} if $package_name eq $_->{key}; } @{lookup_value('dflt_packages')}; return $package_title; } sub _get_greatest_package_name { map { return $_->{key} if $_->{sell}; } @{lookup_value('dflt_packages')}; } sub _get_expiry_info { my ($year,$month,$day) = Today(); my $exp_year = $in{exp_year} || $year+1; my $exp_month = $in{exp_month} || $month; my $exp_day = $in{exp_day} || $day; store_curr_account_value('exp_year', $exp_year); store_curr_account_value('exp_month',$exp_month); store_curr_account_value('exp_day', $exp_day); } sub _get_expiry_data_from_string { my (%data,$exp_year,$exp_month,$exp_day); my $expiry_date = lookup_curr_account_value('expiry_date'); my ($year,$month,$day) = Today(); if ( $expiry_date eq 'N/A') { $exp_year = $year; $exp_month = $month; $exp_day = $day; } else { $expiry_date =~ /^(\d+)-(\w+)-(\d+)$/; $exp_year = $3; $exp_month = $2; $exp_day = $1; $exp_day = $2 if $exp_day =~ /^(0)(\d)$/; # Convert month from a string to a digit. my @mos = qw(Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec); for (my $i = 1; $i <= 12; $i++) { $exp_month = $i if $exp_month eq $mos[$i-1]; } } $data{exp_year} = $exp_year; $data{exp_month} = $exp_month; $data{exp_day} = $exp_day; return \%data; } sub _get_charges_info { my $price = _get_price(); store_curr_account_value('price',$price ); } sub _get_price { my ($price, $initial_fee, $total_price); my $package_name = lookup_curr_account_value('probable_package_name') || lookup_curr_account_value('package_name'); my $orderitem_type = lookup_value('curr_action') eq 'upgrade_package' ? 'modcontract' : 'new'; my $inventory_item_id = lookup_curr_account_value('inventory_item_id'); # Obtain from RWI2 if ( lookup_value('dflt_set_percentage_price') ){ my $result = $wsb->get_product_price($package_name, $orderitem_type, $inventory_item_id); if ($result->{is_success}) { $initial_fee = $result->{attributes}[0]{ancillary_price}; $price = $result->{attributes}[0]{price}; $total_price = $initial_fee + $price; $total_price = sprintf '%.2f', $total_price + ($total_price * lookup_value('dflt_price_percentage')/100); } else { error_out($result->{response_text}); } # Obtain from config } else { map { $price = $_->{price} if $package_name eq $_->{key}; } @{lookup_value('dflt_packages')}; $initial_fee = $orderitem_type eq 'new' ? $price : 0; $total_price = $initial_fee + $price; } return $total_price/100; } sub _get_contact_data_by_id { my $contact_id = shift; my $result = $wsb->query_contact_by_id($contact_id); if ($result->{is_success}) { return $result->{attributes}{result}[0]; } else { error_out($result->{response_text}); } } sub _get_user_fields { my $source = shift; my @user_fields = qw(account_username account_password confirm_password lost_password_email domain); my $response = _get_fields(\@user_fields, $source); return $response; } sub _get_contact_fields { my $source = shift; my @contact_fields = qw(first_name last_name title org_name address1 address2 address3 city state postal_code country phone fax email); my $response = _get_fields(\@contact_fields, $source); return $response; } sub _get_ftp_fields { my $source = shift; my @ftp_fields = qw(ftp_server ftp_port ftp_username ftp_password ftp_confirm_password ftp_default_directory ftp_index_filename); # if dflt_enable_update_ftp = 0, always read only from the config. my $type = lookup_value('dflt_enable_update_ftp') ? $source : 'dflt'; my $response = _get_fields(\@ftp_fields, $type); $response->{ftp_confirm_password} = lookup_value('dflt_ftp_password') if lookup_value('dflt_ftp_password'); return $response; } sub _get_fields { my $fields = shift; my $source = shift; my ($field_value, %fields_data); foreach ( @{$fields} ) { if ($source eq 'dflt') { $field_value = lookup_value('dflt_'.$_); } elsif ($source eq 'html') { $field_value = $in{$_}; } elsif ($source eq 'curr') { $field_value = lookup_value('dflt_'.$_) || lookup_curr_account_value($_); } elsif ($source eq 'not_dflt') { $field_value = $in{$_} || lookup_curr_account_value($_); } else { $field_value = lookup_value('dflt_'.$_) || $in{$_} || lookup_curr_account_value($_); } $field_value =~ s/^\s+|\s+$//g; %fields_data = (%fields_data, $_ => $field_value); } return \%fields_data; } sub process_cc_fields { my %data = ( p_cc_num => $in{p_cc_num}, p_cc_type => $in{p_cc_type}, p_cc_exp_mon => $in{p_cc_exp_mon}, p_cc_exp_yr => $in{p_cc_exp_yr} ); my $result = $wsb->verify_cc_fields(\%data); error_out($result->{error}) if not $result->{is_success}; } sub _make_select_html { my $curr_package_name = lookup_curr_account_value('package_name'); my $probable_package_name = lookup_curr_account_value('probable_package_name'); my ($selected, $html, $trial_avail); map { $selected = ""; $trial_avail = ""; $selected = ' selected ' if $probable_package_name and $_->{key} eq $probable_package_name; if ( lookup_value('curr_action') ne 'upgrade_package' ) { $trial_avail = $_->{offertrial} ? " (Trial Available)" : " (Trial Not Available)"; } $html .= "
EOF } else { foreach $record (@records) { my $w_action = $waiting_actions->{$record->{req_type}}; $w_action||=$record->{req_type}; # if undefined or new action $HTML{waiting_history} .= < EOF } } $HTML{cgi} = $cgi; $HTML{reg_username} = $reg_username; $HTML{domain_name} = $reg_domain; $HTML{expiredate} = $expiredate; $HTML{waiting_xpack_requests_no} = $waiting_xpack_requests_no; print_html_form(template => "$path_templates/waiting_history.html", data => \%HTML); } # print html header sub print_html_form { my %args = @_; $args{title} = $args{title} || 'Manage Your Domain'; my $template = HTML::Template->new( cache => 1, filename => $args{template}, die_on_bad_params => 0, ); $template->param( CGI => $cgi, %{ $args{data} }, ); if (not $args{not_framed}) { # my $content = $template->output; # $template = HTML::Template->new( # cache => 1, # filename => "$path_templates/get_all_info.html", # die_on_bad_params => 0, # ); # $template->param(CONTENT => $content); } # $template->param( # CGI => $cgi, # %{ $args{data} }, # user_id => $user_id, # ); print_header(); print $template->output; } opensrs-client-3.0.0/doc/0000755017777601777760000000000010770014215016302 5ustar nobodynogroup00000000000000opensrs-client-3.0.0/doc/credit_card_info.txt0000644017777601777760000000150510770014202022316 0ustar nobodynogroup00000000000000Upon a successful registration or transfer, the template client/templates/reg_system/message.txt is sent to the administrator if the configuration flag is set to true. (See client/cgi/reg_system.cgi and client/etc/OpenSRS.conf for the usage of "message.txt", "F_SEND_ORDERS" and "$ADMIN_EMAIL"). By default the template does not contain customer payment information (credit card number, etc.). If you have the proper network and/or email securities in place, you may add credit card information to the template by adding the following section to message.txt: ---------------------------------------------------------------------- Payment Information: ---------------------------------------------------------------------- Card Type: {{p_cc_type}} Card #: {{p_cc_num}} Exp Date: {{p_cc_exp_mon}}/{{p_cc_exp_yr}} opensrs-client-3.0.0/doc/documentation.txt0000644017777601777760000000041610770014202021711 0ustar nobodynogroup00000000000000 You can find all current OpenSRS documentation at: https://rrc.tucows.com/documentation Please login using your Reseller username and password. Installation and configuration of this client code is described in the document named "Reseller Client Library (RCL)". opensrs-client-3.0.0/doc/return_codes.txt0000644017777601777760000000244310770014202021536 0ustar nobodynogroup00000000000000Return codes: 200 Command successful 250 Command successfully submitted to an asynchronous registry for processing # lookup return codes 210 Domain available 211 Domain taken 221 Domain taken (a waiting registration exists in OpenSRS) (for asyncronous registries only) # rate limiting errors 300 exceeded max command rate 310 exceeded max simultaneous connections # internal errors 400 internal server error 405 registry error # authentication errors 410 reseller authentication error 415 registrant (end-user) authentication error # command errors 430 invalid command 435 permission denied subuser permissions 437 cannot process command because there is already another request waiting on this domain # quota errors 440 exceeded registration quota 445 exceeded nameserver quota 447 exceeded subuser quota # data errors 460 missing required field 465 invalid data supplied domain syntax, contact info, duplicate nameservers, etc. # request errors 480 item not found (domain, nameserver, profile, etc) 485 entity already exists (nameserver, domain, subuser, etc) ie, domain taken 486 entity already exists in a processing state (usually a domain registration) trying again in a few seconds to a minute should resolve the issue (i.e. show it truly taken or available) 487 domain not transferrable opensrs-client-3.0.0/etc/0000755017777601777760000000000010770014215016310 5ustar nobodynogroup00000000000000opensrs-client-3.0.0/etc/Cert.conf0000644017777601777760000000547110770014202020057 0ustar nobodynogroup00000000000000# OpenSRS client config. file for Digital Certificate services use vars qw(%REG_CERT @SERVER_TYPES %SERVER_TYPES @APPROVER_TYPES @CERT_PRODUCTS %CERT_PRODUCTS %RENEWALS); %REG_CERT = ( # 1 - feature enabled, 0 - feature disabled debug => 0, process_immediate => 1, # allow renewals? renewals_enabled => 0, # maximum registration period (years) max_period => 3, # Email address to send inquires for Digital Certificates orders. # If empty OpenSRS.conf's $ADMIN_EMAIL will be used. inquires_email => '', # this is where CSR Generation Instructions are: csr_help_url => 'https://ssl-certificate.info/geotrust_CSR.html', # URLs for "GeoTrust Subscriber Agreement" link quickssl_agreement_url => 'https://certs.tucows.com/geotrust_agreements/quickssl.htm', truebizid_agreement_url => 'https://certs.tucows.com/geotrust_agreements/truebiz.htm', # send order placement confirmation email to client send_order_placement_confirmation => 1, F_VERIFY_CC => 1, ); $REG_CERT{F_VERIFY_CC} = $REG_CERT{F_VERIFY_CC} && $F_SHOW_CC_FIELDS; # to disable particular server(s) - comment out appropriate line(s) @SERVER_TYPES = ( 'apacheopenssl', 'Apache + OpenSSL', 'apachessl', 'Apache + MOD SSL', 'apacheraven', 'Apache + Raven', 'apachessleay', 'Apache + SSLeay', 'c2net', 'C2Net Stronghold', 'ibmhttp', 'IBM HTTP', 'iplanet', 'iPlanet Server 4.1', 'dominogo4625', 'Lotus Domino Go 4.6.2.51', 'dominogo4626', 'Lotus Domino Go 4.6.2.6+', 'domino', 'Lotus Domino 4.6+', 'iis4', 'Microsoft IIS 4.0', 'iis5', 'Microsoft IIS 5.0', 'netscape', 'Netscape Enterprise/FastTrack', 'zeusv3', 'Zeus v3+', 'apache2', 'Apache 2', 'apacheapachessl', 'Apache + ApacheSSL', 'cobaltseries', 'Cobalt Series', 'cpanel', 'Cpanel', 'ensim', 'Ensim', 'hsphere', 'Hsphere', 'ipswitch', 'Ipswitch', 'plesk', 'Plesk', 'tomcat', 'Tomcat', 'weblogic', 'Weblogic - all versions', 'website', 'O\'Reilly Website Professional', 'webstar', 'Webstar', 'iis', 'Microsoft Internet Information Server', 'other', 'Other', ); %SERVER_TYPES = @SERVER_TYPES; # to disable particular product(s) - comment out appropriate line(s) @CERT_PRODUCTS = ( 'quickssl', 'QuickSSL', 'quicksslpremium', 'QuickSSL Premium', 'truebizid', 'True BusinessID', 'truebizidwildcard', 'True BusinessID Wildcard', ); %CERT_PRODUCTS = @CERT_PRODUCTS; # to disable particular email type(s) - comment out appropriate line(s) @APPROVER_TYPES = ( 'DOMAIN', 'GENERIC', 'MANUAL', ); %RENEWALS = ( # webserver types that mandate a new CSR to be generated with # every certificate renewal csr_regenerate_forced_types => { iis4 => 1, iis5 => 1, iis => 1, }, ); 1; opensrs-client-3.0.0/etc/Dns_manage.conf0000644017777601777760000000104110770014202021203 0ustar nobodynogroup00000000000000# OpenSRS client config. file for DNS services use vars qw(%DNS_MANAGE); %DNS_MANAGE = ( # 1 - feature enabled, 0 - feature disabled debug => 1, # set number of available fields for adding new records # in the zone file bulk_factor => 2, # set the url to external password management site password_url => 'https://unique_name.servicecontrolpanel.com', # set the url to password recovery site password_recovery => 'https://unique_name.servicecontrolpanel.com/index?action=forgot_password', ); 1; opensrs-client-3.0.0/etc/Email.conf0000644017777601777760000000535610770014202020213 0ustar nobodynogroup00000000000000#!/usr/bin/perl # opensrs client conf file for email services use vars qw(%REG_EMAIL %EMAIL_REG_PERIODS ); %REG_EMAIL = ( # boolean: 1 is true, 0 is false debug => 0, # NOTA BENE -- # The configuration parameters "base_capacity", # "capacity_upgrade_multiples" and "max_capacity_increments" # are use to validate order information before it is sent # to the Tucows servers. These values should match exactly # the current email account settings policies set out # by Tucows (in terms of maximum account size, etc...). # If these values do not match, there's a chance that your # orders submitted to the Tucows servers will fail # because the order data does not fall within the accepted # email account parameters. Please check with a Tucows # representative for the correct values for these parameters. # this is the base capacity for new email accounts base_capacity => 250, # upgrades in email storage capacity are provided # in multiple of megabytes capacity_upgrade_multiples => 250, #MB # email account capacity is capped at so many # increments of the previous multiple setting. # total max capacity is: # (max_capacity_increments * capacity_upgrade_multiples ) + base_capacity # eg. (19 * 250) + 250 = 5000 MB max_capacity_increments => 19, # this flag tells the CGI to use either 'process' or # 'save' for the handle value in the em_register/email # API call. process_immediate => 0, # these numbers help show how much you will charge your # customer, so these number should likely be higher # than the Tucows reseller rates base_box_rate => 0.75, imap_rate => 0.00, storage_rate => 0.00, F_VERIFY_CC => 1, # verify credit card number F_ENABLE_CVV => 0, # collect credit card CVV number F_SEND_ORDERS => 1, # send orders to $ADMIN_EMAIL F_SEND_THANKYOU => 1, # send thank you note to customer ); $REG_EMAIL{F_VERIFY_CC} = $REG_EMAIL{F_VERIFY_CC} && $F_SHOW_CC_FIELDS; # this list is needed to build upgrades selection # of email storage capacity $REG_EMAIL{'storage_upgrade_list'} = { map {$_, $_ *$REG_EMAIL{'capacity_upgrade_multiples'} } (0..$REG_EMAIL{'max_capacity_increments'}) } ; 1; opensrs-client-3.0.0/etc/EmailDefense.conf0000644017777601777760000000503210770014202021474 0ustar nobodynogroup00000000000000#!/usr/bin/perl # opensrs client conf file for antispam services use vars qw(%ANTISPAM %DEFAULT_VALUES); %ANTISPAM = ( # boolean: 1 is true, 0 is false debug => 0, process_immediate => 1, reseller_email => 'reseller@email.com', ed_portal_url => '', MAX_USERS => 5, # max number of accounts a user can add at a time. NUM_ITEMS_PER_PAGE => 20, # max num of domains displayed on a page. NUM_PAGE_LINKS => 10, # max num of page links displayed on a page. F_VERIFY_CC => 0, # verify credit card info. F_SHOW_CC_FIELDS => 0, # show credit card fields to get credit card info. PROTOCOL_VERSION => '1.4', ); # Values that are fed as hardcoded input into the application. %DEFAULT_VALUES = ( dflt_domain_name => '', #either none or both must be present! #dflt_username => '', #dflt_password => '', # If you wish to restrict users to certain roles, comment out the undesirable ones here. dflt_user_roles => { 'end_user' => 'End User', 'domain_admin' => 'Domain Administrator', 'quarantine_manager' => 'Quarantine Manager', 'report_manager' => 'Report Manager', }, # This role appears on the drop down menu as default. dflt_html_user_role => 'end_user', # This is a default role for all users. If it has a value, then html page for user roles is skipped. # If it has a value, then password is empty and also skipped. dflt_user_role => '', # If it is false, accounts are registered through quarantine file, # and end user is not asked for a password. dflt_allow_passwd_assgnmt => 0, dflt_server_1 => "", # string consisting of host server, port and preference number. dflt_server_2 => "", # Ex.: "tucows.com,1234,1". dflt_contact_id => '', # if default contact id is specified, end user has to use it, and contact page is skipped. dflt_manage_one_domain => 0,# user can manage only one domain at a time. ); # Verify credit card only if credit card fields are shown for informaion gathering $ANTISPAM{F_VERIFY_CC} = $ANTISPAM{F_VERIFY_CC} && $ANTISPAM{F_SHOW_CC_FIELDS}; $DEFAULT_VALUES{dflt_allow_passwd_assgnmt} = $DEFAULT_VALUES{dflt_allow_passwd_assgnmt} && not $DEFAULT_VALUES{dflt_user_role}; 1; opensrs-client-3.0.0/etc/OpenSRS.conf0000644017777601777760000002644310770014202020455 0ustar nobodynogroup00000000000000#!/usr/bin/perl # opensrs client conf file use vars qw($ADMIN_EMAIL $PATH_SOURCE $PATH_LIB $PATH_TEMPLATES %OPENSRS %REG_SYSTEM %REGISTER %MANAGE $OPENSRS_TLDS_REGEX %RENEW $TEST_SERVER %CANT_SUPPORT %CA_LEGAL_TYPES @CA_LEGAL_TYPES_ORDER %CA_LANGUAGE_TYPES %CA_NATIONALITIES @CA_EXTRA_FIELDS %RACESETTINGS $USE_RACE @CA_LEGAL_TYPES_ORDER $RENEW_EMAIL %MAIL_SETTINGS $F_QUEUE_SUPPLIER_UNAVAILABLE $PATH_LOG $SHOW_DNS_ERRORS $SHOW_REGISTER $F_SHOW_CC_FIELDS $XPACK_MANAGE_WEBDIR $MANAGE_WEBDIR); my $USERNAME = ""; # XXX insert username here my $PRIVATE_KEY = ""; # XXX insert DES key here $ADMIN_EMAIL = 'your_address@your_domain.com'; $RENEW_EMAIL = 'your_address_for_renewal_messages@your_domain.com'; # This is used by the cgi's to qualify the name of the browser # cookie to avoid conflicts between the live and rite environments. # Set it to 1 if this installation goes to the horizon/rite environment. $TEST_SERVER = 1; #permissions for register.cgi script $SHOW_REGISTER = 0; $F_SHOW_CC_FIELDS = 1; $PATH_SOURCE = ""; # e.g., "/home/username/opensrs" $PATH_LOG = "$PATH_SOURCE/var/logs"; $PATH_LIB = "$PATH_SOURCE/lib"; $PATH_TEMPLATES = "$PATH_SOURCE/templates"; %RACESETTINGS = ( DATAFILE => "$PATH_LIB/RACE/CharlintK.storage", MAPFILE => "$PATH_LIB/RACE/MapData-03.txt", PROHIBFILE=> "$PATH_LIB/RACE/ProhibitedCharacters-03.txt", UNASSFILE => "$PATH_LIB/RACE/UnassignedCharacters-03.txt"); # put TLDs in here that you do not wish to support through this interface # formate is a hash like ( '.name' => 1 ). %CANT_SUPPORT = (); # relative web path to web directories $MANAGE_WEBDIR = '/manage'; $XPACK_MANAGE_WEBDIR = '/xpackmanage'; %OPENSRS = ( username => $USERNAME, private_key => $PRIVATE_KEY, REMOTE_PORT => 55000, REMOTE_HOST => "horizon.opensrs.net", REMOTE_HTTPS_PORT => 55443, # OSRS IDN conversion server connection settings REMOTE_IDN_HOST => 'horizon.opensrs.net', REMOTE_IDN_PORT => 55044, IDN_ENCODING_TYPE => 'UTF-8', HTTP_ENCODING => 'UTF-8', IDN_CONVERSION_TOOL_LINK => '', # link to Punycode.cgi connection_type => 'CBC', # CBC, HTTPS crypt_type => '', # Blowfish, DES, or Blowfish_PP (slow!). ONLY important # if connection type is CBC # regular expression that lists the domains serviced by OpenSRS # this should not include the domains that you are not # authorized to register OPENSRS_TLDS_REGEX => "(\.ca|\.(bc|ab|sk|mb|on|qc|nb|ns|pe|nf|nt|nu|yk)\.ca|\.com|\.net|\.org|\.me\.uk|\.net\.uk|\.ltd\.uk|\.plc\.uk|\.co\.uk|\.org\.uk|\.tv|\.vc|\.com\.vc|\.net\.vc|\.org\.vc|\.cc|\.info|\.asia|\.biz|\.name|\.us|\.com\.cn|\.net\.cn|\.org\.cn|\.cn|\.de|\.ch|\.nl|\.fr|\.be|\.eu|\.mobi|\.es)", # Regex of TLDs that support domain locking. TLDS_SUPPORTING_LOCKING => '\.(com|net|org|info|asia|biz|us|name|cc|vc|tv)$', # regular expression that lists the domains which OpenSRS is authoritative for. OPENSRS_AUTHORITY => "(\.com|\.net|\.org|\.tv|\.cc)", # flag for lookup_all_tlds and # array ref of array refs of related TLDs: see the lookup_domain() # and getRelatedTlds() methods in XML_Client. # a TLD must not be repeated in more than one array. # RELATED_TLDS really only comes into play when "lookup_all_tlds" # is set to 1 (ie. true). # # ps. be careful when registering a mix of domains when # the different TLDs have different period years restrictions lookup_all_tlds => 1, # lookup related available domains RELATED_TLDS => [ [ ".com", ".net", ".org", ".info", ".biz", ".asia" ], [ ".me.uk",".co.uk", ".org.uk" ], # with this array, you can provide suggestions # for catchy suffixes to domain names. # [ ".com", ".net", ".org", # "online.com", "wired.com", "plugged.com", # "online.net", "wired.net", "plugged.net", # "online.org", "wired.org", "plugged.org" ], ], # if the following is set, all data to/from OpenSRS will be logged # to this file. Note that the logfile will grow quickly under # even moderate activity, so this should not be set, other than #for debugging purposes xml_logfile => '', LIBPATH => $PATH_LIB, ); # flags affecting cgi's behavior %REG_SYSTEM = ( debug => 0, # boolean: 1 is true, 0 is false # allow clients to provide their own custom data custom_tech_contact => 0, custom_nameservers => 0, # # ********ATTENTION******** # A payment system must be implemented before # giving your customers access to turn auto renew # on for a new domain. #allow_auto_renew => 1, # ************************ F_VERIFY_CC => 1, # verify credit card number F_SEND_ORDERS => 1, # send orders to $ADMIN_EMAIL F_SEND_THANKYOU => 1, # send thank you note to customer post_lookup => { }, F_SUPPORT_CERTS => 1, # determines if certificate operations # are displayed/allowed WEB_CERT_CGI => 'reg_cert.cgi', #URL for reg_cert.cgi # realtime, not a coupon ); $REG_SYSTEM{F_VERIFY_CC} = $REG_SYSTEM{F_VERIFY_CC} && $F_SHOW_CC_FIELDS; %REGISTER = ( debug => 0, ); %MANAGE = ( debug => 0, notice_days => 60, # show expire notice when <=60 days before expiry # the following will allow domains to be placed on registrar-lock, # which will prevent them from being transferrable. allow_domain_locking => 1, # # ********ATTENTION******** # A payment system must be implemented before # giving your customers access to on turn auto renew # or to renew their active domains allow_renewals => 0, show_auto_renew => 0, allow_auto_renewal_message => 0, # ************************ # # setting this will allow your customers to request their username / # password be sent to them through main manage.cgi screen. The # password that is sent can be either that for the main user or the # subuser of the domain, and it can be sent to either the admin # contact, or the owner (registrant) of the domain. Note that if # set to sub-user, and sub-user doesn't exist, an error will be # returned. allow_password_requests => 0, password_send_to_admin => 0, password_send_to_owner => 0, password_send_subuser => 0, # 1 to send sub-user password enable_cira_email_pwd => 0, #************************* # # setting this will allow your customers to modify nameservers # when the domain is locked allow_ns_change_locked_domain => 0, ); @CA_LEGAL_TYPES_ORDER=qw (CCO CCT RES GOV EDU ASS HOP PRT TDM TRD PLT LAM TRS ABO INB LGR OMK MAJ); %CA_LEGAL_TYPES = ( 'ABO' => 'Aboriginal Peoples (individuals or groups) indigenous to Canada', 'ASS' => 'Canadian Unincorporated Association', 'CCO' => 'Corporation (Canada or Canadian province or territory)', 'CCT' => 'Canadian citizen', 'EDU' => 'Canadian Educational Institution', 'GOV' => 'Government or government entity in Canada', 'HOP' => 'Canadian Hospital', 'INB' => 'Indian Band recognized by the Indian Act of Canada', 'LAM' => 'Canadian Library, Archive or Museum', 'LGR' => 'Legal Representative of a Canadian Citizen or Permanent Resident', 'MAJ' => 'Her Majesty the Queen', 'OMK' => 'Official mark registered in Canada', 'PLT' => 'Canadian Political Party', 'PRT' => 'Partnership Registered in Canada', 'RES' => 'Permanent Resident of Canada', 'TDM' => 'Trade-mark registered in Canada (by a non-Canadian owner)', 'TRD' => 'Canadian Trade Union', 'TRS' => 'Trust established in Canada', ); %CA_LANGUAGE_TYPES = ("EN" => "English", "FR" => "French"); %CA_NATIONALITIES = ("CND" => "Canadian citizen", "OTH" => "Foreign citizenship", "RES" => "Canadian permanent resident"); @CA_EXTRA_FIELDS = qw (job_title nationality midle_name language legal_type cira_member trademark description addr_corporative addr_street_name addr_street_cat addr_office title addr_address_number addr_orientation description legal_type member cwa); %RENEW = ( F_SEND_EMAIL => 1, # send renewal info to $RENEW_EMAIL F_SEND_EU_EMAIL=> 1, # email thank-you to end user on renewal PROCESS_LIST_IF_QUEUED => 1, #continue or stop processing renew #for list of domains when one of the renewal request has #been queued at OpenSRS server side allow_password_requests => 0, password_send_to_admin => 0, password_send_to_owner => 0, debug => 0, capability => { '.com' => 1, '.net' => 1, '.org' => 1, '.uk' => 1, '.ca' => 1, '.vc' => 0, '.cc' => 1, '.tv' => 1, '.de' => 1, '.info' => 1, '.biz' => 1,'.us' => 1, '.name' => 1, '.cn' => 1, '.fr' => 1,'.ch' =>1 ,'.nl' => 1, '.eu' => 1, '.be' => 1, '.asia' => 1 } ); ################################################################ #### select type of mail delivery and adjust any necessary variables #### 'sendmail' option is recommended for servers on UNIX based systems #### if you do not have sendmail on your system, set $MAIL_TYPE to 'smtp' %MAIL_SETTINGS = ( MAIL_TYPE => "sendmail", # valid options: sendmail, smtp # MAIL_TYPE => "smtp", #### define this if you set $MAIL_TYPE = 'sendmail' #MAILPROG => '/usr/sbin/sendmail -t -oi -oem', # path and args for sendmail MAILPROG => "cat >>mail.log",#for test system #### recommended option for servers on win32 platform #### define these values if you set $MAIL_TYPE = 'smtp' LOCALHOST => '', SMTP_SERVER => '', SMTP_PORT => 25, ); ################################################################# #Flag to change behaviour on a client side only # lookup - treat 'noservice' as available # if sw_register/renew has been queued - show nice message # otherwise # no changes on a client side for lookup # for sw_register/renew - error message from server # even if request has been queued $F_QUEUE_SUPPLIER_UNAVAILABLE = 1; # to queue or not to queue on a OpenSRS server side # can be changed via RWI per registry, not TLD. # it is better to have F_QUEUE_SUPPLIER_UNAVAILABLE as 1 even # if your OpenSRS settings do not allow queueing. # because client # won't say anything about queueing, if server doesn't # queue the request ################################################################# # The version number shouldn't be modified, else it may cause inaccuracies in # support response. $OpenSRS::VERSION = "3.0.0"; ################################################################# # .de domains are normally disabled for the first 30 days after registration # and need to be enabled by sending the activate_domain request. # If you do not wish to show the end user this capability, make sure # $SHOW_DNS_ERRORS = 0; $SHOW_DNS_ERRORS = 1; 1; opensrs-client-3.0.0/etc/Renewals.conf0000644017777601777760000000121310770014202020730 0ustar nobodynogroup00000000000000# OpenSRS client configuration for tpp_renew.cgi use vars qw(%RENEWALS); %RENEWALS = ( # 1 - feature enabled, 0 - feature disabled debug => 0, process_immediate => 1, # whether or not to show 'Renewal Settings' column show_renewal_settings => 0, cert => { # whether renewals enabled or not. enabled => 1, # url of product specific cgi for renewal processing (it must # implement action 'renew' and take 'id' argument as product # item id). renew_url => '/reg_cert/reg_cert.cgi', # max days before and after expiry when renewals are allowed days_before_expiry => 90, days_after_expiry => 15, }, ); 1; opensrs-client-3.0.0/etc/WSB.conf0000644017777601777760000001454610770014202017620 0ustar nobodynogroup00000000000000#!/usr/bin/perl # opensrs client conf file for wsb services. # Please note, that this version of the client code requires the Date::Calc # perl module. Please review the client code documentation for more details. # # The Impact of this one is that noone will be able to install the # client code without this. ###################### CASES ####################################### #Note to reseller. #Please choose the scenario that applies to your business model. #And make the associated changes to this config file. #Scenario 1: #Each customer will have their own RWI2 username #They will be permitted to have more than one Website Builder Account under #that RWI2 user. #Dflt_enable_rwi2=> 1 #Dflt_rwi2_username=> '', #Dflt_rwi2_password=> '', #Scenario 2: #One RWI2 user is used across all customers #Each customer will have only one website Builder account #Dflt_enable_rwi2=> 0 #Dflt_rwi2_username=> 'oneusername' #Dflt_rwi2_password=> 'onepassword' #Scenario 3: #Each customer has both an RWI2 username and Website Builder account, #which are identical. #Each customer will have only one website builder account #Dflt_enable_rwi2=> 0 #Dflt_rwi2_username=> '', #Dflt_rwi2_password=> '', ###################################################################### use vars qw(%WSB %DEFAULT_VALUES $VARIANT_1 $VARIANT_2 $VARIANT_3 ); %WSB = ( # boolean: 1 is true, 0 is false debug => 0, process_immediate => 1, NUM_ITEMS_PER_PAGE => 50, # max num of domains displayed on a page. F_VERIFY_CC => 0, # verify credit card info. F_SHOW_CC_FIELDS => 1, # show credit card fields to get credit card info. PROTOCOL_VERSION => '1.4', ); # Values that are fed as hardcoded input into the application. %DEFAULT_VALUES = ( # Always mandatory, please note this is the brand of which all customers #will be created beneath dflt_brand_name => 't535mdbtest1', dflt_enable_rwi2 => 0, #either none or both must be present! dflt_rwi2_username => '', dflt_rwi2_password => '', # Enabling settings #defaulted on, so that your customers can manage their accounts, by setting #to 0, they will only be able to order not manage account dflt_enable_manage => 1, dflt_enable_send_password => 1, #defaulted on to allow the ability for your customers to change their #passwords, if you enable this, it is in your best interest to disable #password changing on the builder itself. Go to wsbadmin.com and remove this #setting. dflt_enable_update_password => 1, # 0- do not allow the user to set or manage. For update don't even show the button. Default to the conf time setting dflt_expiry_year_period. # 1- then allow the user to set, and manage the expiry date, and default it to 1 year from now. dflt_enable_set_expiry_date => 0, # If dflt_enable_set_expiry_date = 1, flag dflt_expiry_period is not used. # 0- no expiry; # 1- 1 year from creation date. dflt_expiry_period => 1, dflt_enable_upgrade_package => 1, dflt_enable_update_settings => 1, dflt_enable_go_live => 1, dflt_set_percentage_price => 0, dflt_test_ftp => 1, dflt_enable_client_messaging => 0, dflt_price_percentage => 0, # If this flag is 0, all FTP settings MUST be in config. FTP fields and and Test FTP button are not shown. # If this flag is 1, display FTP settings that are in config and don't allow to update them. dflt_enable_update_ftp => 1, dflt_ftp_server => '', dflt_ftp_port => '', dflt_ftp_username => '', dflt_ftp_password => '', dflt_ftp_default_directory => '', #ex: /public_html dflt_ftp_index_filename => '', dflt_terms_url => '', #If you have a package comparison grid #on your website, you may link to it here. dflt_package_comparison_url => '', # you may copy content of this page, but do not use link to this page #dflt_package_comparison_url => 'https://rrc.tucows.com/wholesale_services/webpublishing/websitebuilder/comparison_grid', dflt_languages => { en => 'English', es => 'Spanish', nl => 'Dutch', de => 'German', it => 'Italian', fr => 'French' }, dflt_packages => [ { key => 'ecomm', sell => 1, name => "Ecommerce Website", offertrial => 1, price => '250', # cents }, { key => 'smallbus', sell => 1, name => "Small Business Website", offertrial => 1, price => '150', # cents }, { key => 'personal', sell => 0, name => "Personal Website", offertrial => 1, price => '100', # cents }, { key => 'starterweb', sell => 1, name => "Starter Website", offertrial => 1, price => '75', # cents }, { key => 'buscard', sell => 1, name => "Business Card", offertrial => 0, price => '10', # cents }, ], # End User messaging, configured in client. dflt_message_data => { create_live => { subject => 'Account is Live Subject', }, create_trial => { subject => 'Account is Trial Subject', }, upgrade_package => { subject => 'Upgrade Package Subject', }, go_live => { subject => 'Go Live Subject', }, }, ); # Verify credit card only if credit card fields are shown for informaion gathering and the order is processed, not just saves. $WSB{F_VERIFY_CC} = $WSB{F_VERIFY_CC} && $WSB{F_SHOW_CC_FIELDS} && $WSB{process_immediate}; $VARIANT_1 = $DEFAULT_VALUES{dflt_enable_rwi2}; $VARIANT_2 = ! $DEFAULT_VALUES{dflt_enable_rwi2} && $DEFAULT_VALUES{dflt_rwi2_username}; $VARIANT_3 = ! $DEFAULT_VALUES{dflt_enable_rwi2} && ! $DEFAULT_VALUES{dflt_rwi2_username}; if ( !$DEFAULT_VALUES{dflt_brand_name}) { print "Configuration file error: Mandatory Brand Name is missing."; exit; } if ( !$DEFAULT_VALUES{dflt_enable_update_ftp} && (!$DEFAULT_VALUES{dflt_ftp_server} || !$DEFAULT_VALUES{dflt_ftp_port} || !$DEFAULT_VALUES{dflt_ftp_username} || !$DEFAULT_VALUES{dflt_ftp_password} || !$DEFAULT_VALUES{dflt_ftp_default_directory} || !$DEFAULT_VALUES{dflt_ftp_index_filename})) { print "Configuration file error: All FTP fields must be present in the config when dflt_enable_update_ftp = 0."; exit; } 1; opensrs-client-3.0.0/lib/0000755017777601777760000000000010770014215016303 5ustar nobodynogroup00000000000000opensrs-client-3.0.0/lib/Date/0000755017777601777760000000000010770014215017160 5ustar nobodynogroup00000000000000opensrs-client-3.0.0/lib/Date/Pcalc.pm0000644017777601777760000030005710770014202020541 0ustar nobodynogroup00000000000000############################################################################### ## Copyright (c) 1999 by J. David Eisenberg ## ## ## ## Documentation and some perl code ## ## Copyright (c) 1995, 1996, 1997, 1998 by Steffen Beyer. ## ## All rights reserved. ## ## ## ## This package is free software; you can redistribute it ## ## and/or modify it under the same terms as Perl itself. ## ## ## ############################################################################### package Date::Pcalc; use strict; use vars qw($VERSION @ISA @EXPORT @EXPORT_OK %EXPORT_TAGS $Year_of_Epoch $Century_of_Epoch $Epoch $pcalc_Language $pcalc_Languages @arr_Days_in_Year @arr_Days_in_Month @arr_Month_to_Text @arr_Day_of_Week_to_Text @arr_Day_of_Week_Abbreviation @arr_Language_to_Text ); require Exporter; @ISA = qw(Exporter AutoLoader); # Items to export into callers namespace by default. Note: do not export # names by default without a very good reason. Use EXPORT_OK instead. # Do not simply export all your public functions/methods/constants. @EXPORT = qw(); @EXPORT_OK = qw( Days_in_Year Days_in_Month Weeks_in_Year leap_year check_date check_business_date Day_of_Year Date_to_Days Day_of_Week Week_Number Week_of_Year Monday_of_Week Nth_Weekday_of_Month_Year Standard_to_Business Business_to_Standard Delta_Days Delta_DHMS Add_Delta_Days Add_Delta_DHMS Add_Delta_YMD System_Clock Today Now Today_and_Now Easter_Sunday Decode_Month Decode_Day_of_Week Decode_Language Compress Uncompress check_compressed Compressed_to_Text Date_to_Text Date_to_Text_Long Calendar Month_to_Text Day_of_Week_to_Text Day_of_Week_Abbreviation Language_to_Text Language Languages Decode_Date_EU Decode_Date_US Decode_Date_EU2 Decode_Date_US2 Parse_Date ); %EXPORT_TAGS = (all => [@EXPORT_OK] ); ################################################## ## ## ## "Version()" is available but not exported ## ## in order to avoid possible name clashes. ## ## Call with "Date::Pcalc::Version()" instead! ## ## ## ################################################## $VERSION = '1.0'; use Carp; $Year_of_Epoch = 70; $Century_of_Epoch = 1900; $Epoch = $Century_of_Epoch + $Year_of_Epoch; $pcalc_Language = 1; $pcalc_Languages = 6; # # Array names have been changed from the form # # some_name_ --> arr_some_name # # to make them easier to distinguish # @arr_Days_in_Year = ( [ 0, 0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334, 365 ], [ 0, 0, 31, 60, 91, 121, 152, 182, 213, 244, 274, 305, 335, 366 ] ); @arr_Days_in_Month = ( [ 0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 ], [ 0, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 ] ); @arr_Month_to_Text = ( [ "???", "???", "???", "???", "???", "???", "???", "???", "???", "???", "???", "???", "???" ], [ "???", "January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December" ], [ "???", "Janvier", "Février", "Mars", "Avril", "Mai", "Juin", "Juillet", "Août", "Septembre", "Octobre", "Novembre", "Décembre" ], [ "???", "Januar", "Februar", "März", "April", "Mai", "Juni", "Juli", "August", "September", "Oktober", "November", "Dezember" ], [ "???", "Enero", "Febrero", "Marzo", "Abril", "Mayo", "Junio", "Julio", "Agosto", "Septiembre", "Octubre", "Noviembre", "Diciembre" ], [ "???", "Janeiro", "Fevereiro", "Março", "Abril", "Maio", "Junho", "Julho", "Agosto", "Setembro", "Outubro", "Novembro", "Dezembro" ], [ "???", "Januari", "Februari", "Maart", "April", "Mei", "Juni", "Juli", "Augustus", "September", "October", "November", "December" ] ); @arr_Day_of_Week_to_Text = ( [ "???", "???", "???", "???", "???", "???", "???", "???" ], [ "???", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday" ], [ "???", "Lundi", "Mardi", "Mercredi", "Jeudi", "Vendredi", "Samedi", "Dimanche" ], [ "???", "Montag", "Dienstag", "Mittwoch", "Donnerstag", "Freitag", "Samstag", "Sonntag" ], [ "???", "Lunes", "Martes", "Miércoles", "Jueves", "Viernes", "Sábado", "Domingo" ], [ "???", "Segunda-feira", "Terça-feira", "Quarta-feira", "Quinta-feira", "Sexta-feira", "Sábado", "Domingo" ], [ "???", "Maandag", "Dinsdag", "Woensdag", "Donderdag", "Vrijdag", "Zaterdag", "Zondag" ] ); @arr_Day_of_Week_Abbreviation = # Fill the fields below _only_ if special abbreviations are needed! # Note that the first field serves as a flag and must be non-empty! ( [ "", "", "", "", "", "", "", "" # 0 ], [ "", "", "", "", "", "", "", "" # 1 ], [ "", "", "", "", "", "", "", "" # 2 ], [ "", "", "", "", "", "", "", "" # 3 ], [ "", "", "", "", "", "", "", "" # 4 ], [ "???", "2ª", "3ª", "4ª", "5ª", "6ª", "Sáb", "Dom" # 5 ], [ "", "", "", "", "", "", "", "" # 6 ] ); @arr_Language_to_Text = ( "???", "English", "Français", "Deutsch", "Español", "Portuguêsec", "Nederlands" ); sub DATECALC_ERROR { my ($name, $err) = @_; croak("Date::PCalc::${name}(): $err"); } sub DATECALC_DATE_ERROR { my ($name) = @_; croak("Date::Pcalc::${name}(): not a valid date"); } sub DATECALC_TIME_ERROR { my ($name) = @_; croak("Date::Pcalc::${name}(): not a valid time"); } sub DATECALC_YEAR_ERROR { my ($name) = @_; croak("Date::Pcalc::${name}(): year out of range"); } sub DATECALC_MONTH_ERROR { my ($name) = @_; croak("Date::Pcalc::${name}(): month out of range"); } sub DATECALC_WEEK_ERROR { my ($name) = @_; croak("Date::Pcalc::${name}(): week out of range"); } sub DATECALC_DAYOFWEEK_ERROR { my ($name) = @_; croak("Date::Pcalc::${name}(): day of week out of range"); } sub DATECALC_FACTOR_ERROR { my ($name) = @_; croak("Date::Pcalc::${name}(): factor out of range"); } sub DATECALC_LANGUAGE_ERROR { my ($name) = @_; croak("Date::Pcalc::${name}(): language not available"); } sub DATECALC_SYSTEM_ERROR { my ($name) = @_; croak("Date::Pcalc::${name}(): not available on this system"); } sub DATECALC_MEMORY_ERROR { my ($name) = @_; croak("Date::Pcalc::${name}(): unable to allocate memory"); } sub Year_to_Days { my ($year) = @_; my $days = 365 * $year; $days += ($year >>= 2); $year = int ($year / 25); $days -= $year; $days += ($year >> 2); return $days; } sub leap_year { my ($year) = @_; my $yy = int ($year/100); if ($year > 0) { return ((($year & 0x03) ==0) && (( $yy * 100 != $year) || (($yy & 0x03) == 0) ) ) ? 1 : 0; } else { DATECALC_YEAR_ERROR("leap_year"); } } sub Days_in_Year { my ($year, $month) = @_; if ($year > 0) { if (($month >= 1) && ($month <= 12)) { return $arr_Days_in_Year[leap_year($year)][$month+1]; } else { DATECALC_MONTH_ERROR("Days_in_Year"); } } else { DATECALC_YEAR_ERROR("Days_in_Year"); } } sub Days_in_Month { my ($year, $month) = @_; if ($year > 0) { if (($month >= 1) && ($month <= 12)) { return $arr_Days_in_Month[leap_year($year)][$month]; } else { DATECALC_MONTH_ERROR("Days_in_Month"); } } else { DATECALC_YEAR_ERROR("Days_in_Month"); } } sub Weeks_in_Year { my ($year) = @_; if ($year > 0) { return 52 + (((Day_of_Week($year, 1, 1) == 4) || (Day_of_Week($year, 12, 31) == 4) ) ? 1 : 0); } else { DATECALC_YEAR_ERROR("Weeks_in_Year"); } } sub check_date { my ($year, $month, $day) = @_; return (($year >= 1) && ($month >= 1) && ($month <= 12) && ($day >= 1) && ($day <= $arr_Days_in_Month[leap_year($year)][$month])) ? 1 : 0; } # # This new function returns # # -1 invalid date # 0 non-leap year # 1 valid leap year # sub check_date_leap { my ($year, $month, $day) = @_; my $leap = leap_year($year); return (($year >= 1) && ($month >= 1) && ($month <= 12) && ($day >= 1) && ($day <= $arr_Days_in_Month[$leap][$month])) ? $leap : -1; } sub check_business_date { my ($year, $week, $dow) = @_; return (($year >= 1) && ($week >= 1) && ($week <= Weeks_in_Year($year)) && ($dow >= 1) && ($dow <= 7)) ? 1 : 0; } sub Day_of_Year { my ($year, $month, $day) = @_; my ($leap) = check_date_leap($year, $month, $day); if ( $leap >= 0) { return $arr_Days_in_Year[$leap][$month] + $day; } else { DATECALC_DATE_ERROR("Day_of_Year"); } } sub Date_to_Days { my ($year, $month, $day) = @_; my $leap = check_date_leap( $year, $month, $day ); if ($leap >= 0) { return (Year_to_Days(--$year) + $arr_Days_in_Year[$leap][$month] + $day ); } else { DATECALC_DATE_ERROR("Date_to_Days"); } } sub Day_of_Week { my ($year, $month, $day) = @_; my $n_days = Date_to_Days($year, $month, $day); if ($n_days > 0) { $n_days--; $n_days %= 7; $n_days++; return $n_days; } else { DATECALC_DATE_ERROR("Date_of_Week"); } } sub Week_Number { my ($year, $month, $day) = @_; my $first; if (check_date($year, $month, $day)) { $first = Day_of_Week($year, 1, 1) - 1; return int (( core_delta_days($year, 1, 1, $year, $month, $day) + $first) / 7) + (($first < 4) ? 1 : 0); } else { DATECALC_DATE_ERROR("Week_Number"); } } sub Week_of_Year { my ($year, $month, $day) = @_; my $week; ($week, $year) = core_Week_of_Year( $year, $month, $day ); if ($week) { return ($week, $year); } else { DATECALC_DATE_ERROR("Week_of_Year"); } } sub core_Week_of_Year { my ($year, $month, $day) = @_; my $week; if (check_date($year, $month, $day)) { $week = Week_Number($year, $month, $day); if ($week == 0) { $week = Weeks_in_Year(--$year); } elsif ($week > Weeks_in_Year($year)) { $week = 1; $year++; } return ($week, $year); } else { return ("", ""); } } sub Monday_of_Week { my ($week, $year) = @_; my ($first, $month, $day); if ($year > 0) { if (($week > 0) && ($week <= Weeks_in_Year($year))) { $month = $day = 1; $first = Day_of_Week($year, 1, 1) - 1; if ($first < 4) { $week--; } ($year, $month, $day) = core_add_delta_days($year, $month, $day, ($week * 7 - $first) ); return ($year, $month, $day); } else { DATECALC_WEEK_ERROR("Monday_of_Week"); } } else { DATECALC_YEAR_ERROR("Monday_of_Week"); } } sub Nth_Weekday_of_Month_Year { my ($year, $month, $dow, $n) = @_; my ($day, $first, $delta, $mm); $mm = $month; if ($year > 0) { if (($month >= 1) && ($month <= 12)) { if (($dow >= 1) && ($dow <= 7)) { if (($n >= 1) && ($n <= 5)) { $day = 1; $first = Day_of_Week($year, $mm, 1); if ($dow < $first) { $dow += 7; } $delta = $dow - $first; $delta += ($n-1) * 7; ($year, $month, $day) = core_add_delta_days($year, $month, $day, $delta); if ($year && ($month == $mm)) { return ($year, $month, $day); } else { return (); } } else { DATECALC_FACTOR_ERROR("Nth_Weekday_of_Month_Year"); } } else { DATECALC_DAYOFWEEK_ERROR("Nth_Weekday_of_Month_Year"); } } else { DATECALC_MONTH_ERROR("Nth_Weekday_of_Month_Year"); } } else { DATECALC_YEAR_ERROR("Nth_Weekday_of_Month_Year"); } } sub Standard_to_Business { my ($year, $month, $day) = @_; my ($week, $dow, $yy); $yy = $year; ($week, $year) = core_Week_of_Year($year, $month, $day); if ($week) { $dow = Day_of_Week($yy, $month, $day); return ($year, $week, $dow); } else { DATECALC_DATE_ERROR("Standard_to_Business"); } } sub Business_to_Standard { my ($year, $week, $dow) = @_; my ($month, $day, $delta, $first, $result); if (check_business_date($year, $week, $dow)) { $month = $day = 1; $first = Day_of_Week($year, 1, 1); $delta = (($week + (($first > 4) ? 1 : 0) - 1) * 7) + ($dow - $first); ($year, $month, $day) = core_add_delta_days($year, $month, $day, $delta); $result = (defined $year) ? 1 : 0; } else { $result = 0; } if ($result) { return ($year, $month, $day); } else { DATECALC_DATE_ERROR("Business_to_Standard"); } } sub Delta_Days { my ($year1, $month1, $day1, $year2, $month2, $day2) = @_; if (check_date($year1, $month1, $day1) && check_date($year2, $month2, $day2)) { return core_delta_days($year1, $month1, $day1, $year2, $month2, $day2); } else { DATECALC_DATE_ERROR("Delta_Days"); } } sub core_delta_days { my ($year1, $month1, $day1, $year2, $month2, $day2) = @_; return Date_to_Days($year2, $month2, $day2) - Date_to_Days($year1, $month1, $day1); } sub Delta_DHMS { my ($year1, $month1, $day1, $hour1, $min1, $sec1, $year2, $month2, $day2, $hour2, $min2, $sec2) = @_; my ($Dd, $Dh, $Dm, $Ds, $delta, $quot, $sign); if (check_date($year1, $month1, $day1) && check_date($year2, $month2, $day2)) { if (($hour1 >= 0) && ($min1 >= 0) && ($sec1 >= 0) && ($hour2 >= 0) && ($min2 >= 0) && ($sec2 >= 0) && ($hour1 < 24) && ($min1 < 60) && ($sec1 < 60) && ($hour2 < 24) && ($min2 < 60) && ($sec2 < 60)) { $Dd = $Dh = $Dm = $Ds = 0; $delta = (((($hour2 * 60) + $min2) * 60) + $sec2) - (((($hour1 * 60) + $min1) * 60) + $sec1); $Dd = core_delta_days($year1, $month1, $day1, $year2, $month2, $day2); if ($Dd != 0) { if ($Dd > 0) { if ($delta < 0) { $delta += 86400; $Dd--; } } else { if ($delta > 0) { $delta -= 86400; $Dd++; } } } if ($delta != 0) { $sign = 0; if ($delta < 0) { $sign = 1; $delta = -$delta; } $quot = int ($delta / 60); $Ds = $delta - $quot * 60; $delta = $quot; $quot = int ($delta / 60); $Dm = $delta - $quot * 60; $Dh = $quot; if ($sign) { $Ds = -($Ds); $Dm = -($Dm); $Dh = -($Dh); } } return ($Dd, $Dh, $Dm, $Ds); } else { DATECALC_TIME_ERROR("Delta_DHMS"); } } else { DATECALC_DATE_ERROR("Delta_DHMS"); } } sub Add_Delta_Days { my ($year, $month, $day, $Dd) = @_; ($year, $month, $day) = core_add_delta_days($year, $month, $day, $Dd); if ($year) { return ($year, $month, $day); } else { DATECALC_DATE_ERROR("Add_Delta_Days"); } } sub core_add_delta_days { my ($year, $month, $day, $Dd) = @_; my ($n_days, $leap); if ((check_date($year, $month, $day)) && (($n_days = Date_to_Days($year, $month, $day)) > 0) && (($n_days += $Dd) > 0)) { $year = int ( $n_days / 365.2425 ); $day = $n_days - Year_to_Days($year); if ($day < 1) { $day = $n_days - Year_to_Days($year-1); } else { $year++; } $leap = leap_year($year); if ($day > $arr_Days_in_Year[$leap][13]) { $day -= $arr_Days_in_Year[$leap][13]; $leap = leap_year(++$year); } for ( $month = 12; $month >= 1; $month-- ) { if ($day > $arr_Days_in_Year[$leap][$month]) { $day -= $arr_Days_in_Year[$leap][$month]; last; } } return($year, $month, $day); } else { return("","",""); } } sub Add_Delta_DHMS { my ($year, $month, $day, $hour, $min, $sec, $Dd, $Dh, $Dm, $Ds) = @_; my ($sum, $quot); if (check_date($year, $month, $day)) { if (($hour >= 0) && ($min >= 0) && ($sec >= 0) && ($hour < 24) && ($min < 60) && ($sec < 60)) { $quot = int ($Dh / 24); $Dh -= $quot * 24; $Dd += $quot; $quot = int ($Dm / 60); $Dm -= $quot * 60; $Dh += $quot; $quot = int ($Ds / 60); $Ds -= $quot * 60; $Dm += $quot; $quot = int ($Dm / 60); $Dm -= $quot * 60; $Dh += $quot; $quot = int ($Dh / 24); $Dh -= $quot * 24; $Dd += $quot; $sum = (((($hour * 60) + $min) * 60) + $sec) + (((( $Dh * 60) + $Dm) * 60) + $Ds); if ($sum < 0) { $quot = int ($sum / 86400); $sum -= $quot * 86400; $Dd += $quot; if ($sum < 0) { $sum += 86400; $Dd--; } } if ($sum > 0) { $quot = int ($sum / 60); $sec = $sum - $quot * 60; $sum = $quot; $quot = int ($sum / 60); $min = $sum - $quot * 60; $sum = $quot; $quot = int ($sum / 24); $hour = $sum - $quot * 24; $Dd += $quot; } else { $hour = $min = $sec = 0; } ($year, $month, $day) = core_add_delta_days($year, $month, $day, $Dd); if ($year) { return ($year, $month, $day, $hour, $min, $sec); } else { DATECALC_DATE_ERROR("Add_Delta_DHMS"); } } else { DATECALC_TIME_ERROR("Add_Delta_DHMS"); } } else { DATECALC_DATE_ERROR("Add_Delta_DHMS"); } } sub Add_Delta_YMD { my ($year, $month, $day, $Dy, $Dm, $Dd) = @_; my $delta = 0; if (!check_date($year, $month, $day)) { DATECALC_DATE_ERROR("Add_Delta_YMD"); } ($year, $month, $day) = core_add_delta_days($year, $month, $day, $Dd); if (($Dd != 0) && (!$year)) { DATECALC_DATE_ERROR("Add_Delta_YMD"); } if ($Dm != 0) { $Dm += ($month - 1); $delta = int ($Dm / 12); $Dm -= $delta * 12; if ($Dm < 0) { $Dm += 12; $delta--; } $month = ($Dm + 1); } $Dy += $delta + $year; if ($Dy >= 1) { $year = $Dy; if ($day > ($Dd = $arr_Days_in_Month[leap_year($year)][$month])) { $day = $Dd; } return ($year, $month, $day); } else { DATECALC_DATE_ERROR("Add_Delta_YMD"); } } sub System_Clock { my ($year, $month, $day, $hour, $min, $sec, $doy, $dow, $dst); ($year, $month, $day, $hour, $min, $sec, $doy, $dow, $dst) = core_system_clock(); if ($year) { return ($year, $month, $day, $hour, $min, $sec, $doy, $dow, $dst); } else { DATECALC_SYSTEM_ERROR("System_Clock"); } } sub core_system_clock { my ($year, $month, $day, $hour, $min, $sec, $doy, $dow, $dst); my ($elapsed_seconds); $elapsed_seconds = time(); if ($elapsed_seconds > 0) { ($sec, $min, $hour, $day, $month, $year, $dow, $doy, $dst) = localtime($elapsed_seconds); $year += 1900; $month++; $doy++; if ($dow == 0) { $dow = 7; } return ($year, $month, $day, $hour, $min, $sec, $doy, $dow, $dst); } else { return ("", "", "", "", "", "", "", "", ""); } } sub Today { my ($year, $month, $day, $hour, $min, $sec, $doy, $dow, $dst) = core_system_clock; if ($year) { return ($year, $month, $day); } else { DATECALC_SYSTEM_ERROR("Today"); } } sub Now { my ($year, $month, $day, $hour, $min, $sec, $doy, $dow, $dst) = core_system_clock; if ($year) { return ($hour, $min, $sec); } else { DATECALC_SYSTEM_ERROR("Today"); } } sub Today_and_Now { my ($year, $month, $day, $hour, $min, $sec, $doy, $dow, $dst) = core_system_clock; if ($year) { return ($year, $month, $day, $hour, $min, $sec); } else { DATECALC_SYSTEM_ERROR("Today_and_Now"); } } sub Easter_Sunday { my ($year) = @_; my ($month, $day); ################################################################ # # # Gauss'sche Regel (Gaussian Rule) # # ================================ # # # # Quelle / Source: # # # # H. H. Voigt, "Abriss der Astronomie", Wissenschaftsverlag, # # Bibliographisches Institut, Seite 9. # # # ################################################################ my ($a, $b, $c, $d, $e, $m, $n); if (($year <= 0) || ($year < 1583) || ($year > 2299)) { DATECALC_YEAR_ERROR("Easter_Sunday"); } if ($year < 1700) { $m = 22; $n = 2; } elsif ($year < 1800) { $m = 23; $n = 3; } elsif ($year < 1900) { $m = 23; $n = 4; } elsif ($year < 2100) { $m = 24; $n = 5; } elsif ($year < 2200) { $m = 24; $n = 6; } else { $m = 25; $n = 0; } $a = $year % 19; $b = $year % 4; $c = $year % 7; $d = (19 * $a + $m) % 30; $e = (2 * $b + 4 * $c + 6 * $d + $n) % 7; $day = 22 + $d + $e; $month = 3; if ($day > 31) { $day -= 31; # same as $day = $d + $e - 9; $month++; } if (($day == 26) && ($month == 4)) { $day = 19; } if (($day == 25) && ($month == 4) && ($d == 28) && ($e == 6) && ($a > 10)) { $day = 18; } return ($year, $month, $day); } # Carnival Monday / Rosenmontag / Veille du Mardi Gras = easter sunday - 48 # Mardi Gras / Karnevalsdienstag / Mardi Gras = easter sunday - 47 # Ash Wednesday / Aschermittwoch / Mercredi des Cendres = easter sunday - 46 # Palm Sunday / Palmsonntag / Dimanche des Rameaux = easter sunday - 7 # Easter Friday / Karfreitag / Vendredi Saint = easter sunday - 2 # Easter Saturday / Ostersamstag / Samedi de Paques = easter sunday - 1 # Easter Monday / Ostermontag / Lundi de Paques = easter sunday + 1 # Ascension of Christ / Christi Himmelfahrt / Ascension = easter sunday + 39 # Whitsunday / Pfingstsonntag / Dimanche de Pentecote = easter sunday + 49 # Whitmonday / Pfingstmontag / Lundi de Pentecote = easter sunday + 50 # Feast of Corpus Christi / Fronleichnam / Fete-Dieu = easter sunday + 60 sub Decode_Month { my ($month_str) = @_; my ($month, $len, $n_matched); $n_matched = 0; $len = length $month_str; $month_str = uc $month_str ; for ($month=1; $month<=12; $month++) { if ($month_str eq substr((uc $arr_Month_to_Text[$pcalc_Language][$month]), 0, $len)) { if ($n_matched > 0) { return 0; } $n_matched = $month; } } return $n_matched; } sub Decode_Day_of_Week { my ($day_str) = @_; my ($day, $len, $n_matched); $len = length $day_str; $n_matched = 0; $day_str = uc $day_str ; for ($day=1; $day<=7; $day++) { if ($day_str eq substr((uc $arr_Day_of_Week_to_Text[$pcalc_Language][$day]), 0, $len)) { if ($n_matched > 0) { return 0; } else { $n_matched = $day; } } } return $n_matched; } sub Decode_Language { my ($lang_str) = @_; my ($lang, $len); $len = length $lang_str; $lang_str = uc $lang_str ; for ($lang=1; $lang<=$pcalc_Languages; $lang++) { if ($lang_str eq substr((uc $arr_Language_to_Text[$lang]), 0, $len)) { return $lang; } } return 0; } sub Compress { my ($year, $month, $day) = @_; my $yy; if (($year >= $Epoch) && ($year < ($Epoch + 100))) { $yy = $year; $year -= $Epoch; } else { if (($year < 0) || ($year > 99)) { return(0); } if ($year < $Year_of_Epoch) { $yy = $Century_of_Epoch + 100 + $year; $year += 100 - $Year_of_Epoch; } else { $yy = $Century_of_Epoch + $year; $year -= $Year_of_Epoch; } } if (($month < 1) || ($month > 12)) { return(0); } if (($day < 1) || ($day > $arr_Days_in_Month[leap_year($yy)][$month])) { return(0); } return( ($year << 9) | ($month << 5) | $day ); } sub Uncompress { my ($date) = @_; my ($century, $year, $month, $day); if ($date > 0) { $year = $date >> 9; $month = ($date & 0x01ff) >> 5; $day = $date & 0x001f; if ($year < 100) { if ($year < 100 - $Year_of_Epoch) { $century = $Century_of_Epoch; $year += $Year_of_Epoch; } else { $century = $Century_of_Epoch + 100; $year -= 100 - $Year_of_Epoch; } if (check_date($century + $year, $month, $day)) { return ($century, $year, $month, $day); } } } return (); } sub check_compressed { my ($date) = @_; return (Uncompress($date)) ? 1 : 0; } sub Compressed_to_Text { my ($date) = @_; my $str; my ($century, $year, $month, $day) = Uncompress($date); if (defined $century) { $str = sprintf "%02d-%.3s-%02d", $day, $arr_Month_to_Text[$pcalc_Language][$month], $year; } else { $str = "??-???-??"; } return $str; } sub Date_to_Text { my ($year, $month, $day) = @_; my $str; if (check_date($year, $month, $day)) { if ($arr_Day_of_Week_Abbreviation[$pcalc_Language][0] ne "") { $str = sprintf "%.3s %d-%.3s-%d", $arr_Day_of_Week_Abbreviation[$pcalc_Language][Day_of_Week($year, $month, $day)], $day, $arr_Month_to_Text[$pcalc_Language][$month], $year; } else { $str = sprintf "%.3s %d-%.3s-%d", $arr_Day_of_Week_to_Text[$pcalc_Language][Day_of_Week($year, $month, $day)], $day, $arr_Month_to_Text[$pcalc_Language][$month], $year; } return $str; } return ""; } sub Date_to_Text_Long { my ($year, $month, $day) = @_; my $str = ""; if (check_date($year, $month, $day)) { $str = sprintf "%s, %d %s %d", $arr_Day_of_Week_to_Text[$pcalc_Language][Day_of_Week($year, $month, $day)], $day, $arr_Month_to_Text[$pcalc_Language][$month], $year; } return $str; } sub Center { my ($str, $width) = @_; my $len; $len = length $str; if ($len > $width) { $len = $width; } return (' ' x (($width-$len) >> 1)) . $str; } sub Calendar { my ($year, $month) = @_; my ($first, $last, $day, $buf, $arr_ref); my $str = "\n"; if ($year > 0) { if (($month >= 1) && ($month <= 12)) { $buf = $arr_Month_to_Text[$pcalc_Language][$month] . " " . $year; $buf = Center($buf, 27) . "\n"; $str .= $buf; $arr_ref = ($arr_Day_of_Week_Abbreviation[$pcalc_Language][0] ne "") ? \@arr_Day_of_Week_Abbreviation : \@arr_Day_of_Week_to_Text; $buf = sprintf("%3.3s %3.3s %3.3s %3.3s %3.3s %3.3s %3.3s\n", $$arr_ref[$pcalc_Language][1], $$arr_ref[$pcalc_Language][2], $$arr_ref[$pcalc_Language][3], $$arr_ref[$pcalc_Language][4], $$arr_ref[$pcalc_Language][5], $$arr_ref[$pcalc_Language][6], $$arr_ref[$pcalc_Language][7]); $str = $str . $buf; $first = Day_of_Week($year, $month, 1); $last = $arr_Days_in_Month[leap_year($year)][$month]; if (--$first > 0) { $str .= ' ' x (($first << 2) - 1); } for ($day = 1; $day <= $last; $day++,$first++) { if ($first > 0) { if ($first > 6) { $first = 0; $str .= "\n"; } else { $str .= " "; } } $buf = sprintf(" %2d", $day); $str .= $buf; } $str .= "\n\n"; return $str; } else { DATECALC_MONTH_ERROR("Calendar"); } } else { DATECALC_YEAR_ERROR("Calendar"); } } sub Month_to_Text { my ($month) = @_; if (($month >= 1) && ($month <= 12)) { return $arr_Month_to_Text[$pcalc_Language][$month]; } else { DATECALC_MONTH_ERROR("Month_to_Text"); } } sub Day_of_Week_to_Text { my ($dow) = @_; if (($dow >= 1) && ($dow <= 7)) { return $arr_Day_of_Week_to_Text[$pcalc_Language][$dow]; } else { DATECALC_DAYOFWEEK_ERROR("Day_of_Week_to_Text"); } } sub Day_of_Week_Abbreviation { my ($dow) = @_; if (($dow >= 1) && ($dow <= 7)) { if ($arr_Day_of_Week_Abbreviation[$pcalc_Language][$dow]) { return $arr_Day_of_Week_Abbreviation[$pcalc_Language][$dow]; } else { return substr $arr_Day_of_Week_to_Text[$pcalc_Language][$dow], 0, 3; } } else { DATECALC_DAYOFWEEK_ERROR("Day_of_Week_to_Text"); } } sub Language_to_Text { my ($lang) = @_; if (($lang >= 1) && ($lang <= $pcalc_Languages)) { return $arr_Language_to_Text[$lang]; } } sub Language { my ($lang) = @_; my ($items, $previous_language); $items = scalar @_; $previous_language = $pcalc_Language; if (($items >= 0) && ($items <= 1)) { if ($items == 1) { if (($lang >= 1) && ($lang <= $pcalc_Languages)) { $pcalc_Language = $lang; } else { DATECALC_LANGUAGE_ERROR("Language"); } } } else { croak('Usage: [$lang = ] Date::Pcalc::Language( [$lang] );'); } return $previous_language; } sub Languages { return $pcalc_Languages; } sub Decode_Date_EU { croak "Usage: (\$year,\$month,\$day) = Decode_Date_EU(\$date);" if (@_ != 1); my ($date ) = @_; return Decode_Date_EU2( $date ); } sub Decode_Date_EU2 { croak "Usage: (\$year,\$month,\$day) = Decode_Date_EU2(\$date);" if (@_ != 1); my($buffer) = @_; my($year,$month,$day,$length); if ($buffer =~ /^\D* (\d+) [^A-Za-z0-9]* ([A-Za-z]+) [^A-Za-z0-9]* (\d+) \D*$/x) { ($day,$month,$year) = ($1,$2,$3); $month = Decode_Month($month); unless ($month > 0) { return(); # can't decode month! } } elsif ($buffer =~ /^\D* 0*(\d+) \D*$/x) { $buffer = $1; $length = length($buffer); if ($length == 3) { $day = substr($buffer,0,1); $month = substr($buffer,1,1); $year = substr($buffer,2,1); } elsif ($length == 4) { $day = substr($buffer,0,1); $month = substr($buffer,1,1); $year = substr($buffer,2,2); } elsif ($length == 5) { $day = substr($buffer,0,1); $month = substr($buffer,1,2); $year = substr($buffer,3,2); } elsif ($length == 6) { $day = substr($buffer,0,2); $month = substr($buffer,2,2); $year = substr($buffer,4,2); } elsif ($length == 7) { $day = substr($buffer,0,1); $month = substr($buffer,1,2); $year = substr($buffer,3,4); } elsif ($length == 8) { $day = substr($buffer,0,2); $month = substr($buffer,2,2); $year = substr($buffer,4,4); } else { return(); } # wrong number of digits! } elsif ($buffer =~ /^\D* (\d+) \D+ (\d+) \D+ (\d+) \D*$/x) { ($day,$month,$year) = ($1,$2,$3); } else { return(); } # no match at all! if ($year < 100) { $year += 1900; } if (check_date($year,$month,$day)) { return($year,$month,$day); } else { return(); } # not a valid date! } sub Decode_Date_US { croak "Usage: (\$year,\$month,\$day) = Decode_Date_US(\$date);" if (@_ != 1); my ($date) = @_; return Decode_Date_US2( $date ); } sub Decode_Date_US2 { croak "Usage: (\$year,\$month,\$day) = Decode_Date_US2(\$date);" if (@_ != 1); my($buffer) = @_; my($year,$month,$day,$length); if ($buffer =~ /^[^A-Za-z0-9]* ([A-Za-z]+) [^A-Za-z0-9]* 0*(\d+) \D*$/x) { ($month,$buffer) = ($1,$2); $month = Decode_Month($month); unless ($month > 0) { return(); # can't decode month! } $length = length($buffer); if ($length == 2) { $day = substr($buffer,0,1); $year = substr($buffer,1,1); } elsif ($length == 3) { $day = substr($buffer,0,1); $year = substr($buffer,1,2); } elsif ($length == 4) { $day = substr($buffer,0,2); $year = substr($buffer,2,2); } elsif ($length == 5) { $day = substr($buffer,0,1); $year = substr($buffer,1,4); } elsif ($length == 6) { $day = substr($buffer,0,2); $year = substr($buffer,2,4); } else { return(); } # wrong number of digits! } elsif ($buffer =~ /^[^A-Za-z0-9]* ([A-Za-z]+) [^A-Za-z0-9]* (\d+) \D+ (\d+) \D*$/x) { ($month,$day,$year) = ($1,$2,$3); $month = Decode_Month($month); unless ($month > 0) { return(); # can't decode month! } } elsif ($buffer =~ /^\D* 0*(\d+) \D*$/x) { $buffer = $1; $length = length($buffer); if ($length == 3) { $month = substr($buffer,0,1); $day = substr($buffer,1,1); $year = substr($buffer,2,1); } elsif ($length == 4) { $month = substr($buffer,0,1); $day = substr($buffer,1,1); $year = substr($buffer,2,2); } elsif ($length == 5) { $month = substr($buffer,0,1); $day = substr($buffer,1,2); $year = substr($buffer,3,2); } elsif ($length == 6) { $month = substr($buffer,0,2); $day = substr($buffer,2,2); $year = substr($buffer,4,2); } elsif ($length == 7) { $month = substr($buffer,0,1); $day = substr($buffer,1,2); $year = substr($buffer,3,4); } elsif ($length == 8) { $month = substr($buffer,0,2); $day = substr($buffer,2,2); $year = substr($buffer,4,4); } else { return(); } # wrong number of digits! } elsif ($buffer =~ /^\D* (\d+) \D+ (\d+) \D+ (\d+) \D*$/x) { ($month,$day,$year) = ($1,$2,$3); } else { return(); } # no match at all! if ($year < 100) { $year += 1900; } if (check_date($year,$month,$day)) { return($year,$month,$day); } else { return(); } # not a valid date! } sub Parse_Date { croak "Usage: (\$year,\$month,\$day) = Parse_Date(\$date);" if (@_ != 1); my($date) = @_; my($year,$month,$day); unless ($date =~ /\b([JFMASOND][aepuco][nbrynlgptvc])\s+([0123]??\d)\b/) { return(); } $month = $1; $day = $2; unless ($date =~ /\b(19\d\d|20\d\d)\b/) { return(); } $year = $1; $month = Decode_Month($month); unless ($month > 0) { return(); } unless (check_date($year,$month,$day)) { return(); } return($year,$month,$day); } 1; # # # Subsequent documentation taken verbatim from # Date::Calc version 4.2 # # __END__ =head1 NAME Date::Pcalc - Gregorian calendar date calculations =head1 PREFACE This package consists of a Perl module for all kinds of date calculations based on the Gregorian calendar (the one used in all western countries today), thereby complying with all relevant norms and standards: S, S and, to some extent, S (where applicable). (See also http://www.engelschall.com/u/sb/download/Date-Calc/DIN1355/ for a scan of part of the "S" document (in German)). This module is a direct translation of Steffen Beyer's excellent Date::Calc module to Perl. The module of course handles year numbers of 2000 and above correctly ("Year 2000" or "Y2K" compliance) -- actually all year numbers from 1 to the largest positive integer representable on your system (which is at least 32767) can be dealt with. Note that this package B the Gregorian calendar B until the year S<1 A.D.> -- even though the Gregorian calendar was only adopted in 1582 by most (not all) European countries, in obedience to the corresponding decree of catholic pope S in that year. Some (mainly protestant) countries continued to use the Julian calendar (used until then) until as late as the beginning of the 20th century. Finally, note that this package is not intended to do everything you could ever imagine automagically for you; it is rather intended to serve as a toolbox (in the best of UNIX spirit and traditions) which should, however, always get you where you want to go. If nevertheless you can't figure out how to solve a particular problem, please let me know! (See e-mail address at the bottom of this document.) =head1 SYNOPSIS use Date::Pcalc qw( Days_in_Year Days_in_Month Weeks_in_Year leap_year check_date check_business_date Day_of_Year Date_to_Days Day_of_Week Week_Number Week_of_Year Monday_of_Week Nth_Weekday_of_Month_Year Standard_to_Business Business_to_Standard Delta_Days Delta_DHMS Add_Delta_Days Add_Delta_DHMS Add_Delta_YMD System_Clock Today Now Today_and_Now Easter_Sunday Decode_Month Decode_Day_of_Week Decode_Language Decode_Date_EU Decode_Date_US Compress Uncompress check_compressed Compressed_to_Text Date_to_Text Date_to_Text_Long Calendar Month_to_Text Day_of_Week_to_Text Day_of_Week_Abbreviation Language_to_Text Language Languages Decode_Date_EU2 Decode_Date_US2 Parse_Date ); use Date::Pcalc qw(:all); Days_in_Year $days = Days_in_Year($year,$month); Days_in_Month $days = Days_in_Month($year,$month); Weeks_in_Year $weeks = Weeks_in_Year($year); leap_year if (leap_year($year)) check_date if (check_date($year,$month,$day)) check_business_date if (check_business_date($year,$week,$dow)) Day_of_Year $doy = Day_of_Year($year,$month,$day); Date_to_Days $days = Date_to_Days($year,$month,$day); Day_of_Week $dow = Day_of_Week($year,$month,$day); Week_Number $week = Week_Number($year,$month,$day); Week_of_Year ($week,$year) = Week_of_Year($year,$month,$day); Monday_of_Week ($year,$month,$day) = Monday_of_Week($week,$year); Nth_Weekday_of_Month_Year if (($year,$month,$day) = Nth_Weekday_of_Month_Year($year,$month,$dow,$n)) Standard_to_Business ($year,$week,$dow) = Standard_to_Business($year,$month,$day); Business_to_Standard ($year,$month,$day) = Business_to_Standard($year,$week,$dow); Delta_Days $Dd = Delta_Days($year1,$month1,$day1, $year2,$month2,$day2); Delta_DHMS ($Dd,$Dh,$Dm,$Ds) = Delta_DHMS($year1,$month1,$day1, $hour1,$min1,$sec1, $year2,$month2,$day2, $hour2,$min2,$sec2); Add_Delta_Days ($year,$month,$day) = Add_Delta_Days($year,$month,$day, $Dd); Add_Delta_DHMS ($year,$month,$day, $hour,$min,$sec) = Add_Delta_DHMS($year,$month,$day, $hour,$min,$sec, $Dd,$Dh,$Dm,$Ds); Add_Delta_YMD ($year,$month,$day) = Add_Delta_YMD($year,$month,$day, $Dy,$Dm,$Dd); System_Clock ($year,$month,$day, $hour,$min,$sec, $doy,$dow,$dst) = System_Clock(); Today ($year,$month,$day) = Today(); Now ($hour,$min,$sec) = Now(); Today_and_Now ($year,$month,$day, $hour,$min,$sec) = Today_and_Now(); Easter_Sunday ($year,$month,$day) = Easter_Sunday($year); Decode_Month if ($month = Decode_Month($string)) Decode_Day_of_Week if ($dow = Decode_Day_of_Week($string)) Decode_Language if ($lang = Decode_Language($string)) Decode_Date_EU if (($year,$month,$day) = Decode_Date_EU($string)) Decode_Date_US if (($year,$month,$day) = Decode_Date_US($string)) Compress $date = Compress($year,$month,$day); Uncompress if (($century,$year,$month,$day) = Uncompress($date)) check_compressed if (check_compressed($date)) Compressed_to_Text $string = Compressed_to_Text($date); Date_to_Text $string = Date_to_Text($year,$month,$day); Date_to_Text_Long $string = Date_to_Text_Long($year,$month,$day); Calendar $string = Calendar($year,$month); Month_to_Text $string = Month_to_Text($month); Day_of_Week_to_Text $string = Day_of_Week_to_Text($dow); Day_of_Week_Abbreviation $string = Day_of_Week_Abbreviation($dow); Language_to_Text $string = Language_to_Text($lang); Language $lang = Language(); Language($lang); $oldlang = Language($newlang); Languages $max_lang = Languages(); Decode_Date_EU2 if (($year,$month,$day) = Decode_Date_EU2($string)) Decode_Date_US2 if (($year,$month,$day) = Decode_Date_US2($string)) Parse_Date if (($year,$month,$day) = Parse_Date($string)) Version $string = Date::Pcalc::Version(); =head1 IMPORTANT NOTES =over 2 =item * "Year 2000" ("Y2K") compliance The upper limit for any year number in this module is only given by the size of the largest positive integer that can be represented in a variable of the C type "int" on your system, which is at least 32767, according to the ANSI C standard (exceptions see below). In order to simplify calculations, this module B the gregorian calendar B until the year S<1 A.D.> -- i.e., back B the year 1582 when this calendar was first decreed by the catholic pope S! Therefore, B, for instance, and B, because this will in fact perform a calculation based on the year "98" A.D. and B "1998"! The only exceptions from this rule are the functions which contain the word "compress" in their names (which only handle years between 1970 and 2069 and also accept the abbreviations "00" to "99"), and the functions with the words "decode_date" in their names (which add "1900" to the year if the year is less than 100). =item * First index B ranges in this module start with "C<1>", B "C<0>"! I.e., the day of month, day of week, day of year, month of year, week of year, first valid year number and language B start counting at one, B zero! The only exception is the function "C", which may in fact return "C<0>" when the given date actually lies in the last week of the B year. =item * Function naming conventions Function names completely in lower case indicate a boolean return value. =item * Boolean values Boolean values in this module are always a numeric zero ("C<0>") for "false" and a numeric one ("C<1>") for "true". =item * Exception handling The functions in this module will usually die with a corresponding error message if their input parameters, intermediate results or output values are out of range. The following functions handle errors differently: - check_date() - check_business_date() - check_compressed() (which return a "false" return value when the given input does not represent a valid date), - Nth_Weekday_of_Month_Year() (which returns an empty list if the requested 5th day of week does not exist), - Decode_Month() - Decode_Day_of_Week() - Decode_Language() - Compress() (which return "C<0>" upon failure or invalid input), and - Decode_Date_EU() - Decode_Date_US() - Decode_Date_EU2() - Decode_Date_US2() - Parse_Date() - Uncompress() (which return an empty list upon failure or invalid input). Note that you can always catch an exception thrown by any of the functions in this module and handle it yourself by enclosing the function call in an "C" with curly brackets and checking the special variable "C<$@>" (see L for details). =back =head1 DESCRIPTION =over 2 =item * C =item * C You can either specify the functions you want to import explicitly by enumerating them between the parentheses of the "C" operator, or you can use the "C<:all>" tag instead to import B available functions. =item * C<$days = Days_in_Year($year,$month);> This function returns the sum of the number of days in the months starting with January up to and including "C<$month>" in the given year "C<$year>". I.e., "C" returns "C<31>", "C" returns "C<59>", "C" returns "C<90>", and so on. Note that "C" returns the number of days in the given year "C<$year>", i.e., either "C<365>" or "C<366>". =item * C<$days = Days_in_Month($year,$month);> This function returns the number of days in the given month "C<$month>" of the given year "C<$year>". The year must always be supplied, even though it is only needed when the month is February, in order to determine wether it is a leap year or not. I.e., "C" returns "C<31>", "C" returns "C<28>", "C" returns "C<29>", "C" returns "C<31>", and so on. =item * C<$weeks = Weeks_in_Year($year);> This function returns the number of weeks in the given year "C<$year>", i.e., either "C<52>" or "C<53>". =item * C This function returns "true" ("C<1>") if the given year "C<$year>" is a leap year and "false" ("C<0>") otherwise. =item * C This function returns "true" ("C<1>") if the given three numerical values "C<$year>", "C<$month>" and "C<$day>" constitute a valid date, and "false" ("C<0>") otherwise. =item * C This function returns "true" ("C<1>") if the given three numerical values "C<$year>", "C<$week>" and "C<$dow>" constitute a valid business date, and "false" ("C<0>") otherwise. =item * C<$doy = Day_of_Year($year,$month,$day);> This function returns the (relative) number of the day of the given date in the given year. E.g., "C" returns "C<1>", "C" returns "C<32>", and "C" returns either "C<365>" or "C<366>". =item * C<$days = Date_to_Days($year,$month,$day);> This function returns the (absolute) number of the day of the given date, where counting starts at the 1st of January of the year S<1 A.D.> I.e., "C" returns "C<1>", "C" returns "C<365>", "C" returns "C<366>", "C" returns "C<729510>", and so on. =item * C<$dow = Day_of_Week($year,$month,$day);> This function returns the number of the day of week of the given date. The function returns "C<1>" for Monday, "C<2>" for Tuesday and so on until "C<7>" for Sunday. Note that in the Hebrew calendar (on which the Christian calendar is based), the week starts with Sunday and ends with the Sabbath or Saturday (where according to the Genesis (as described in the Bible) the Lord rested from creating the world). In medieval times, Catholic popes decreed the Sunday to be the official day of rest, in order to dissociate the Christian from the Hebrew belief. Nowadays, Sunday B Saturday are commonly considered (and used as) days of rest, usually referred to as the "week-end". Consistent with this practice, current norms and standards (such as S, S and S) define Monday as the first day of the week. =item * C<$week = Week_Number($year,$month,$day);> This function returns the number of the week the given date lies in. If the given date lies in the B week of the B year, "C<0>" is returned. If the given date lies in the B week of the B year, "C" is returned. =item * C<($week,$year) = Week_of_Year($year,$month,$day);> This function returns the number of the week the given date lies in, as well as the year that week belongs to. I.e., if the given date lies in the B week of the B year, "C<(Weeks_in_Year($year-1), $year-1)>" is returned. If the given date lies in the B week of the B year, "C<(1, $year+1)>" is returned. Otherwise, "C<(Week_Number($year,$month,$day), $year)>" is returned. =item * C<($year,$month,$day) = Monday_of_Week($week,$year);> This function returns the date of the first day of the given week, i.e., the Monday. "C<$year>" must be greater than or equal to "C<1>", and "C<$week>" must lie in the range "C<1>" to "C". Note that you can write "C<($year,$month,$day) = Monday_of_Week(Week_of_Year($year,$month,$day));>" in order to calculate the date of the Monday of the same week as the given date. =item * C This function calculates the date of the "C<$n>"th day of week "C<$dow>" in the given month "C<$month>" and year "C<$year>"; such as, for example, the 3rd Thursday of a given month and year. This can be used to send a notification mail to the members of a group which meets regularly on every 3rd Thursday of a month, for instance. (See the section "EXAMPLES" near the end of this document for a code snippet to actually do so.) "C<$year>" must be greater than or equal to "C<1>", "C<$month>" must lie in the range "C<1>" to "C<12>", "C<$dow>" must lie in the range "C<1>" to "C<7>" and "C<$n>" must lie in the range "C<1>" to "C<5>", or a fatal error (with appropriate error message) occurs. The function returns an empty list when the 5th of a given day of week does not exist in the given month and year. =item * C<($year,$week,$dow) = Standard_to_Business($year,$month,$day);> This function converts a given date from standard notation (year, month, day (of month)) to business notation (year, week, day of week). =item * C<($year,$month,$day) = Business_to_Standard($year,$week,$dow);> This function converts a given date from business notation (year, week, day of week) to standard notation (year, month, day (of month)). =item * C<$Dd = Delta_Days($year1,$month1,$day1, $year2,$month2,$day2);> This function returns the difference in days between the two given dates. The result is positive if the two dates are in chronological order, i.e., if date #1 comes chronologically B date #2, and negative if the order of the two dates is reversed. The result is zero if the two dates are identical. =item * C<($Dd,$Dh,$Dm,$Ds) = Delta_DHMS($year1,$month1,$day1, $hour1,$min1,$sec1, $year2,$month2,$day2, $hour2,$min2,$sec2);> This function returns the difference in days, hours, minutes and seconds between the two given dates with times. All four return values will be positive if the two dates are in chronological order, i.e., if date #1 comes chronologically B date #2, and negative (in all four return values!) if the order of the two dates is reversed. This is so that the two functions "C" and "C" (description see further below) are complementary, i.e., mutually inverse: Add_Delta_DHMS(@date1,@time1, Delta_DHMS(@date1,@time1, @date2,@time2)) yields "C<(@date2,@time2)>" again, whereas Add_Delta_DHMS(@date2,@time2, map(-$_, Delta_DHMS(@date1,@time1, @date2,@time2))) yields "C<(@date1,@time1)>", and Delta_DHMS(@date1,@time1, Add_Delta_DHMS(@date1,@time1, @delta)) yields "C<@delta>" again. The result is zero (in all four return values) if the two dates and times are identical. =item * C<($year,$month,$day) = Add_Delta_Days($year,$month,$day, $Dd);> This function has two principal uses: First, it can be used to calculate a new date, given an initial date and an offset (which may be positive or negative) in days, in order to answer questions like "today plus 90 days -- which date gives that?". (In order to add a weeks offset, simply multiply the weeks offset with "C<7>" and use that as your days offset.) Second, it can be used to convert the canonical representation of a date, i.e., the number of that day (where counting starts at the 1st of January in S<1 A.D.>), back into a date given as year, month and day. Because counting starts at "C<1>", you will actually have to subtract "C<1>" from the canonical date in order to get back the original date: $canonical = Date_to_Days($year,$month,$day); ($year,$month,$day) = Add_Delta_Days(1,1,1, $canonical - 1); Moreover, this function is the inverse of the function "C": Add_Delta_Days(@date1, Delta_Days(@date1, @date2)) yields "C<@date2>" again, whereas Add_Delta_Days(@date2, -Delta_Days(@date1, @date2)) yields "C<@date1>", and Delta_Days(@date1, Add_Delta_Days(@date1, $delta)) yields "C<$delta>" again. =item * C<($year,$month,$day, $hour,$min,$sec) = Add_Delta_DHMS($year,$month,$day, $hour,$min,$sec, $Dd,$Dh,$Dm,$Ds);> This function serves to add a days, hours, minutes and seconds offset to a given date and time, in order to answer questions like "today and now plus 7 days but minus 5 hours and then plus 30 minutes, what date and time gives that?": ($y,$m,$d,$H,$M,$S) = Add_Delta_DHMS(Today_and_Now(), +7,-5,+30,0); =item * C<($year,$month,$day) = Add_Delta_YMD($year,$month,$day, $Dy,$Dm,$Dd);> This function serves to add a years, months and days offset to a given date. (In order to add a weeks offset, simply multiply the weeks offset with "C<7>" and add this number to your days offset.) Note that the three offsets for years, months and days are applied separately from each other, in reverse order. (This also allows them to have opposite signs.) In other words, first the days offset is applied (using the function "C", internally), then the months offset, and finally the years offset. If the resulting date happens to fall on a day beyond the end of the resulting month, like the 31st of April or the 29th of February (in non-leap years), then the day is replaced by the last valid day of that month in that year (e.g., the 30th of April or 28th of February). B that this behaviour differs from that of previous versions of this module! (Formerly, only the 29th of February in non-leap years was checked for (which - in contrast to the current version - was replaced by the 1st of March). Other possible invalid dates were not checked (and returned unwittingly), constituting a severe bug of previous versions.) B also that because of this replacement, but even more because a year and a month offset is not equivalent to a fixed number of days, the transformation performed by this function is B! This is in contrast to the functions "C" and "C", which for this very reason have inverse functions (namely "C" and "C"), whereas there exists no inverse for this function. Note that for this same reason, even @date = Add_Delta_YMD( Add_Delta_YMD(@date, $Dy,$Dm,$Dd), -$Dy,-$Dm,-$Dd); will (in general!) B return the initial date "C<@date>"! (This might work in some cases, though.) Note that this is B a program bug but B so because of the varying lengths of years and months! =item * C<($year,$month,$day, $hour,$min,$sec, $doy,$dow,$dst) = System_Clock();> If your operating system supports the corresponding system calls ("C" and "C"), this function will return the information provided by your system clock, i.e., the current date and time, the number of the day of year, the number of the day of week and a flag signaling wether daylight savings time is currently in effect or not. The ranges of values returned (and their meanings) are as follows: $year : should at least cover 1900..2038 $month : 1..12 $day : 1..31 $hour : 0..23 $min : 0..59 $sec : 0..59 (0..61 on some systems) $doy : 1..366 $dow : 1..7 $dst : -1..1 The day of week ("C<$dow>") will be "C<1>" for Monday, "C<2>" for Tuesday and so on until "C<7>" for Sunday. The daylight savings time flag ("C<$dst>") will be "C<-1>" if this information is not available on your system, "C<0>" for no daylight savings time (i.e., normal time) and "C<1>" when daylight savings time is in effect. If your operating system does not provide the necessary system calls, calling this function will result in a fatal "not available on this system" error message. If you want to handle this exception yourself, use "C" as follows: eval { ($year,$month,$day, $hour,$min,$sec, $doy,$dow,$dst) = System_Clock(); }; if ($@) { # Handle missing system clock # (For instance, ask user to enter this information manually) } Note that curlies ("{" and "}") are used here to delimit the statement to be "eval"ed (which is the way to catch exceptions in Perl), and not quotes (which is a way to evaluate Perl expressions at runtime). =item * C<($year,$month,$day) = Today();> This function returns a subset of the values returned by the function "C" (see above for details), namely the current year, month and day. A fatal "not available on this system" error message will appear if the corresponding system calls are not supported by your current operating system. =item * C<($hour,$min,$sec) = Now();> This function returns a subset of the values returned by the function "C" (see above for details), namely the current time (hours, minutes and full seconds). A fatal "not available on this system" error message will appear if the corresponding system calls are not supported by your current operating system. =item * C<($year,$month,$day, $hour,$min,$sec) = Today_and_Now();> This function returns a subset of the values returned by the function "C" (see above for details), namely the current date (year, month, day) and time (hours, minutes and full seconds). A fatal "not available on this system" error message will appear if the corresponding system calls are not supported by your current operating system. =item * C<($year,$month,$day) = Easter_Sunday($year);> This function calculates the date of easter sunday for all years in the range from 1583 to 2299 (all other year numbers will result in a fatal "year out of range" error message) using the method known as the "Gaussian Rule". Some related christian feast days which depend on the date of easter sunday: Carnival Monday / Rosenmontag / Veille du Mardi Gras = -48 days Mardi Gras / Karnevalsdienstag / Mardi Gras = -47 days Ash Wednesday / Aschermittwoch / Mercredi des Cendres = -46 days Palm Sunday / Palmsonntag / Dimanche des Rameaux = -7 days Easter Friday / Karfreitag / Vendredi Saint = -2 days Easter Saturday / Ostersamstag / Samedi de Paques = -1 day Easter Monday / Ostermontag / Lundi de Paques = +1 day Ascension of Christ / Christi Himmelfahrt / Ascension = +39 days Whitsunday / Pfingstsonntag / Dimanche de Pentecote = +49 days Whitmonday / Pfingstmontag / Lundi de Pentecote = +50 days Feast of Corpus Christi / Fronleichnam / Fete-Dieu = +60 days Use the offsets shown above to calculate the date of the corresponding feast day as follows: ($year,$month,$day) = Add_Delta_Days(Easter_Sunday($year), $offset)); =item * C This function takes a string as its argument, which should contain the name of a month B (see further below for details about multi-language support by this package), or any uniquely identifying abbreviation of a month's name (i.e., the first few letters), and returns the corresponding number (1..12) upon a successful match, or "C<0>" otherwise (therefore, the return value can also be used as the conditional expression in an "if" statement). Note that the input string may not contain any other characters which do not pertain to the month's name, especially no leading or trailing whitespace. Note also that matching is performed in a case-insensitive manner (this may depend on the "locale" setting on your current system, though!) With "English" as the currently selected language (which is the default), the following examples will all return the value "C<9>": $month = Decode_Month("s"); $month = Decode_Month("Sep"); $month = Decode_Month("septemb"); $month = Decode_Month("September"); =item * C This function takes a string as its argument, which should contain the name of a day of week B (see further below for details about multi-language support by this package), or any uniquely identifying abbreviation of the name of a day of week (i.e., the first few letters), and returns the corresponding number (1..7) upon a successful match, or "C<0>" otherwise (therefore, the return value can also be used as the conditional expression in an "if" statement). Note that the input string may not contain any other characters which do not pertain to the name of the day of week, especially no leading or trailing whitespace. Note also that matching is performed in a case-insensitive manner (this may depend on the "locale" setting on your current system, though!) With "English" as the currently selected language (which is the default), the following examples will all return the value "C<3>": $dow = Decode_Day_of_Week("w"); $dow = Decode_Day_of_Week("Wed"); $dow = Decode_Day_of_Week("wednes"); $dow = Decode_Day_of_Week("Wednesday"); =item * C This function takes a string as its argument, which should contain the name of one of the languages supported by this package (B), or any uniquely identifying abbreviation of the name of a language (i.e., the first few letters), and returns its corresponding internal number (1..6 in the original distribution) upon a successful match, or "C<0>" otherwise (therefore, the return value can also be used as the conditional expression in an "if" statement). Note that the input string may not contain any other characters which do not pertain to the name of a language, especially no leading or trailing whitespace. Note also that matching is performed in a case-insensitive manner (this may depend on the "locale" setting on your current system, though!) The original distribution supports the following six languages: English ==> 1 (default) Français (French) ==> 2 Deutsch (German) ==> 3 Español (Spanish) ==> 4 Português (Portuguese) ==> 5 Nederlands (Dutch) ==> 6 See the section "How to install additional languages" in the file "INSTALL.txt" in this distribution for how to add more languages to this package. In the original distribution (no other languages installed), the following examples will all return the value "C<3>": $lang = Decode_Language("d"); $lang = Decode_Language("de"); $lang = Decode_Language("Deutsch"); Note that you may not be able to enter the special international characters in some of the languages' names over the keyboard directly on some systems. This should never be a problem, though; just enter an abbreviation of the name of the language consisting of the first few letters up to the character before the first special international character. =item * C This function scans a given string and tries to parse any date which might be embedded in it. In the original module this was a C routine; now it is simply a call to the perl subroutine Decode_Date_EU2 (see below). The function returns an empty list if it can't successfully extract a valid date from its input string, or else it returns the date found. The function accepts almost any format, as long as the date is given in the european order (hence its name) day-month-year. Thereby, zero or more B characters may B the day and B the year. Moreover, zero or more B characters are permitted B these three items (i.e., between day and month and between month and year). The month may be given either numerically (i.e., a number from "C<1>" to "C<12>"), or alphanumerically, i.e., as the name of the month B, or any uniquely identifying abbreviation thereof. (See further below for details about multi-language support by this package!) If the year is given as one or two digits only (i.e., if the year is less than 100), "C<1900>" is added to it. If the day, month and year are all given numerically but B any delimiting characters between them, this string of digits will be mapped to the day, month and year as follows: Length: Mapping: 3 dmy 4 dmyy 5 dmmyy 6 ddmmyy 7 dmmyyyy 8 ddmmyyyy (Where "d" stands for "day", "m" stands for "month" and "y" stands for "year".) All other strings consisting purely of digits (without any intervening delimiters) are rejected, i.e., not recognized. Examples: "3.1.64" "3 1 64" "03.01.64" "03/01/64" "3. Jan 1964" "Birthday: 3. Jan '64 in Backnang/Germany" "03-Jan-64" "3.Jan1964" "3Jan64" "030164" "3ja64" "3164" Experiment! (See the corresponding example applications in the "examples" subdirectory of this distribution in order to do so.) =item * C This function scans a given string and tries to parse any date which might be embedded in it. In the original module, this was a C routine. Now it is simply a call to the perl subroutine Decode_Date_US2 (see below). The function returns an empty list if it can't successfully extract a valid date from its input string, or else it returns the date found. The function accepts almost any format, as long as the date is given in the U.S. american order (hence its name) month-day-year. Thereby, zero or more B characters may B and B the month (i.e., precede the month and separate it from the day which follows behind). Moreover, zero or more B characters are permitted B the day and the year, as well as B the year. The month may be given either numerically (i.e., a number from "C<1>" to "C<12>"), or alphanumerically, i.e., as the name of the month B, or any uniquely identifying abbreviation thereof. (See further below for details about multi-language support by this package!) If the year is given as one or two digits only (i.e., if the year is less than 100), "C<1900>" is added to it. If the month, day and year are all given numerically but B any delimiting characters between them, this string of digits will be mapped to the month, day and year as follows: Length: Mapping: 3 mdy 4 mdyy 5 mddyy 6 mmddyy 7 mddyyyy 8 mmddyyyy (Where "m" stands for "month", "d" stands for "day" and "y" stands for "year".) All other strings consisting purely of digits (without any intervening delimiters) are rejected, i.e., not recognized. If only the day and the year form a contiguous string of digits, they will be mapped as follows: Length: Mapping: 2 dy 3 dyy 4 ddyy 5 dyyyy 6 ddyyyy (Where "d" stands for "day" and "y" stands for "year".) Examples: "1 3 64" "01/03/64" "Jan 3 '64" "Jan 3 1964" "===> January 3rd 1964 (birthday)" "Jan31964" "Jan364" "ja364" "1364" Experiment! (See the corresponding example applications in the "examples" subdirectory of this distribution in order to do so.) =item * C<$date = Compress($year,$month,$day);> This function encodes a date in 16 bits, which is the value being returned. The encoding scheme is as follows: Bit number: FEDCBA9 8765 43210 Contents: yyyyyyy mmmm ddddd (Where the "yyyyyyy" contain the number of the year, "mmmm" the number of the month and "ddddd" the number of the day.) The function returns "C<0>" if the given input values do not represent a valid date. Therefore, the return value of this function can also be used as the conditional expression in an "if" statement, in order to check wether the given input values constitute a valid date). Through this special encoding scheme, it is possible to B compressed dates for equality and order (less than/greater than) B any previous B! Note however that contiguous dates do B necessarily have contiguous compressed representations! I.e., incrementing the compressed representation of a date B yield a valid new date! Note also that this function can only handle dates within one century. This century can be chosen at random by defining a base century and year (also called the "epoch"). In the original distribution of this package, the base century is set to "1900" and the base year to "70" (which is standard on UNIX systems). This allows this function to handle dates from "1970" up to "2069". If the given year is equal to, say, "95", this package will automatically assume that you really mean "1995" instead. However, if you specify a year number which is B than 70, like "64", for instance, this package will assume that you really mean "2064". You are not confined to two-digit (abbreviated) year numbers, though. The function also accepts "full-length" year numbers, provided that they lie in the supported range (i.e., from "1970" to "2069", in the original configuration of this package). Note that this function is maintained mainly for backward compatibility, and that its use is not recommended. =item * C This function decodes dates that were encoded previously using the function "C". It returns the century, year, month and day of the date encoded in "C<$date>" if "C<$date>" represents a valid date, or an empty list otherwise. The year returned in "C<$year>" is actually a two-digit year number (i.e., the year number taken modulo 100), and only the expression "C<$century + $year>" yields the "full-length" year number (for example, C<1900 + 95 = 1995>). Note that this function is maintained mainly for backward compatibility, and that its use is not recommended. =item * C This function returns "true" ("C<1>") if the given input value constitutes a valid compressed date, and "false" ("C<0>") otherwise. Note that this function is maintained mainly for backward compatibility, and that its use is not recommended. =item * C<$string = Compressed_to_Text($date);> This function returns a string of fixed length (always 9 characters long) containing a textual representation of the compressed date encoded in "C<$date>". This string has the form "dd-Mmm-yy", where "dd" is the two-digit number of the day, "Mmm" are the first three letters of the name of the month in the currently selected language (see further below for details about multi-language support by this package), and "yy" is the two-digit year number (i.e., the year number taken modulo 100). If "C<$date>" does not represent a valid date, the string "??-???-??" is returned instead. Note that this function is maintained mainly for backward compatibility, and that its use is not recommended. =item * C<$string = Date_to_Text($year,$month,$day);> This function returns a string containing a textual representation of the given date of the form "www dd-Mmm-yyyy", where "www" are the first three letters of the name of the day of week in the currently selected language, or a special abbreviation, if special abbreviations have been defined for the currently selected language (see further below for details about multi-language support by this package), "dd" is the day (one or two digits), "Mmm" are the first three letters of the name of the month in the currently selected language, and "yyyy" is the number of the year in full length. If the given input values do not constitute a valid date, a fatal "not a valid date" error occurs. (See the section "EXAMPLES" near the end of this document for a code snippet for how to print dates in any format you like.) =item * C<$string = Date_to_Text_Long($year,$month,$day);> This function returns a string containing a textual representation of the given date of the form "wwwwww dd Mmmmmm yyyy", where "wwwwww" is the name of the day of week in the currently selected language (see further below for details about multi-language support by this package), "dd" is the day (one or two digits), "Mmmmmm" is the name of the month in the currently selected language, and "yyyy" is the number of the year in full length. If the given input values do not constitute a valid date, a fatal "not a valid date" error occurs. (See the section "EXAMPLES" near the end of this document for a code snippet for how to print dates in any format you like.) =item * C<$string = Calendar($year,$month);> This function returns a calendar of the given month in the given year (somewhat similar to the UNIX "cal" command), B (see further below for details about multi-language support by this package). Example: print Calendar(1998,5); This will print: May 1998 Mon Tue Wed Thu Fri Sat Sun 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 =item * C<$string = Month_to_Text($month);> This function returns the name of the given month in the currently selected language (see further below for details about multi-language support by this package). If the given month lies outside of the valid range from "C<1>" to "C<12>", a fatal "month out of range" error will occur. =item * C<$string = Day_of_Week_to_Text($dow);> This function returns the name of the given day of week in the currently selected language (see further below for details about multi-language support by this package). If the given day of week lies outside of the valid range from "C<1>" to "C<7>", a fatal "day of week out of range" error will occur. =item * C<$string = Day_of_Week_Abbreviation($dow);> This function returns the special abbreviation of the name of the given day of week, B such special abbreviations have been defined for the currently selected language (see further below for details about multi-language support by this package). (In the original distribution of this package, this is only true for Portuguese.) If not, the first three letters of the name of the day of week in the currently selected language are returned instead. If the given day of week lies outside of the valid range from "C<1>" to "C<7>", a fatal "day of week out of range" error will occur. Currently, this table of special abbreviations is only used by the functions "C" and "C", internally. =item * C<$string = Language_to_Text($lang);> This function returns the name of any language supported by this package when the internal number representing that language is given as input. The original distribution supports the following six languages: 1 ==> English (default) 2 ==> Français (French) 3 ==> Deutsch (German) 4 ==> Español (Spanish) 5 ==> Português (Portuguese) 6 ==> Nederlands (Dutch) See the section "How to install additional languages" in the file "INSTALL.txt" in this distribution for how to add more languages to this package. See the description of the function "C" further below to determine how many languages are actually available in a given installation of this package. =item * C<$lang = Language();> =item * C =item * C<$oldlang = Language($newlang);> This function can be used to determine which language is currently selected, and to change the selected language. Thereby, each language has a unique internal number. The original distribution contains the following six languages: 1 ==> English (default) 2 ==> Français (French) 3 ==> Deutsch (German) 4 ==> Español (Spanish) 5 ==> Português (Portuguese) 6 ==> Nederlands (Dutch) See the section "How to install additional languages" in the file "INSTALL.txt" in this distribution for how to add more languages to this package. See the description of the function "C" further below to determine how many languages are actually available in a given installation of this package. B that in order for your programs to be portable, you should B actually use the internal number of a language in this package B, because the same number could mean different languages on different systems, depending on what languages have been added to any given installation of this package. Therefore, you should always use a statement such as Language(Decode_Language("Name_of_Language")); to select the desired language, and $language = Language_to_Text(Language()); or $old_language = Language_to_Text(Language("Name_of_new_Language")); to determine the (previously) selected language. If the so chosen language is not available in the current installation, this will result in an appropriate error message, instead of silently using the wrong (a random) language (which just happens to have the same internal number in the other installation). Note that in the current implementation of this package, the selected language is a global setting valid for B functions that use the names of months, days of week or languages internally, valid for B using the same copy of the "Date::Pcalc" shared library in memory! This may have surprising side-effects in a multi-user environment, and even more so when Perl will be capable of multi-threading in some future release. =item * C<$max_lang = Languages();> This function returns the (maximum) number of languages which are currently available in your installation of this package. (This may vary from installation to installation.) See the section "How to install additional languages" in the file "INSTALL.txt" in this distribution for how to add more languages to this package. In the original distribution of this package there are six built-in languages, therefore the value returned by this function will be "C<6>" if no other languages have been added to your particular installation. =item * C This function is the Perl equivalent of the function "C" (implemented in C), included here merely as an example to demonstrate how easy it is to write your own routine in Perl (using regular expressions) adapted to your own special needs, should the necessity arise, and intended primarily as a basis for your own development. In one particular case this Perl version is actually slightly more permissive than its C equivalent, as far as the class of permitted intervening (i.e., delimiting) characters is concerned. (Can you tell the subtle, almost insignificant difference by looking at the code? Or by experimenting? Hint: Try the string "a3b1c64d" with both functions.) =item * C This function is the Perl equivalent of the function "C" (implemented in C), included here merely as an example to demonstrate how easy it is to write your own routine in Perl (using regular expressions) adapted to your own special needs, should the necessity arise, and intended primarily as a basis for your own development. In one particular case this Perl version is actually slightly more permissive than its C equivalent. (Hint: This is the same difference as with the "C" and "C" pair of functions.) In a different case, the C version is a little bit more permissive than its Perl equivalent. (Can you tell the difference by looking at the code? Or by experimenting? Hint: Try the string "(1/364)" with both functions.) =item * C This function is useful for parsing dates as returned by the UNIX "C" command or as found in the headers of e-mail (in order to determine the date at which some e-mail has been sent, for instance). Example #1: ($year,$month,$day) = Parse_Date(`/bin/date`); Example #2: while () { if (/^From \S/) { ($year,$month,$day) = Parse_Date($_); ... } ... } The function returns an empty list if it can't extract a valid date from the input string. =item * C<$string = Date::Pcalc::Version();> This function returns a string with the (numeric) version number of the S ("DateCalc.c") at the core of this package (which is also (automatically) the version number of the "Calc.xs" file). Note that under all normal circumstances, this version number should be identical with the one found in the Perl variable "C<$Date::Pcalc::VERSION>" (the version number of the "Calc.pm" file). Since this function is not exported, you always have to qualify it explicitly, i.e., "C". This is to avoid possible name space conflicts with version functions from other modules. =back =head1 EXAMPLES =over 4 =item 1) How do I compare two dates? Solution #1: use Date::Pcalc qw( Date_to_Days ); if (Date_to_Days($year1,$month1,$day1) < Date_to_Days($year2,$month2,$day2)) if (Date_to_Days($year1,$month1,$day1) <= Date_to_Days($year2,$month2,$day2)) if (Date_to_Days($year1,$month1,$day1) > Date_to_Days($year2,$month2,$day2)) if (Date_to_Days($year1,$month1,$day1) >= Date_to_Days($year2,$month2,$day2)) if (Date_to_Days($year1,$month1,$day1) == Date_to_Days($year2,$month2,$day2)) if (Date_to_Days($year1,$month1,$day1) != Date_to_Days($year2,$month2,$day2)) $cmp = (Date_to_Days($year1,$month1,$day1) <=> Date_to_Days($year2,$month2,$day2)); Solution #2: use Date::Pcalc qw( Delta_Days ); if (Delta_Days($year1,$month1,$day1, $year2,$month2,$day2) > 0) if (Delta_Days($year1,$month1,$day1, $year2,$month2,$day2) >= 0) if (Delta_Days($year1,$month1,$day1, $year2,$month2,$day2) < 0) if (Delta_Days($year1,$month1,$day1, $year2,$month2,$day2) <= 0) if (Delta_Days($year1,$month1,$day1, $year2,$month2,$day2) == 0) if (Delta_Days($year1,$month1,$day1, $year2,$month2,$day2) != 0) =item 2) How do I check wether a given date lies within a certain range of dates? use Date::Pcalc qw( Date_to_Days ); $lower = Date_to_Days($year1,$month1,$day1); $upper = Date_to_Days($year2,$month2,$day2); $date = Date_to_Days($year,$month,$day); if (($date >= $lower) && ($date <= $upper)) { # ok } else { # not ok } =item 3) How do I verify wether someone has a certain age? use Date::Pcalc qw( Decode_Date_EU Today leap_year Delta_Days ); $date = ; # get birthday ($year1,$month1,$day1) = Decode_Date_EU($date); ($year2,$month2,$day2) = Today(); if (($month1 == 2) && ($day1 == 29) && !leap_year($year2)) { $day1--; } if ( (($year2 - $year1) > 18) || ( (($year2 - $year1) == 18) && (Delta_Days($year2,$month1,$day1, $year2,$month2,$day2) >= 0) ) ) { print "Ok - you are over 18.\n"; } else { print "Sorry - you aren't 18 yet!\n"; } =item 4) How do I calculate the number of the week of month the current date lies in? For example: April 1998 Mon Tue Wed Thu Fri Sat Sun 1 2 3 4 5 = week #1 6 7 8 9 10 11 12 = week #2 13 14 15 16 17 18 19 = week #3 20 21 22 23 24 25 26 = week #4 27 28 29 30 = week #5 Solution: use Date::Pcalc qw( Today Day_of_Week ); ($year,$month,$day) = Today(); $week = int(($day + Day_of_Week($year,$month,1) - 2) / 7) + 1; =item 5) How do I calculate wether a given date is the 1st, 2nd, 3rd, 4th or 5th of that day of week in the given month? For example: October 2000 Mon Tue Wed Thu Fri Sat Sun 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 Is Sunday, the 15th of October 2000, the 1st, 2nd, 3rd, 4th or 5th Sunday of that month? Solution: use Date::Pcalc qw( Delta_Days Nth_Weekday_of_Month_Year Day_of_Week Day_of_Week_to_Text Date_to_Text_Long Month_to_Text ); %ordinal = ( 1 => 'st', 2 => 'nd', 3 => 'rd' ); ($year,$month,$day) = (2000,10,15); $dow = Day_of_Week($year,$month,$day); $n = int( Delta_Days( Nth_Weekday_of_Month_Year($year,$month,$dow,1), $year,$month,$day) / 7) + 1; printf("%s is the %s %s in %s %d.\n", Date_to_Text_Long($year,$month,$day), $n . ($ordinal{$n} || 'th'), Day_of_Week_to_Text($dow), Month_to_Text($month), $year); This prints: Sunday, 15 October 2000 is the 3rd Sunday in October 2000. =item 6) How do I calculate the date of the Wednesday of the same week as the current date? Solution #1: use Date::Pcalc qw( Today Day_of_Week Add_Delta_Days ); $searching_dow = 3; # 3 = Wednesday @today = Today(); $current_dow = Day_of_Week(@today); @date = Add_Delta_Days(@today, $searching_dow - $current_dow); Solution #2: use Date::Pcalc qw( Today Monday_of_Week Week_of_Year Add_Delta_Days ); $searching_dow = 3; # 3 = Wednesday @today = Today(); @date = Add_Delta_Days( Monday_of_Week( Week_of_Year(@today) ), $searching_dow - 1 ); Solution #3: use Date::Pcalc qw( Today Standard_to_Business Business_to_Standard ); @business = Standard_to_Business(Today()); $business[2] = 3; # 3 = Wednesday @date = Business_to_Standard(@business); =item 7) How can I add a week offset to a business date (including across year boundaries)? use Date::Pcalc qw( Standard_to_Business Business_to_Standard ); @temp = Business_to_Standard($year,$week,$dow); @temp = Add_Delta_Days(@temp, $week_offset * 7); ($year,$week,$dow) = Business_to_Standard(@temp); =item 8) How do I calculate the last and the next Saturday for any given date? use Date::Pcalc qw( Today Day_of_Week Add_Delta_Days Day_of_Week_to_Text Date_to_Text ); $searching_dow = 6; # 6 = Saturday @today = Today(); $current_dow = Day_of_Week(@today); if ($searching_dow == $current_dow) { @prev = Add_Delta_Days(@today,-7); @next = Add_Delta_Days(@today,+7); } else { if ($searching_dow > $current_dow) { @next = Add_Delta_Days(@today, $searching_dow - $current_dow); @prev = Add_Delta_Days(@next,-7); } else { @prev = Add_Delta_Days(@today, $searching_dow - $current_dow); @next = Add_Delta_Days(@prev,+7); } } $dow = Day_of_Week_to_Text($searching_dow); print "Today is: ", ' ' x length($dow), Date_to_Text(@today), "\n"; print "Last $dow was: ", Date_to_Text(@prev), "\n"; print "Next $dow will be: ", Date_to_Text(@next), "\n"; This will print something like: Today is: Sun 12-Apr-1998 Last Saturday was: Sat 11-Apr-1998 Next Saturday will be: Sat 18-Apr-1998 =item 9) How can I calculate the last business day (payday!) of a month? Solution #1 (holidays B taken into account): $day = Days_in_Month($year,$month); $dow = Day_of_Week($year,$month,$day); if ($dow > 5) { ($year,$month,$day) = Add_Delta_Days($year,$month,$day, 5-$dow); } Solution #2 (holidays taken into account): This solution expects a multi-dimensional array "C<@holiday>", which contains all holidays, as follows: "C<$holiday[$year][$month][$day] = 1;>". (See the description of the function "C" further above for how to calculate the moving (variable) christian feast days!) Days which are not holidays remain undefined or should have a value of zero in this array. $day = Days_in_Month($year,$month); while (1) { while ($holiday[$year][$month][$day]) { ($year,$month,$day) = Add_Delta_Days($year,$month,$day, -1); } $dow = Day_of_Week($year,$month,$day); if ($dow > 5) { ($year,$month,$day) = Add_Delta_Days($year,$month,$day, 5-$dow); } else { last; } } =item 10) How do I convert a MS Visual Basic "DATETIME" value into its date and time constituents? use Date::Pcalc qw( Add_Delta_DHMS Date_to_Text ); $datetime = "35883.121653"; ($Dd,$Dh,$Dm,$Ds) = ($datetime =~ /^(\d+)\.(\d\d)(\d\d)(\d\d)$/); ($year,$month,$day, $hour,$min,$sec) = Add_Delta_DHMS(1900,1,1, 0,0,0, $Dd,$Dh,$Dm,$Ds); printf("The given date is %s %02d:%02d:%02d\n", Date_to_Text($year,$month,$day), $hour, $min, $sec); This prints: The given date is Tue 31-Mar-1998 12:16:53 =item 11) How can I send a reminder to members of a group on the day before a meeting occurring each first Friday of a month? use Date::Pcalc qw( Today Date_to_Days Add_Delta_YMD Nth_Weekday_of_Month_Year ); ($year,$month,$day) = Today(); $tomorrow = Date_to_Days($year,$month,$day) + 1; $dow = 5; # 5 = Friday $n = 1; # 1 = First of that day of week $meeting_this_month = Date_to_Days( Nth_Weekday_of_Month_Year($year,$month,$dow,$n) ); ($year,$month,$day) = Add_Delta_YMD($year,$month,$day, 0,1,0); $meeting_next_month = Date_to_Days( Nth_Weekday_of_Month_Year($year,$month,$dow,$n) ); if (($tomorrow == $meeting_this_month) || ($tomorrow == $meeting_next_month)) { # Send reminder mail! } =item 12) How can I print a date in a different format than provided by the functions "C", "C" or "C"? use Date::Pcalc qw( Day_of_Week Day_of_Week_to_Text Month_to_Text Today ); ($year,$month,$day) = Today(); For example with leading zeros for the day: "S" printf("%.3s %02d-%.3s-%d\n", Day_of_Week_to_Text(Day_of_Week($year,$month,$day)), $day, Month_to_Text($month), $year); For example in U.S. american format: "S" %ordinal = ( 1 => 'st', 2 => 'nd', 3 => 'rd' ); sub ordinal { return( $_[0] . ( (substr($_[0],-2,1) ne '1') && $ordinal{substr($_[0],-1)} || 'th' ) ); } $string = sprintf("%s %s, %d", Month_to_Text($month), ordinal($day), $year); (See also L and/or L!) =back =head1 SEE ALSO perl(1), perlfunc(1), perlsub(1), perlmod(1), perlxs(1), perlxstut(1), perlguts(1). news:news.answers "Calendar FAQ, v. 1.9 (modified 25 Apr 1998) Part 1/3" news:news.answers "Calendar FAQ, v. 1.9 (modified 25 Apr 1998) Part 2/3" news:news.answers "Calendar FAQ, v. 1.9 (modified 25 Apr 1998) Part 3/3" http://www.math.uio.no/faq/calendars/faq.html http://www.pip.dknet.dk/~pip10160/calendar.html (All authored by Claus Tondering ) =head1 LIMITATIONS In the current implementation of this package, the selected language is stored in a global variable named $pcalc_Language. Therefore, on systems where the "Date::Pcalc" module is a shared library, or as soon as Perl will be capable of multi-threading, this may cause undesired effects (of one process or thread always selecting the language for B processes or threads as well). =head1 VERSION This man page documents "Date::Pcalc" version 1.0. =head1 AUTHOR J. David Eisenberg 4604 Corrida Circle San Jose, California 95129 USA mailto: nessus@best.com http://www.best.com/~nessus/date/pcalc.html B All the mistakes in this implementation are caused by my translation of the original C code to perl. Anything that works does so because it was written correctly by the original author: Steffen Beyer mailto:sb@engelschall.com http://www.engelschall.com/u/sb/download/ B =head1 COPYRIGHT Copyright (c) 1999 by J. David Eisenberg; portions Copyright (c) 1995, 1996, 1997, 1998 by Steffen Beyer. All rights reserved. =head1 LICENSE This package is free software; you can redistribute it and/or modify it under the same terms as Perl itself, i.e., under the terms of the "Artistic License" or the "GNU General Public License". The C library at the core of this Perl module can additionally be redistributed and/or modified under the terms of the "GNU Library General Public License". Please refer to the files "Artistic.txt", "GNU_GPL.txt" and "GNU_LGPL.txt" in this distribution for details! =head1 DISCLAIMER This package 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. ==cut opensrs-client-3.0.0/lib/DebugCustom.pm0000644017777601777760000000603610770014202021063 0ustar nobodynogroup00000000000000###################################### package DebugCustom; ###################################### ############################################################## =head1 NAME DebugCustom - A module for debugging =head1 VERSION $Id: DebugCustom.pm,v 1.4 2001/03/20 14:57:48 zdimic Exp $ =head1 SYNOPSIS my $obj = new DebugCustom(DEBUG => "1"); - to turn it on my $obj = new DebugCustom(DEBUG => "0"); - to turn it off =head1 DESCRIPTION this module is used for debug printing =cut ############################################################### $DebugCustom::AB_DEBUG=0; sub new { my $this = shift; my %args = @_; my $self = {}; bless $self; #print "args=@_\n"; #print "args{DEBUG}= $args{DEBUG}"; if ( defined $args{DEBUG}) { if ($args{DEBUG} == 1) { print "Module $0 is running in DEBUG mode\n"; } $DebugCustom::AB_DEBUG=$args{DEBUG}; #print "DebugCustom::AB_DEBUG=$DebugCustom::AB_DEBUG\n"; } return $self; } #################################################### #

debug print # @param $string - any debug string #################################################### sub debug_print { my $self = shift; if ($DebugCustom::AB_DEBUG) { my $string = $_[0]; print "$string\n"; } } #################################################### #

debug print (multi-line) # @param $string - any debug string # @param @params - parameters to print #################################################### sub debug_print_m { my $self = shift; if ($DebugCustom::AB_DEBUG) { my $string = $_[0]; my $i; print "$string \n"; for($i=1; $i<@_; $i++) { print " $i: $_[$i] \n"; } } } #################################################### #

DEBUG PRINT Array # @param - $string - header string # @param @array - array to print #################################################### sub debug_print_array { my $self = shift; if ($DebugCustom::AB_DEBUG) { my $string = $_[0]; print "$string \n"; my $i; for($i=1; $i<@_; $i++) { print " $i: $_[$i] \n"; } } } #################################################### #

PRINT Array # @param - $string - header string # @param @array - array to print #################################################### sub print_array { my $self = shift; my $string = $_[0]; print "$string \n"; my $i; my $j=0; for($i=1; $i<@_; $i++) { print " $j: $_[$i] \n"; } } ####################################################### #

PRINT Hash # @param - $string - header string # @param - $hash_ref - reference to hash array to print ####################################################### sub debug_print_hash { if ($DebugCustom::AB_DEBUG) { my $self = shift; my ($string, $hash_ref) = @_; print "$string \n"; my $j=0; foreach $key (sort keys %{$hash_ref}) { $j++; print " $j: key=$key value=$hash_ref->{$key} \n"; } } } 1; opensrs-client-3.0.0/lib/cgi-lib.pl0000644017777601777760000003547510770014202020160 0ustar nobodynogroup00000000000000# Perl Routines to Manipulate CGI input # cgi-lib@pobox.com # $Id: cgi-lib.pl,v 1.1 1999/11/18 06:33:46 bhilton Exp $ # # Copyright (c) 1993-1998 Steven E. Brenner # Unpublished work. # Permission granted to use and modify this library so long as the # copyright above is maintained, modifications are documented, and # credit is given for any use of the library. # # Thanks are due to many people for reporting bugs and suggestions # For more information, see: # http://cgi-lib.stanford.edu/cgi-lib/ $cgi_lib'version = sprintf("%d.%02d", q$Revision: 1.1 $ =~ /(\d+)\.(\d+)/); # Parameters affecting cgi-lib behavior # User-configurable parameters affecting file upload. $cgi_lib'maxdata = 500000; # maximum bytes to accept via POST - 2^17 #$cgi_lib'maxdata = 131072; # maximum bytes to accept via POST - 2^17 $cgi_lib'writefiles = 0; # directory to which to write files, or # 0 if files should not be written $cgi_lib'filepre = "cgi-lib"; # Prefix of file names, in directory above # Do not change the following parameters unless you have special reasons $cgi_lib'bufsize = 8192; # default buffer size when reading multipart $cgi_lib'maxbound = 100; # maximum boundary length to be encounterd $cgi_lib'headerout = 0; # indicates whether the header has been printed # ReadParse # Reads in GET or POST data, converts it to unescaped text, and puts # key/value pairs in %in, using "\0" to separate multiple selections # Returns >0 if there was input, 0 if there was no input # undef indicates some failure. # Now that cgi scripts can be put in the normal file space, it is useful # to combine both the form and the script in one place. If no parameters # are given (i.e., ReadParse returns FALSE), then a form could be output. # If a reference to a hash is given, then the data will be stored in that # hash, but the data from $in and @in will become inaccessable. # If a variable-glob (e.g., *cgi_input) is the first parameter to ReadParse, # information is stored there, rather than in $in, @in, and %in. # Second, third, and fourth parameters fill associative arrays analagous to # %in with data relevant to file uploads. # If no method is given, the script will process both command-line arguments # of the form: name=value and any text that is in $ENV{'QUERY_STRING'} # This is intended to aid debugging and may be changed in future releases sub ReadParse { local (*in) = shift if @_; # CGI input local (*incfn, # Client's filename (may not be provided) *inct, # Client's content-type (may not be provided) *insfn) = @_; # Server's filename (for spooled files) local ($len, $type, $meth, $errflag, $cmdflag, $perlwarn, $got, $name); # Disable warnings as this code deliberately uses local and environment # variables which are preset to undef (i.e., not explicitly initialized) $perlwarn = $^W; $^W = 0; binmode(STDIN); # we need these for DOS-based systems binmode(STDOUT); # and they shouldn't hurt anything else binmode(STDERR); # Get several useful env variables $type = $ENV{'CONTENT_TYPE'}; $len = $ENV{'CONTENT_LENGTH'}; $meth = $ENV{'REQUEST_METHOD'}; if ($len > $cgi_lib'maxdata) { #' &CgiDie("cgi-lib.pl: Request to receive too much data: $len bytes\n"); } if (!defined $meth || $meth eq '' || $meth eq 'GET' || $meth eq 'HEAD' || $type eq 'application/x-www-form-urlencoded') { local ($key, $val, $i); # Read in text if (!defined $meth || $meth eq '') { $in = $ENV{'QUERY_STRING'}; $cmdflag = 1; # also use command-line options } elsif($meth eq 'GET' || $meth eq 'HEAD') { $in = $ENV{'QUERY_STRING'}; } elsif ($meth eq 'POST') { if (($got = read(STDIN, $in, $len) != $len)) {$errflag="Short Read: wanted $len, got $got\n";}; } else { &CgiDie("cgi-lib.pl: Unknown request method: $meth\n"); } @in = split(/[&;]/,$in); push(@in, @ARGV) if $cmdflag; # add command-line parameters foreach $i (0 .. $#in) { # Convert plus to space $in[$i] =~ s/\+/ /g; # Split into key and value. ($key, $val) = split(/=/,$in[$i],2); # splits on the first =. # Convert %XX from hex numbers to alphanumeric $key =~ s/%([A-Fa-f0-9]{2})/pack("c",hex($1))/ge; $val =~ s/%([A-Fa-f0-9]{2})/pack("c",hex($1))/ge; # Associate key and value $in{$key} .= "\0" if (defined($in{$key})); # \0 is the multiple separator $in{$key} .= $val; } } elsif ($ENV{'CONTENT_TYPE'} =~ m#^multipart/form-data#) { # for efficiency, compile multipart code only if needed $errflag = !(eval <<'END_MULTIPART'); local ($buf, $boundary, $head, @heads, $cd, $ct, $fname, $ctype, $blen); local ($bpos, $lpos, $left, $amt, $fn, $ser); local ($bufsize, $maxbound, $writefiles) = ($cgi_lib'bufsize, $cgi_lib'maxbound, $cgi_lib'writefiles); # The following lines exist solely to eliminate spurious warning messages $buf = ''; ($boundary) = $type =~ /boundary="([^"]+)"/; #"; # find boundary ($boundary) = $type =~ /boundary=(\S+)/ unless $boundary; &CgiDie ("Boundary not provided: probably a bug in your server") unless $boundary; $boundary = "--" . $boundary; $blen = length ($boundary); if ($ENV{'REQUEST_METHOD'} ne 'POST') { &CgiDie("Invalid request method for multipart/form-data: $meth\n"); } if ($writefiles) { local($me); stat ($writefiles); $writefiles = "/tmp" unless -d _ && -w _; # ($me) = $0 =~ m#([^/]*)$#; $writefiles .= "/$cgi_lib'filepre"; } # read in the data and split into parts: # put headers in @in and data in %in # General algorithm: # There are two dividers: the border and the '\r\n\r\n' between # header and body. Iterate between searching for these # Retain a buffer of size(bufsize+maxbound); the latter part is # to ensure that dividers don't get lost by wrapping between two bufs # Look for a divider in the current batch. If not found, then # save all of bufsize, move the maxbound extra buffer to the front of # the buffer, and read in a new bufsize bytes. If a divider is found, # save everything up to the divider. Then empty the buffer of everything # up to the end of the divider. Refill buffer to bufsize+maxbound # Note slightly odd organization. Code before BODY: really goes with # code following HEAD:, but is put first to 'pre-fill' buffers. BODY: # is placed before HEAD: because we first need to discard any 'preface,' # which would be analagous to a body without a preceeding head. $left = $len; PART: # find each part of the multi-part while reading data while (1) { die $@ if $errflag; $amt = ($left > $bufsize+$maxbound-length($buf) ? $bufsize+$maxbound-length($buf): $left); $errflag = (($got = read(STDIN, $buf, $amt, length($buf))) != $amt); die "Short Read: wanted $amt, got $got\n" if $errflag; $left -= $amt; $in{$name} .= "\0" if defined $in{$name}; $in{$name} .= $fn if $fn; $name=~/([-\w]+)/; # This allows $insfn{$name} to be untainted if (defined $1) { $insfn{$1} .= "\0" if defined $insfn{$1}; $insfn{$1} .= $fn if $fn; } BODY: while (($bpos = index($buf, $boundary)) == -1) { if ($left == 0 && $buf eq '') { foreach $value (values %insfn) { unlink(split("\0",$value)); } &CgiDie("cgi-lib.pl: reached end of input while seeking boundary " . "of multipart. Format of CGI input is wrong.\n"); } die $@ if $errflag; if ($name) { # if no $name, then it's the prologue -- discard if ($fn) { print FILE substr($buf, 0, $bufsize); } else { $in{$name} .= substr($buf, 0, $bufsize); } } $buf = substr($buf, $bufsize); $amt = ($left > $bufsize ? $bufsize : $left); #$maxbound==length($buf); $errflag = (($got = read(STDIN, $buf, $amt, length($buf))) != $amt); die "Short Read: wanted $amt, got $got\n" if $errflag; $left -= $amt; } if (defined $name) { # if no $name, then it's the prologue -- discard if ($fn) { print FILE substr($buf, 0, $bpos-2); } else { $in {$name} .= substr($buf, 0, $bpos-2); } # kill last \r\n } close (FILE); last PART if substr($buf, $bpos + $blen, 2) eq "--"; substr($buf, 0, $bpos+$blen+2) = ''; $amt = ($left > $bufsize+$maxbound-length($buf) ? $bufsize+$maxbound-length($buf) : $left); $errflag = (($got = read(STDIN, $buf, $amt, length($buf))) != $amt); die "Short Read: wanted $amt, got $got\n" if $errflag; $left -= $amt; undef $head; undef $fn; HEAD: while (($lpos = index($buf, "\r\n\r\n")) == -1) { if ($left == 0 && $buf eq '') { foreach $value (values %insfn) { unlink(split("\0",$value)); } &CgiDie("cgi-lib: reached end of input while seeking end of " . "headers. Format of CGI input is wrong.\n$buf"); } die $@ if $errflag; $head .= substr($buf, 0, $bufsize); $buf = substr($buf, $bufsize); $amt = ($left > $bufsize ? $bufsize : $left); #$maxbound==length($buf); $errflag = (($got = read(STDIN, $buf, $amt, length($buf))) != $amt); die "Short Read: wanted $amt, got $got\n" if $errflag; $left -= $amt; } $head .= substr($buf, 0, $lpos+2); push (@in, $head); @heads = split("\r\n", $head); ($cd) = grep (/^\s*Content-Disposition:/i, @heads); ($ct) = grep (/^\s*Content-Type:/i, @heads); ($name) = $cd =~ /\bname="([^"]+)"/i; #"; ($name) = $cd =~ /\bname=([^\s:;]+)/i unless defined $name; ($fname) = $cd =~ /\bfilename="([^"]*)"/i; #"; # filename can be null-str ($fname) = $cd =~ /\bfilename=([^\s:;]+)/i unless defined $fname; $incfn{$name} .= (defined $in{$name} ? "\0" : "") . (defined $fname ? $fname : ""); ($ctype) = $ct =~ /^\s*Content-type:\s*"([^"]+)"/i; #"; ($ctype) = $ct =~ /^\s*Content-Type:\s*([^\s:;]+)/i unless defined $ctype; $inct{$name} .= (defined $in{$name} ? "\0" : "") . $ctype; if ($writefiles && defined $fname) { $ser++; $fn = $writefiles . ".$$.$ser"; open (FILE, ">$fn") || &CgiDie("Couldn't open $fn\n"); binmode (FILE); # write files accurately } substr($buf, 0, $lpos+4) = ''; undef $fname; undef $ctype; } 1; END_MULTIPART if ($errflag) { local ($errmsg, $value); $errmsg = $@ || $errflag; foreach $value (values %insfn) { unlink(split("\0",$value)); } &CgiDie($errmsg); } else { # everything's ok. } } else { &CgiDie("cgi-lib.pl: Unknown Content-type: $ENV{'CONTENT_TYPE'}\n"); } # no-ops to avoid warnings $insfn = $insfn; $incfn = $incfn; $inct = $inct; $^W = $perlwarn; return ($errflag ? undef : scalar(@in)); } # PrintHeader # Returns the magic line which tells WWW that we're an HTML document sub PrintHeader { return "Content-type: text/html\n\n"; } # HtmlTop # Returns the of a document and the beginning of the body # with the title and a body

header as specified by the parameter sub HtmlTop { local ($title) = @_; return < $title

$title

END_OF_TEXT } # HtmlBot # Returns the , codes for the bottom of every HTML page sub HtmlBot { return "\n\n"; } # SplitParam # Splits a multi-valued parameter into a list of the constituent parameters sub SplitParam { local ($param) = @_; local (@params) = split ("\0", $param); return (wantarray ? @params : $params[0]); } # MethGet # Return true if this cgi call was using the GET request, false otherwise sub MethGet { return (defined $ENV{'REQUEST_METHOD'} && $ENV{'REQUEST_METHOD'} eq "GET"); } # MethPost # Return true if this cgi call was using the POST request, false otherwise sub MethPost { return (defined $ENV{'REQUEST_METHOD'} && $ENV{'REQUEST_METHOD'} eq "POST"); } # MyBaseUrl # Returns the base URL to the script (i.e., no extra path or query string) sub MyBaseUrl { local ($ret, $perlwarn); $perlwarn = $^W; $^W = 0; $ret = 'http://' . $ENV{'SERVER_NAME'} . ($ENV{'SERVER_PORT'} != 80 ? ":$ENV{'SERVER_PORT'}" : '') . $ENV{'SCRIPT_NAME'}; $^W = $perlwarn; return $ret; } # MyFullUrl # Returns the full URL to the script (i.e., with extra path or query string) sub MyFullUrl { local ($ret, $perlwarn); $perlwarn = $^W; $^W = 0; $ret = 'http://' . $ENV{'SERVER_NAME'} . ($ENV{'SERVER_PORT'} != 80 ? ":$ENV{'SERVER_PORT'}" : '') . $ENV{'SCRIPT_NAME'} . $ENV{'PATH_INFO'} . (length ($ENV{'QUERY_STRING'}) ? "?$ENV{'QUERY_STRING'}" : ''); $^W = $perlwarn; return $ret; } # MyURL # Returns the base URL to the script (i.e., no extra path or query string) # This is obsolete and will be removed in later versions sub MyURL { return &MyBaseUrl; } # CgiError # Prints out an error message which which containes appropriate headers, # markup, etcetera. # Parameters: # If no parameters, gives a generic error message # Otherwise, the first parameter will be the title and the rest will # be given as different paragraphs of the body sub CgiError { local (@msg) = @_; local ($i,$name); if (!@msg) { $name = &MyFullUrl; @msg = ("Error: script $name encountered fatal error\n"); }; if (!$cgi_lib'headerout) { #') print &PrintHeader; print "\n\n$msg[0]\n\n\n"; } print "

$msg[0]

\n"; foreach $i (1 .. $#msg) { print "

$msg[$i]

\n"; } $cgi_lib'headerout++; } # CgiDie # Identical to CgiError, but also quits with the passed error message. sub CgiDie { local (@msg) = @_; &CgiError (@msg); die @msg; } # PrintVariables # Nicely formats variables. Three calling options: # A non-null associative array - prints the items in that array # A type-glob - prints the items in the associated assoc array # nothing - defaults to use %in # Typical use: &PrintVariables() sub PrintVariables { local (*in) = @_ if @_ == 1; local (%in) = @_ if @_ > 1; local ($out, $key, $output); $output = "\n
\n"; foreach $key (sort keys(%in)) { foreach (split("\0", $in{$key})) { ($out = $_) =~ s/\n/
\n/g; $output .= "
$key\n
:$out:
\n"; } } $output .= "
\n"; return $output; } # PrintEnv # Nicely formats all environment variables and returns HTML string sub PrintEnv { &PrintVariables(*ENV); } # The following lines exist only to avoid warning messages $cgi_lib'writefiles = $cgi_lib'writefiles; $cgi_lib'bufsize = $cgi_lib'bufsize ; $cgi_lib'maxbound = $cgi_lib'maxbound; $cgi_lib'version = $cgi_lib'version; $cgi_lib'filepre = $cgi_lib'filepre; 1; #return true opensrs-client-3.0.0/lib/Locale/0000755017777601777760000000000010770014215017502 5ustar nobodynogroup00000000000000opensrs-client-3.0.0/lib/Locale/Constants.pm0000644017777601777760000000324310770014202022012 0ustar nobodynogroup00000000000000package Locale::Constants; # # Locale::Constants - defined constants for identifying codesets # # use strict; require Exporter; use vars qw($VERSION @ISA @EXPORT); @ISA = qw(Exporter); @EXPORT = qw(LOCALE_CODE_ALPHA_2 LOCALE_CODE_ALPHA_3 LOCALE_CODE_NUMERIC LOCALE_CODE_DEFAULT); use constant LOCALE_CODE_ALPHA_2 => 1; use constant LOCALE_CODE_ALPHA_3 => 2; use constant LOCALE_CODE_NUMERIC => 3; use constant LOCALE_CODE_DEFAULT => LOCALE_CODE_ALPHA_2; 1; __END__ =head1 NAME Locale::Constants - constants for Locale codes =head1 SYNOPSIS use Locale::Constants; $codeset = LOCALE_CODE_ALPHA_2; =head1 DESCRIPTION B defines symbols which are used in the three modules from the Locale-Codes distribution: Locale::Language Locale::Country Locale::Currency B at the moment only Locale::Country supports more than one code set. The symbols defined are used to specify which codes you want to be used: LOCALE_CODE_ALPHA_2 LOCALE_CODE_ALPHA_3 LOCALE_CODE_NUMERIC You shouldn't have to C this module directly yourself - it is used by the three Locale modules, which in turn export the symbols. =head1 KNOWN BUGS AND LIMITATIONS None at the moment. =head1 SEE ALSO =over 4 =item Locale::Language Codes for identification of languages. =item Locale::Country Codes for identification of countries. =item Locale::Currency Codes for identification of currencies and funds. =back =head1 AUTHOR Neil Bowers Eneilb@cre.canon.co.ukE =head1 COPYRIGHT Copyright (C) 2001, Canon Research Centre Europe (CRE). This module is free software; you can redistribute it and/or modify it under the same terms as Perl itself. =cut opensrs-client-3.0.0/lib/Locale/Country.pm0000644017777601777760000004232110770014202021501 0ustar nobodynogroup00000000000000#----------------------------------------------------------------------- =head1 NAME Locale::Country - ISO codes for country identification (ISO 3166) =head1 SYNOPSIS use Locale::Country; $country = code2country('jp'); # $country gets 'Japan' $code = country2code('Norway'); # $code gets 'no' @codes = all_country_codes(); @names = all_country_names(); # add "uk" as a pseudo country code for United Kingdom Locale::Country::_alias_code('uk' => 'gb'); =cut #----------------------------------------------------------------------- package Locale::Country; use strict; require 5.002; #----------------------------------------------------------------------- =head1 DESCRIPTION The C module provides access to the ISO codes for identifying countries, as defined in ISO 3166. You can either access the codes via the L (described below), or with the two functions which return lists of all country codes or all country names. There are three different code sets you can use for identifying countries: =over 4 =item B Two letter codes, such as 'tv' for Tuvalu. This code set is identified with the symbol C. =item B Three letter codes, such as 'brb' for Barbados. This code set is identified with the symbol C. =item B Numeric codes, such as 064 for Bhutan. This code set is identified with the symbol C. =back All of the routines take an optional additional argument which specifies the code set to use. If not specified, it defaults to the two-letter codes. This is partly for backwards compatibility (previous versions of this module only supported the alpha-2 codes), and partly because they are the most widely used codes. The alpha-2 and alpha-3 codes are not case-dependent, so you can use 'BO', 'Bo', 'bO' or 'bo' for Bolivia. When a code is returned by one of the functions in this module, it will always be lower-case. =cut #----------------------------------------------------------------------- require Exporter; use Carp; use Locale::Constants; #----------------------------------------------------------------------- # Public Global Variables #----------------------------------------------------------------------- use vars qw($VERSION @ISA @EXPORT @EXPORT_OK); $VERSION = sprintf("%d.%02d", q$Revision: 1.4 $ =~ /(\d+)\.(\d+)/); @ISA = qw(Exporter); @EXPORT = qw(code2country country2code all_country_codes all_country_names country_code2code LOCALE_CODE_ALPHA_2 LOCALE_CODE_ALPHA_3 LOCALE_CODE_NUMERIC); #----------------------------------------------------------------------- # Private Global Variables #----------------------------------------------------------------------- my $CODES = []; my $COUNTRIES = []; #======================================================================= =head1 CONVERSION ROUTINES There are three conversion routines: C, C, and C. =over 8 =item code2country( CODE, [ CODESET ] ) This function takes a country code and returns a string which contains the name of the country identified. If the code is not a valid country code, as defined by ISO 3166, then C will be returned: $country = code2country('fi'); =item country2code( STRING, [ CODESET ] ) This function takes a country name and returns the corresponding country code, if such exists. If the argument could not be identified as a country name, then C will be returned: $code = country2code('Norway', LOCALE_CODE_ALPHA_3); # $code will now be 'nor' The case of the country name is not important. See the section L below. =item country_code2code( CODE, CODESET, CODESET ) This function takes a country code from one code set, and returns the corresponding code from another code set. $alpha2 = country_code2code('fin', LOCALE_CODE_ALPHA_3 => LOCALE_CODE_ALPHA_2); # $alpha2 will now be 'fi' If the code passed is not a valid country code in the first code set, or if there isn't a code for the corresponding country in the second code set, then C will be returned. =back =cut #======================================================================= sub code2country { my $code = shift; my $codeset = @_ > 0 ? shift : LOCALE_CODE_DEFAULT; return undef unless defined $code; #------------------------------------------------------------------- # Make sure the code is in the right form before we use it # to look up the corresponding country. # We have to sprintf because the codes are given as 3-digits, # with leading 0's. Eg 052 for Barbados. #------------------------------------------------------------------- if ($codeset == LOCALE_CODE_NUMERIC) { return undef if ($code =~ /\D/); $code = sprintf("%.3d", $code); } else { $code = lc($code); } if (exists $CODES->[$codeset]->{$code}) { return $CODES->[$codeset]->{$code}; } else { #--------------------------------------------------------------- # no such country code! #--------------------------------------------------------------- return undef; } } sub country2code { my $country = shift; my $codeset = @_ > 0 ? shift : LOCALE_CODE_DEFAULT; return undef unless defined $country; $country = lc($country); if (exists $COUNTRIES->[$codeset]->{$country}) { return $COUNTRIES->[$codeset]->{$country}; } else { #--------------------------------------------------------------- # no such country! #--------------------------------------------------------------- return undef; } } sub country_code2code { (@_ == 3) or croak "country_code2code() takes 3 arguments!"; my $code = shift; my $inset = shift; my $outset = shift; my $outcode = shift; my $country; return undef if $inset == $outset; $country = code2country($code, $inset); return undef if not defined $country; $outcode = country2code($country, $outset); return $outcode; } #======================================================================= =head1 QUERY ROUTINES There are two function which can be used to obtain a list of all codes, or all country names: =over 8 =item C Returns a list of all two-letter country codes. The codes are guaranteed to be all lower-case, and not in any particular order. =item C Returns a list of all country names for which there is a corresponding country code in the specified code set. The names are capitalised, and not returned in any particular order. Not all countries have alpha-3 and numeric codes - some just have an alpha-2 code, so you'll get a different number of countries depending on which code set you specify. =back =cut #======================================================================= sub all_country_codes { my $codeset = @_ > 0 ? shift : LOCALE_CODE_DEFAULT; return keys %{ $CODES->[$codeset] }; } sub all_country_names { my $codeset = @_ > 0 ? shift : LOCALE_CODE_DEFAULT; return values %{ $CODES->[$codeset] }; } #----------------------------------------------------------------------- =head1 CODE ALIASING This module supports a semi-private routine for specifying two letter code aliases. Locale::Country::_alias_code( ALIAS => CODE [, CODESET ] ) This feature was added as a mechanism for handling a "uk" code. The ISO standard says that the two-letter code for "United Kingdom" is "gb", whereas domain names are all .uk. By default the module does not understand "uk", since it is implementing an ISO standard. If you would like 'uk' to work as the two-letter code for United Kingdom, use the following: use Locale::Country; Locale::Country::_alias_code('uk' => 'gb'); With this code, both "uk" and "gb" are valid codes for United Kingdom, with the reverse lookup returning "uk" rather than the usual "gb". =cut #----------------------------------------------------------------------- sub _alias_code { my $alias = shift; my $real = shift; my $codeset = @_ > 0 ? shift : LOCALE_CODE_DEFAULT; my $country; if (not exists $CODES->[$codeset]->{$real}) { carp "attempt to alias \"$alias\" to unknown country code \"$real\"\n"; return undef; } $country = $CODES->[$codeset]->{$real}; $CODES->[$codeset]->{$alias} = $country; $COUNTRIES->[$codeset]->{"\L$country"} = $alias; return $alias; } #----------------------------------------------------------------------- =head1 EXAMPLES The following example illustrates use of the C function. The user is prompted for a country code, and then told the corresponding country name: $| = 1; # turn off buffering print "Enter country code: "; chop($code = ); $country = code2country($code, LOCALE_CODE_ALPHA_2); if (defined $country) { print "$code = $country\n"; } else { print "'$code' is not a valid country code!\n"; } =head1 DOMAIN NAMES Most top-level domain names are based on these codes, but there are certain codes which aren't. If you are using this module to identify country from hostname, your best bet is to preprocess the country code. For example, B, B, B and friends would map to B; B would map to B. Any others? =head1 KNOWN BUGS AND LIMITATIONS =over 4 =item * When using C, the country name must currently appear exactly as it does in the source of the module. For example, country2code('United States') will return B, as expected. But the following will all return C: country2code('United States of America') country2code('Great Britain') country2code('U.S.A.') If there's need for it, a future version could have variants for country names. =item * In the current implementation, all data is read in when the module is loaded, and then held in memory. A lazy implementation would be more memory friendly. =back =head1 SEE ALSO =over 4 =item Locale::Language ISO two letter codes for identification of language (ISO 639). =item Locale::Currency ISO three letter codes for identification of currencies and funds (ISO 4217). =item ISO 3166 The ISO standard which defines these codes. =item http://www.din.de/gremien/nas/nabd/iso3166ma/ Official home page for ISO 3166 =item http://www.egt.ie/standards/iso3166/iso3166-1-en.html Another useful, but not official, home page. =item http://www.cia.gov/cia/publications/factbook/docs/app-f.html An appendix in the CIA world fact book which lists country codes as defined by ISO 3166, FIPS 10-4, and internet domain names. =back =head1 AUTHOR Neil Bowers Eneilb@cre.canon.co.ukE =head1 COPYRIGHT Copyright (c) 1997-2001 Canon Research Centre Europe (CRE). This module is free software; you can redistribute it and/or modify it under the same terms as Perl itself. =cut #----------------------------------------------------------------------- #======================================================================= # initialisation code - stuff the DATA into the ALPHA2 hash #======================================================================= { my ($alpha2, $alpha3, $numeric); my $country; while () { next unless /\S/; chop; ($alpha2, $alpha3, $numeric, $country) = split(/:/, $_, 4); $CODES->[LOCALE_CODE_ALPHA_2]->{$alpha2} = $country; $COUNTRIES->[LOCALE_CODE_ALPHA_2]->{"\L$country"} = $alpha2; if ($alpha3) { $CODES->[LOCALE_CODE_ALPHA_3]->{$alpha3} = $country; $COUNTRIES->[LOCALE_CODE_ALPHA_3]->{"\L$country"} = $alpha3; } if ($numeric) { $CODES->[LOCALE_CODE_NUMERIC]->{$numeric} = $country; $COUNTRIES->[LOCALE_CODE_NUMERIC]->{"\L$country"} = $numeric; } } } 1; __DATA__ ad:and:020:Andorra ae:are:784:United Arab Emirates af:afg:004:Afghanistan ag:atg:028:Antigua and Barbuda ai:aia:660:Anguilla al:alb:008:Albania am:arm:051:Armenia an:ant:530:Netherlands Antilles ao:ago:024:Angola aq:::Antarctica ar:arg:032:Argentina as:asm:016:American Samoa at:aut:040:Austria au:aus:036:Australia aw:abw:533:Aruba az:aze:031:Azerbaijan ba:bih:070:Bosnia and Herzegovina bb:brb:052:Barbados bd:bgd:050:Bangladesh be:bel:056:Belgium bf:bfa:854:Burkina Faso bg:bgr:100:Bulgaria bh:bhr:048:Bahrain bi:bdi:108:Burundi bj:ben:204:Benin bm:bmu:060:Bermuda bn:brn:096:Brunei Darussalam bo:bol:068:Bolivia br:bra:076:Brazil bs:bhs:044:Bahamas bt:btn:064:Bhutan bv:::Bouvet Island bw:bwa:072:Botswana by:blr:112:Belarus bz:blz:084:Belize ca:can:124:Canada cc:::Cocos (Keeling) Islands cd:cod:180:Congo, The Democratic Republic of the cf:caf:140:Central African Republic cg:cog:178:Congo ch:che:756:Switzerland ci:civ:384:Cote D'Ivoire ck:cok:184:Cook Islands cl:chl:152:Chile cm:cmr:120:Cameroon cn:chn:156:China co:col:170:Colombia cr:cri:188:Costa Rica cu:cub:192:Cuba cv:cpv:132:Cape Verde cx:::Christmas Island cy:cyp:196:Cyprus cz:cze:203:Czech Republic de:deu:276:Germany dj:dji:262:Djibouti dk:dnk:208:Denmark dm:dma:212:Dominica do:dom:214:Dominican Republic dz:dza:012:Algeria ec:ecu:218:Ecuador ee:est:233:Estonia eg:egy:818:Egypt eh:esh:732:Western Sahara er:eri:232:Eritrea es:esp:724:Spain et:eth:231:Ethiopia fi:fin:246:Finland fj:fji:242:Fiji fk:flk:238:Falkland Islands (Malvinas) fm:fsm:583:Micronesia, Federated States of fo:fro:234:Faroe Islands fr:fra:250:France fx:::France, Metropolitan ga:gab:266:Gabon gb:gbr:826:United Kingdom gd:grd:308:Grenada ge:geo:268:Georgia gf:guf:254:French Guiana gh:gha:288:Ghana gi:gib:292:Gibraltar gl:grl:304:Greenland gm:gmb:270:Gambia gn:gin:324:Guinea gp:glp:312:Guadeloupe gq:gnq:226:Equatorial Guinea gr:grc:300:Greece gs:::South Georgia and the South Sandwich Islands gt:gtm:320:Guatemala gu:gum:316:Guam gw:gnb:624:Guinea-Bissau gy:guy:328:Guyana hk:hkg:344:Hong Kong hm:::Heard Island and McDonald Islands hn:hnd:340:Honduras hr:hrv:191:Croatia ht:hti:332:Haiti hu:hun:348:Hungary id:idn:360:Indonesia ie:irl:372:Ireland il:isr:376:Israel in:ind:356:India io:::British Indian Ocean Territory iq:irq:368:Iraq ir:irn:364:Iran, Islamic Republic of is:isl:352:Iceland it:ita:380:Italy jm:jam:388:Jamaica jo:jor:400:Jordan jp:jpn:392:Japan ke:ken:404:Kenya kg:kgz:417:Kyrgyzstan kh:khm:116:Cambodia ki:kir:296:Kiribati km:com:174:Comoros kn:kna:659:Saint Kitts and Nevis kp:prk:408:Korea, Democratic People's Republic of kr:kor:410:Korea, Republic of kw:kwt:414:Kuwait ky:cym:136:Cayman Islands kz:kaz:398:Kazakstan la:lao:418:Lao People's Democratic Republic lb:lbn:422:Lebanon lc:lca:662:Saint Lucia li:lie:438:Liechtenstein lk:lka:144:Sri Lanka lr:lbr:430:Liberia ls:lso:426:Lesotho lt:ltu:440:Lithuania lu:lux:442:Luxembourg lv:lva:428:Latvia ly:lby:434:Libyan Arab Jamahiriya ma:mar:504:Morocco mc:mco:492:Monaco md:mda:498:Moldova, Republic of mg:mdg:450:Madagascar mh:mhl:584:Marshall Islands mk:mkd:807:Macedonia, the Former Yugoslav Republic of ml:mli:466:Mali mm:mmr:104:Myanmar mn:mng:496:Mongolia mo:mac:446:Macau mp:mnp:580:Northern Mariana Islands mq:mtq:474:Martinique mr:mrt:478:Mauritania ms:msr:500:Montserrat mt:mlt:470:Malta mu:mus:480:Mauritius mv:mdv:462:Maldives mw:mwi:454:Malawi mx:mex:484:Mexico my:mys:458:Malaysia mz:moz:508:Mozambique na:nam:516:Namibia nc:ncl:540:New Caledonia ne:ner:562:Niger nf:nfk:574:Norfolk Island ng:nga:566:Nigeria ni:nic:558:Nicaragua nl:nld:528:Netherlands no:nor:578:Norway np:npl:524:Nepal nr:nru:520:Nauru nu:niu:570:Niue nz:nzl:554:New Zealand om:omn:512:Oman pa:pan:591:Panama pe:per:604:Peru pf:pyf:258:French Polynesia pg:png:598:Papua New Guinea ph:phl:608:Philippines pk:pak:586:Pakistan pl:pol:616:Poland pm:spm:666:Saint Pierre and Miquelon pn:pcn:612:Pitcairn pr:pri:630:Puerto Rico ps:pse:275:Palestinian Territory, Occupied pt:prt:620:Portugal pw:plw:585:Palau py:pry:600:Paraguay qa:qat:634:Qatar re:reu:638:Reunion ro:rom:642:Romania ru:rus:643:Russian Federation rw:rwa:646:Rwanda sa:sau:682:Saudi Arabia sb:slb:090:Solomon Islands sc:syc:690:Seychelles sd:sdn:736:Sudan se:swe:752:Sweden sg:sgp:702:Singapore sh:shn:654:Saint Helena si:svn:705:Slovenia sj:sjm:744:Svalbard and Jan Mayen sk:svk:703:Slovakia sl:sle:694:Sierra Leone sm:smr:674:San Marino sn:sen:686:Senegal so:som:706:Somalia sr:sur:740:Suriname st:stp:678:Sao Tome and Principe sv:slv:222:El Salvador sy:syr:760:Syrian Arab Republic sz:swz:748:Swaziland tc:tca:796:Turks and Caicos Islands td:tcd:148:Chad tf:::French Southern Territories tg:tgo:768:Togo th:tha:764:Thailand tj:tjk:762:Tajikistan tk:tkl:772:Tokelau tm:tkm:795:Turkmenistan tn:tun:788:Tunisia to:ton:776:Tonga tp:tmp:626:East Timor tr:tur:792:Turkey tt:tto:780:Trinidad and Tobago tv:tuv:798:Tuvalu tw:twn:158:Taiwan tz:tza:834:Tanzania, United Republic of ua:ukr:804:Ukraine ug:uga:800:Uganda um:::United States Minor Outlying Islands us:usa:840:United States uy:ury:858:Uruguay uz:uzb:860:Uzbekistan va:vat:336:Holy See (Vatican City State) vc:vct:670:Saint Vincent and the Grenadines ve:ven:862:Venezuela vg:vgb:092:Virgin Islands, British vi:vir:850:Virgin Islands, U.S. vn:vnm:704:Vietnam vu:vut:548:Vanuatu wf:wlf:876:Wallis and Futuna ws:wsm:882:Samoa ye:yem:887:Yemen yt:::Mayotte yu:yug:891:Yugoslavia za:zaf:710:South Africa zm:zmb:894:Zambia zr:::Zaire zw:zwe:716:Zimbabwe opensrs-client-3.0.0/lib/Locale/Currency.pm0000644017777601777760000002462610770014202021640 0ustar nobodynogroup00000000000000#----------------------------------------------------------------------- =head1 NAME Locale::Currency - ISO three letter codes for currency identification (ISO 4217) =head1 SYNOPSIS use Locale::Currency; $curr = code2currency('usd'); # $curr gets 'US Dollar' $code = currency2code('Euro'); # $code gets 'eur' @codes = all_currency_codes(); @names = all_currency_names(); =cut #----------------------------------------------------------------------- package Locale::Currency; use strict; require 5.002; #----------------------------------------------------------------------- =head1 DESCRIPTION The C module provides access to the ISO three-letter codes for identifying currencies and funds, as defined in ISO 4217. You can either access the codes via the L (described below), or with the two functions which return lists of all currency codes or all currency names. There are two special codes defined by the standard which aren't understood by this module: =over 4 =item XTS Specifically reserved for testing purposes. =item XXX For transactions where no currency is involved. =back =cut #----------------------------------------------------------------------- require Exporter; #----------------------------------------------------------------------- # Public Global Variables #----------------------------------------------------------------------- use vars qw($VERSION @ISA @EXPORT); $VERSION = sprintf("%d.%02d", q$Revision: 1.3 $ =~ /(\d+)\.(\d+)/); @ISA = qw(Exporter); @EXPORT = qw(&code2currency ¤cy2code &all_currency_codes &all_currency_names ); #----------------------------------------------------------------------- # Private Global Variables #----------------------------------------------------------------------- my %CODES = (); my %CURRENCIES = (); #======================================================================= =head1 CONVERSION ROUTINES There are two conversion routines: C and C. =over 8 =item code2currency() This function takes a three letter currency code and returns a string which contains the name of the currency identified. If the code is not a valid currency code, as defined by ISO 4217, then C will be returned. $curr = code2currency($code); =item currency2code() This function takes a currency name and returns the corresponding three letter currency code, if such exists. If the argument could not be identified as a currency name, then C will be returned. $code = currency2code('French Franc'); The case of the currency name is not important. See the section L below. =back =cut #======================================================================= sub code2currency { my $code = shift; return undef unless defined $code; $code = lc($code); if (exists $CODES{$code}) { return $CODES{$code}; } else { #--------------------------------------------------------------- # no such currency code! #--------------------------------------------------------------- return undef; } } sub currency2code { my $curr = shift; return undef unless defined $curr; $curr = lc($curr); if (exists $CURRENCIES{$curr}) { return $CURRENCIES{$curr}; } else { #--------------------------------------------------------------- # no such currency! #--------------------------------------------------------------- return undef; } } #======================================================================= =head1 QUERY ROUTINES There are two function which can be used to obtain a list of all currency codes, or all currency names: =over 8 =item C Returns a list of all three-letter currency codes. The codes are guaranteed to be all lower-case, and not in any particular order. =item C Returns a list of all currency names for which there is a corresponding three-letter currency code. The names are capitalised, and not returned in any particular order. =back =cut #======================================================================= sub all_currency_codes { return keys %CODES; } sub all_currency_names { return values %CODES; } #----------------------------------------------------------------------- =head1 EXAMPLES The following example illustrates use of the C function. The user is prompted for a currency code, and then told the corresponding currency name: $| = 1; # turn off buffering print "Enter currency code: "; chop($code = ); $curr = code2currency($code); if (defined $curr) { print "$code = $curr\n"; } else { print "'$code' is not a valid currency code!\n"; } =head1 KNOWN BUGS AND LIMITATIONS =over 4 =item * In the current implementation, all data is read in when the module is loaded, and then held in memory. A lazy implementation would be more memory friendly. =item * This module also includes the special codes which are not for a currency, such as Gold, Platinum, etc. This might cause a problem if you're using this module to display a list of currencies. Let Neil know if this does cause a problem, and we can do something about it. =item * ISO 4217 also defines a numeric code for each currency. Currency codes are not currently supported by this module. =item * There are three cases where there is more than one code for the same currency name. Kwacha has two codes: mwk for Malawi, and zmk for Zambia. The Russian Ruble has two codes: rub and rur. The Belarussian Ruble has two codes: byr and byb. The currency2code() function only returns one code, so you might not get back the code you expected. =back =head1 SEE ALSO =over 4 =item Locale::Country ISO codes for identification of country (ISO 3166). Supports alpha-2, alpha-3, and numeric codes. The currency codes use the alpha-2 codeset. =item ISO 4217:1995 Code for the representation of currencies and funds. =item http://www.bsi-global.com/iso4217currency Official web page for the ISO 4217 maintenance agency. This has the latest list of codes, in MS Word format. Boo. =back =head1 AUTHOR Michael Hennecke Ehennecke@rz.uni-karlsruhe.deE and Neil Bowers Eneilb@cre.canon.co.ukE =head1 COPYRIGHT Copyright (c) 2001 Michael Hennecke and Canon Research Centre Europe (CRE). This module is free software; you can redistribute it and/or modify it under the same terms as Perl itself. =cut #----------------------------------------------------------------------- #======================================================================= # initialisation code - stuff the DATA into the CODES hash #======================================================================= { my $code; my $currency; while () { next unless /\S/; chop; ($code, $currency) = split(/:/, $_, 2); $CODES{$code} = $currency; $CURRENCIES{"\L$currency"} = $code; } } 1; __DATA__ adp:Andorran Peseta aed:UAE Dirham afa:Afghani all:Lek amd:Armenian Dram ang:Netherlands Antillean Guilder aoa:Kwanza aon:New Kwanza aor:Kwanza Reajustado ars:Argentine Peso ats:Schilling aud:Australian Dollar awg:Aruban Guilder azm:Azerbaijanian Manat bam:Convertible Marks bbd:Barbados Dollar bdt:Taka bef:Belgian Franc bgl:Lev bgn:Bulgarian Lev bhd:Bahraini Dinar bhd:Dinar bif:Burundi Franc bmd:Bermudian Dollar bnd:Brunei Dollar bob:Boliviano bov:MVDol brl:Brazilian Real bsd:Bahamian Dollar btn:Ngultrum bwp:Pula byb:Belarussian Ruble byr:Belarussian Ruble bzd:Belize Dollar cad:Candian Dollar cdf:Franc Congolais chf:Swiss Franc clf:Unidades de Formento clp:Chilean Peso cny:Yuan Renminbi cop:Colombian Peso crc:Costa Rican Colon cup:Cuban Peso cve:Cape Verde Escudo cyp:Cyprus Pound czk:Czech Koruna dem:German Mark djf:Djibouti Franc dkk:Danish Krone dop:Dominican Peso dzd:Algerian Dinar ecs:Sucre ecv:Unidad de Valor Constante (UVC) eek:Kroon egp:Egyptian Pound ern:Nakfa esp:Spanish Peseta etb:Ethiopian Birr eur:Euro fim:Markka fjd:Fiji Dollar fkp:Falkland Islands Pound frf:French Franc gbp:Pound Sterling gel:Lari ghc:Cedi gip:Gibraltar Pound gmd:Dalasi gnf:Guinea Franc grd:Drachma gtq:Quetzal gwp:Guinea-Bissau Peso gyd:Guyana Dollar hkd:Hong Kong Dollar hnl:Lempira hrk:Kuna htg:Gourde huf:Forint idr:Rupiah iep:Irish Pound ils:Shekel inr:Indian Rupee iqd:Iraqi Dinar irr:Iranian Rial isk:Iceland Krona itl:Italian Lira jmd:Jamaican Dollar jod:Jordanian Dinar jpy:Yen kes:Kenyan Shilling kgs:Som khr:Riel kmf:Comoro Franc kpw:North Korean Won krw:Won kwd:Kuwaiti Dinar kyd:Cayman Islands Dollar kzt:Tenge lak:Kip lbp:Lebanese Pound lkr:Sri Lanka Rupee lrd:Liberian Dollar lsl:Loti ltl:Lithuanian Litas luf:Luxembourg Franc lvl:Latvian Lats lyd:Libyan Dinar mad:Moroccan Dirham mdl:Moldovan Leu mgf:Malagasy Franc mkd:Denar mmk:Kyat mnt:Tugrik mop:Pataca mro:Ouguiya mtl:Maltese Lira mur:Mauritius Rupee mvr:Rufiyaa mwk:Kwacha mxn:Mexican Nuevo Peso myr:Malaysian Ringgit mzm:Metical nad:Namibia Dollar ngn:Naira nio:Cordoba Oro nlg:Netherlands Guilder nok:Norwegian Krone npr:Nepalese Rupee nzd:New Zealand Dollar omr:Rial Omani pab:Balboa pen:Nuevo Sol pgk:Kina php:Philippine Peso pkr:Pakistan Rupee pln:Zloty pte:Portuguese Escudo pyg:Guarani qar:Qatari Rial rol:Leu rub:Russian Ruble rur:Russian Ruble rwf:Rwanda Franc sar:Saudi Riyal sbd:Solomon Islands Dollar scr:Seychelles Rupee sdd:Sudanese Dinar sek:Swedish Krona sgd:Singapore Dollar shp:St. Helena Pound sit:Tolar skk:Slovak Koruna sll:Leone sos:Somali Shilling srg:Surinam Guilder std:Dobra svc:El Salvador Colon syp:Syrian Pound szl:Lilangeni thb:Baht tjr:Tajik Ruble tmm:Manat tnd:Tunisian Dollar top:Pa'anga tpe:Timor Escudo trl:Turkish Lira ttd:Trinidad and Tobago Dollar twd:New Taiwan Dollar tzs:Tanzanian Shilling uah:Hryvnia uak:Karbovanets ugx:Uganda Shilling usd:US Dollar usn:US Dollar (Next day) uss:US Dollar (Same day) uyu:Peso Uruguayo uzs:Uzbekistan Sum veb:Bolivar vnd:Dong vuv:Vatu wst:Tala xaf:CFA Franc BEAC xag:Silver xau:Gold xba:European Composite Unit xbb:European Monetary Unit xbc:European Unit of Account 9 xb5:European Unit of Account 17 xcd:East Caribbean Dollar xdr:SDR xeu:ECU (until 1998-12-31) xfu:UIC-Franc xfo:Gold-Franc xof:CFA Franc BCEAO xpd:Palladium xpf:CFP Franc xpt:Platinum yer:Yemeni Rial yum:New Dinar zal:Financial Rand zar:Rand zmk:Kwacha zrn:New Zaire zwd:Zimbabwe Dollar opensrs-client-3.0.0/lib/Locale/Language.pm0000644017777601777760000001777310770014202021576 0ustar nobodynogroup00000000000000#----------------------------------------------------------------------- =head1 NAME Locale::Language - ISO two letter codes for language identification (ISO 639) =head1 SYNOPSIS use Locale::Language; $lang = code2language('en'); # $lang gets 'English' $code = language2code('French'); # $code gets 'fr' @codes = all_language_codes(); @names = all_language_names(); =cut #----------------------------------------------------------------------- package Locale::Language; use strict; require 5.002; #----------------------------------------------------------------------- =head1 DESCRIPTION The C module provides access to the ISO two-letter codes for identifying languages, as defined in ISO 639. You can either access the codes via the L (described below), or with the two functions which return lists of all language codes or all language names. =cut #----------------------------------------------------------------------- require Exporter; #----------------------------------------------------------------------- # Public Global Variables #----------------------------------------------------------------------- use vars qw($VERSION @ISA @EXPORT); $VERSION = sprintf("%d.%02d", q$Revision: 1.3 $ =~ /(\d+)\.(\d+)/); @ISA = qw(Exporter); @EXPORT = qw(&code2language &language2code &all_language_codes &all_language_names ); #----------------------------------------------------------------------- # Private Global Variables #----------------------------------------------------------------------- my %CODES = (); my %LANGUAGES = (); #======================================================================= =head1 CONVERSION ROUTINES There are two conversion routines: C and C. =over 8 =item code2language() This function takes a two letter language code and returns a string which contains the name of the language identified. If the code is not a valid language code, as defined by ISO 639, then C will be returned. $lang = code2language($code); =item language2code() This function takes a language name and returns the corresponding two letter language code, if such exists. If the argument could not be identified as a language name, then C will be returned. $code = language2code('French'); The case of the language name is not important. See the section L below. =back =cut #======================================================================= sub code2language { my $code = shift; return undef unless defined $code; $code = lc($code); if (exists $CODES{$code}) { return $CODES{$code}; } else { #--------------------------------------------------------------- # no such language code! #--------------------------------------------------------------- return undef; } } sub language2code { my $lang = shift; return undef unless defined $lang; $lang = lc($lang); if (exists $LANGUAGES{$lang}) { return $LANGUAGES{$lang}; } else { #--------------------------------------------------------------- # no such language! #--------------------------------------------------------------- return undef; } } #======================================================================= =head1 QUERY ROUTINES There are two function which can be used to obtain a list of all language codes, or all language names: =over 8 =item C Returns a list of all two-letter language codes. The codes are guaranteed to be all lower-case, and not in any particular order. =item C Returns a list of all language names for which there is a corresponding two-letter language code. The names are capitalised, and not returned in any particular order. =back =cut #======================================================================= sub all_language_codes { return keys %CODES; } sub all_language_names { return values %CODES; } #----------------------------------------------------------------------- =head1 EXAMPLES The following example illustrates use of the C function. The user is prompted for a language code, and then told the corresponding language name: $| = 1; # turn off buffering print "Enter language code: "; chop($code = ); $lang = code2language($code); if (defined $lang) { print "$code = $lang\n"; } else { print "'$code' is not a valid language code!\n"; } =head1 KNOWN BUGS AND LIMITATIONS =over 4 =item * In the current implementation, all data is read in when the module is loaded, and then held in memory. A lazy implementation would be more memory friendly. =item * Currently just supports the two letter language codes - there are also three-letter codes, and numbers. Would these be of any use to anyone? =back =head1 SEE ALSO =over 4 =item Locale::Country ISO codes for identification of country (ISO 3166). Supports 2-letter, 3-letter, and numeric country codes. =item Locale::Currency ISO three letter codes for identification of currencies and funds (ISO 4217). =item ISO 639:1988 (E/F) Code for the representation of names of languages. =item http://lcweb.loc.gov/standards/iso639-2/langhome.html Home page for ISO 639-2 =back =head1 AUTHOR Neil Bowers Eneilb@cre.canon.co.ukE =head1 COPYRIGHT Copyright (c) 1997-2001 Canon Research Centre Europe (CRE). This module is free software; you can redistribute it and/or modify it under the same terms as Perl itself. =cut #----------------------------------------------------------------------- #======================================================================= # initialisation code - stuff the DATA into the CODES hash #======================================================================= { my $code; my $language; while () { next unless /\S/; chop; ($code, $language) = split(/:/, $_, 2); $CODES{$code} = $language; $LANGUAGES{"\L$language"} = $code; } } 1; __DATA__ aa:Afar ab:Abkhazian ae:Avestan af:Afrikaans am:Amharic ar:Arabic as:Assamese ay:Aymara az:Azerbaijani ba:Bashkir be:Belarusian bg:Bulgarian bh:Bihari bi:Bislama bn:Bengali bo:Tibetan br:Breton bs:Bosnian ca:Catalan ce:Chechen ch:Chamorro co:Corsican cs:Czech cu:Church Slavic cv:Chuvash cy:Welsh da:Danish de:German dz:Dzongkha el:Greek en:English eo:Esperanto es:Spanish et:Estonian eu:Basque fa:Persian fi:Finnish fj:Fijian fo:Faeroese fr:French fy:Frisian ga:Irish gd:Gaelic (Scots) gl:Gallegan gn:Guarani gu:Gujarati gv:Manx ha:Hausa he:Hebrew hi:Hindi ho:Hiri Motu hr:Croatian hu:Hungarian hy:Armenian hz:Herero ia:Interlingua id:Indonesian ie:Interlingue ik:Inupiaq is:Icelandic it:Italian iu:Inuktitut ja:Japanese jw:Javanese ka:Georgian ki:Kikuyu kj:Kuanyama kk:Kazakh kl:Kalaallisut km:Khmer kn:Kannada ko:Korean ks:Kashmiri ku:Kurdish kv:Komi kw:Cornish ky:Kirghiz la:Latin lb:Letzeburgesch ln:Lingala lo:Lao lt:Lithuanian lv:Latvian mg:Malagasy mh:Marshall mi:Maori mk:Macedonian ml:Malayalam mn:Mongolian mo:Moldavian mr:Marathi ms:Malay mt:Maltese my:Burmese na:Nauru nb:Norwegian Bokmål nd:Ndebele, North ne:Nepali ng:Ndonga nl:Dutch nn:Norwegian Nynorsk no:Norwegian nr:Ndebele, South nv:Navajo ny:Chichewa; Nyanja oc:Occitan (post 1500) om:Oromo or:Oriya os:Ossetian; Ossetic pa:Panjabi pi:Pali pl:Polish ps:Pushto pt:Portuguese qu:Quechua rm:Rhaeto-Romance rn:Rundi ro:Romanian ru:Russian rw:Kinyarwanda sa:Sanskrit sc:Sardinian sd:Sindhi se:Sami sg:Sango si:Sinhalese sk:Slovak sl:Slovenian sm:Samoan sn:Shona so:Somali sq:Albanian sr:Serbian ss:Swati st:Sotho su:Sundanese sv:Swedish sw:Swahili ta:Tamil te:Telugu tg:Tajik th:Thai ti:Tigrinya tk:Turkmen tl:Tagalog tn:Tswana to:Tonga tr:Turkish ts:Tsonga tt:Tatar tw:Twi ug:Uighur uk:Ukrainian ur:Urdu uz:Uzbek vi:Vietnamese vo:Volapük wo:Wolof xh:Xhosa yi:Yiddish yo:Yoruba za:Zhuang zh:Chinese zu:Zulu opensrs-client-3.0.0/lib/OpenSRS/0000755017777601777760000000000010770014215017574 5ustar nobodynogroup00000000000000opensrs-client-3.0.0/lib/OpenSRS/CBC_Connector.pm0000644017777601777760000002657410770014202022545 0ustar nobodynogroup00000000000000#!/usr/bin/perl # # $Id: CBC_Connector.pm,v 1.8 2006/03/27 18:53:18 epirogov Exp $ # .Copyright (C) 2002 TUCOWS.com Inc. # .Created: 2002/09/03 # .Contactid: # .Url: http://www.opensrs.org # # This library is free software; you can redistribute it and/or # modify it under the terms of the GNU Lesser General Public # License as published by the Free Software Foundation; either # version 2.1 of the License, or (at your option) any later version. # # 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 # Lesser General Public License for more details. # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA # OpenSRS CBC connection library ####################################################### # **NOTE** This library should not be modified ##### # Instead, please modify the supplied cgi scripts ##### ####################################################### package OpenSRS::CBC_Connector; BEGIN { if ($] >= 5.008) { eval "use Crypt::CBC"; } else { eval "use CBC"; } } use strict; use IO::Socket; use Digest::MD5 qw(md5); use Data::Dumper; use OPS; use vars qw($AUTOLOAD); # start random generator for Crypt::CBC srand( time() ^ ($$ + ($$ << 15)) ); sub new { my $that = shift; my $class = ref($that) || $that; my %args = @_; my $self = { _authenticated => 0, # has the user logged in yet? _fh => undef, _cipher => undef, _log_fh => undef, _OPS => new OPS(), %args, # These would be the hash keys/values # from the config and the extra parameters # for initialization of this package }; if ( exists $args{ xml_logfile } and $args{ xml_logfile } ) { require Symbol; my $fh = Symbol::gensym(); open $fh, ">>$args{ xml_logfile }" or die "Can't open XML logfile, $args{ xml_logfile } for append: $!"; select $fh; $| = 1; select STDOUT; $self->{ _log_fh } = $fh; } bless $self, $class; return $self; } # ------------------------------------------------------------------------ # Clean up before we're destroyed. undef a few variables to help mod_perl # along. sub DESTROY { my $self = shift; close $self->_log_fh if $self->_log_fh; } # ------------------------------------------------------------------------ sub AUTOLOAD { my $self = shift; my $type = ref($self) || die "$self is not an object"; my $name = $AUTOLOAD; my $value; $name =~ s/.*://; # strip packages if (@_) { $value = shift; $self->{$name} = $value; } return $self->{$name}; } sub login { my $self = shift; my %args = @_; foreach my $key (keys %args) { $self->{$key} = $args{$key}; } my $crypt_type = $self->{crypt_type}; eval { require "Crypt/$crypt_type.pm"; }; if ($@) { print "Content-type: text/html\n\n"; die "Couldn't load Crypt::$crypt_type: $@"; } } sub logout { my $self = shift; #only send the quit command if the socket is open (i.e. defined) if ( $self->{_fh}) { $self->send_data( { action => "quit", object => "session", } ); } $self->close_socket(); } sub init_socket { my $self = shift; return 1 if ($self->{_fh}); # create a socket my $fh = IO::Socket::INET->new( Proto => "tcp", PeerAddr => $self->{REMOTE_HOST}, PeerPort => $self->{REMOTE_PORT}, ); return 0 if not defined $fh; select($fh); $| = 1; select(STDOUT); $self->{_fh} = $fh; return 1; } sub close_socket { my $self = shift; close($self->{_fh}) if $self->{_fh}; $self->{_cipher} = undef; $self->{_authenticated} = 0; $self->{_fh} = undef; } sub authenticate { my $self = shift; my ($answer,$prompt); my ($challenge, $session_key); my ($username,$private_key) = @_; if ($self->{_authenticated} == 1) { return (is_success => 1) } my $fh = $self->{_fh}; if (not $username) { return (error => "Missing reseller username"); } elsif (not $private_key) { return (error => "Missing private key"); } $prompt = $self->read_data(); if (exists $prompt->{response_code} and $prompt->{response_code} == 555 ) { # the ip address from which we are connecting is not accepted return ( error => $prompt->{response_text} ); } elsif ( $prompt->{attributes}->{sender} !~ /OpenSRS\sSERVER/ || $prompt->{attributes}->{version} !~ /^(XML|TPP)/ ) { return ( error => Dumper(\$prompt)."\nUnrecognized Peer" ); } # first response is server version $self->send_data({ action => "check", object => "version", attributes => { sender => "OpenSRS CLIENT", version => $self->{version}, state => "ready", } }); my $crypt = lc $self->{crypt_type}; if ($crypt eq 'blowfish_pp') { $crypt = 'blowfish' } $self->send_data({ action => "authenticate", object => "user", attributes => { crypt_type => $crypt, username => $username, } } ); # Encrypt the challenge bytes with our password to generate # the session key. # Respond to the challenge with the MD5 checksum of the challenge. # note the use of the no_xml => 1 set, because challenges are # are sent without XML (XML::Parser doesn't like decoding # binary data) $challenge = $self->read_data( no_xml => 1 ); if ($challenge =~ /is_success/g ) { my $buf = $self->{_OPS}->decode( $challenge ); return (error => $buf->{response_text}); } my $cipher; if ($Crypt::CBC::VERSION >= 2.17){ $cipher = new Crypt::CBC( -key => pack('H*', $private_key), -cipher => $self->{crypt_type}, -header => 'randomiv', ); } else { $cipher = new Crypt::CBC(pack('H*', $private_key), $self->{crypt_type}); } $self->{_cipher} = $cipher; $self->send_data(md5( $challenge ), no_xml => 1); # Read the server's response to our login attempt. # This is in XML $answer = $self->read_data(); if ($answer->{response_code} =~ /^2/) { $self->{_authenticated} = 1; return (is_success => 1); } else { if ($answer->{response_text} eq "No response from server") { #if private_key is invalid, then server closes connection #without sending any response $answer->{response_text}="Invalid private key"; } return (error => $answer->{response_text}); } } sub read_data { my $self = shift; my %args = @_; if ( not defined $self->{_OPS} ) { $self->{_OPS} = new OPS(); } # Read the length of this input. my $buf = $self->{_OPS}->read_data( $self->{_fh} ); $buf = ($self->{_cipher}) ? $self->{_cipher}->decrypt($buf) : $buf; # if I have a bad public key, that server doesn't response to, so it # will be empty buf or if connection died then buf is empty if (not $buf) { return { is_success => 0, response_text => "No response from server", response_code => 351, }; } if ( not $args{no_xml} ) { if ( $self->_log_fh ) { my $logfh = $self->_log_fh; print $logfh scalar( localtime() ) . " PID $$ from OpenSRS:\n$buf\n\n"; } $buf = $self->{_OPS}->decode( $buf ); } return $buf; } # Sends request to the server. # XXX Need error checking? sub send_data { my $self = shift; my $message = shift; # hash ref or binary data (for challenge) my %args = @_; # other flags if ( not defined $self->{_OPS} ) { $self->{_OPS} = new OPS(); } my $data_to_send; if ( not $args{no_xml}) { if (not $message->{protocol}) { $message->{protocol} = $self->{protocol_name}; } if ($message->{protocol} eq 'TPP' && not $message->{version}) { $message->{version} = $self->{protocol_version}; } $data_to_send = $self->{_OPS}->encode( $message ); # have to lowercase the action and object keys # because OPS.pm uppercases them $message->{action} = lc $message->{action}; $message->{object} = lc $message->{object}; if ( $message->{protocol} eq 'TPP') { $message->{requestor} = { username => $self->{username}, password => $self->{password}, group => 'reseller', # this is constant for the moment. # this might change in the future. }; } my $logfh = $self->_log_fh; print $logfh scalar( localtime() ) . " PID $$ to OpenSRS:\n$data_to_send\n\n" if $logfh; } else { # no XML encoding $data_to_send = $message; } $data_to_send = $self->{_cipher}->encrypt($data_to_send) if $self->{_cipher}; return $self->{_OPS}->write_data( $self->{_fh}, $data_to_send ); } sub encrypt_string { my $self = shift; my $plain_data = shift; my $cipher = new Crypt::CBC(pack('H*', $self->{private_key}), $self->{crypt_type}); my $crypted_data = $cipher->encrypt($plain_data); $crypted_data = unpack("H*",$crypted_data); return $crypted_data; } sub decrypt_string { my $self=shift; my $crypted_data = shift; $crypted_data = pack("H*",$crypted_data); my $cipher = new Crypt::CBC(pack('H*', $self->{private_key}), $self->{crypt_type}); my $plain_data = $cipher->decrypt($crypted_data); return $plain_data; } 1; opensrs-client-3.0.0/lib/OpenSRS/Constants.pm0000644017777601777760000000325710770014202022111 0ustar nobodynogroup00000000000000package OpenSRS::Constants; # # OpenSRS::Constants - defined constants for identifying codesets # # use strict; require Exporter; use vars qw($VERSION @ISA @EXPORT); @ISA = qw(Exporter); @EXPORT = qw(LOCALE_CODE_ALPHA_2 LOCALE_CODE_ALPHA_3 LOCALE_CODE_NUMERIC LOCALE_CODE_DEFAULT); use constant LOCALE_CODE_ALPHA_2 => 1; use constant LOCALE_CODE_ALPHA_3 => 2; use constant LOCALE_CODE_NUMERIC => 3; use constant LOCALE_CODE_DEFAULT => LOCALE_CODE_ALPHA_2; 1; __END__ =head1 NAME OpenSRS::Constants - constants for Locale codes =head1 SYNOPSIS use OpenSRS::Constants; $codeset = LOCALE_CODE_ALPHA_2; =head1 DESCRIPTION B defines symbols which are used in the three modules from the Locale-Codes distribution: OpenSRS::Language OpenSRS::Country OpenSRS::Currency B at the moment only OpenSRS::Country supports more than one code set. The symbols defined are used to specify which codes you want to be used: LOCALE_CODE_ALPHA_2 LOCALE_CODE_ALPHA_3 LOCALE_CODE_NUMERIC You shouldn't have to C this module directly yourself - it is used by the three Locale modules, which in turn export the symbols. =head1 KNOWN BUGS AND LIMITATIONS None at the moment. =head1 SEE ALSO =over 4 =item OpenSRS::Language Codes for identification of languages. =item OpenSRS::Country Codes for identification of countries. =item OpenSRS::Currency Codes for identification of currencies and funds. =back =head1 AUTHOR Neil Bowers Eneilb@cre.canon.co.ukE =head1 COPYRIGHT Copyright (C) 2001, Canon Research Centre Europe (CRE). This module is free software; you can redistribute it and/or modify it under the same terms as Perl itself. =cut opensrs-client-3.0.0/lib/OpenSRS/Country.pm0000644017777601777760000004233710770014202021602 0ustar nobodynogroup00000000000000#----------------------------------------------------------------------- =head1 NAME OpenSRS::Country - ISO codes for country identification (ISO 3166) =head1 SYNOPSIS use OpenSRS::Country; $country = code2country('jp'); # $country gets 'Japan' $code = country2code('Norway'); # $code gets 'no' @codes = all_country_codes(); @names = all_country_names(); # add "uk" as a pseudo country code for United Kingdom OpenSRS::Country::_alias_code('uk' => 'gb'); =cut #----------------------------------------------------------------------- package OpenSRS::Country; use strict; require 5.002; #----------------------------------------------------------------------- =head1 DESCRIPTION The C module provides access to the ISO codes for identifying countries, as defined in ISO 3166. You can either access the codes via the L (described below), or with the two functions which return lists of all country codes or all country names. There are three different code sets you can use for identifying countries: =over 4 =item B Two letter codes, such as 'tv' for Tuvalu. This code set is identified with the symbol C. =item B Three letter codes, such as 'brb' for Barbados. This code set is identified with the symbol C. =item B Numeric codes, such as 064 for Bhutan. This code set is identified with the symbol C. =back All of the routines take an optional additional argument which specifies the code set to use. If not specified, it defaults to the two-letter codes. This is partly for backwards compatibility (previous versions of this module only supported the alpha-2 codes), and partly because they are the most widely used codes. The alpha-2 and alpha-3 codes are not case-dependent, so you can use 'BO', 'Bo', 'bO' or 'bo' for Bolivia. When a code is returned by one of the functions in this module, it will always be lower-case. =cut #----------------------------------------------------------------------- require Exporter; use Carp; use OpenSRS::Constants; #----------------------------------------------------------------------- # Public Global Variables #----------------------------------------------------------------------- use vars qw($VERSION @ISA @EXPORT @EXPORT_OK); $VERSION = sprintf("%d.%02d", q$Revision: 1.6 $ =~ /(\d+)\.(\d+)/); @ISA = qw(Exporter); @EXPORT = qw(code2country country2code all_country_codes all_country_names country_code2code LOCALE_CODE_ALPHA_2 LOCALE_CODE_ALPHA_3 LOCALE_CODE_NUMERIC); #----------------------------------------------------------------------- # Private Global Variables #----------------------------------------------------------------------- my $CODES = []; my $COUNTRIES = []; #======================================================================= =head1 CONVERSION ROUTINES There are three conversion routines: C, C, and C. =over 8 =item code2country( CODE, [ CODESET ] ) This function takes a country code and returns a string which contains the name of the country identified. If the code is not a valid country code, as defined by ISO 3166, then C will be returned: $country = code2country('fi'); =item country2code( STRING, [ CODESET ] ) This function takes a country name and returns the corresponding country code, if such exists. If the argument could not be identified as a country name, then C will be returned: $code = country2code('Norway', LOCALE_CODE_ALPHA_3); # $code will now be 'nor' The case of the country name is not important. See the section L below. =item country_code2code( CODE, CODESET, CODESET ) This function takes a country code from one code set, and returns the corresponding code from another code set. $alpha2 = country_code2code('fin', LOCALE_CODE_ALPHA_3 => LOCALE_CODE_ALPHA_2); # $alpha2 will now be 'fi' If the code passed is not a valid country code in the first code set, or if there isn't a code for the corresponding country in the second code set, then C will be returned. =back =cut #======================================================================= sub code2country { my $code = shift; my $codeset = @_ > 0 ? shift : LOCALE_CODE_DEFAULT; return undef unless defined $code; #------------------------------------------------------------------- # Make sure the code is in the right form before we use it # to look up the corresponding country. # We have to sprintf because the codes are given as 3-digits, # with leading 0's. Eg 052 for Barbados. #------------------------------------------------------------------- if ($codeset == LOCALE_CODE_NUMERIC) { return undef if ($code =~ /\D/); $code = sprintf("%.3d", $code); } else { $code = lc($code); } if (exists $CODES->[$codeset]->{$code}) { return $CODES->[$codeset]->{$code}; } else { #--------------------------------------------------------------- # no such country code! #--------------------------------------------------------------- return undef; } } sub country2code { my $country = shift; my $codeset = @_ > 0 ? shift : LOCALE_CODE_DEFAULT; return undef unless defined $country; $country = lc($country); if (exists $COUNTRIES->[$codeset]->{$country}) { return $COUNTRIES->[$codeset]->{$country}; } else { #--------------------------------------------------------------- # no such country! #--------------------------------------------------------------- return undef; } } sub country_code2code { (@_ == 3) or croak "country_code2code() takes 3 arguments!"; my $code = shift; my $inset = shift; my $outset = shift; my $outcode = shift; my $country; return undef if $inset == $outset; $country = code2country($code, $inset); return undef if not defined $country; $outcode = country2code($country, $outset); return $outcode; } #======================================================================= =head1 QUERY ROUTINES There are two function which can be used to obtain a list of all codes, or all country names: =over 8 =item C Returns a list of all two-letter country codes. The codes are guaranteed to be all lower-case, and not in any particular order. =item C Returns a list of all country names for which there is a corresponding country code in the specified code set. The names are capitalised, and not returned in any particular order. Not all countries have alpha-3 and numeric codes - some just have an alpha-2 code, so you'll get a different number of countries depending on which code set you specify. =back =cut #======================================================================= sub all_country_codes { my $codeset = @_ > 0 ? shift : LOCALE_CODE_DEFAULT; return keys %{ $CODES->[$codeset] }; } sub all_country_names { my $codeset = @_ > 0 ? shift : LOCALE_CODE_DEFAULT; return values %{ $CODES->[$codeset] }; } #----------------------------------------------------------------------- =head1 CODE ALIASING This module supports a semi-private routine for specifying two letter code aliases. OpenSRS::Country::_alias_code( ALIAS => CODE [, CODESET ] ) This feature was added as a mechanism for handling a "uk" code. The ISO standard says that the two-letter code for "United Kingdom" is "gb", whereas domain names are all .uk. By default the module does not understand "uk", since it is implementing an ISO standard. If you would like 'uk' to work as the two-letter code for United Kingdom, use the following: use OpenSRS::Country; OpenSRS::Country::_alias_code('uk' => 'gb'); With this code, both "uk" and "gb" are valid codes for United Kingdom, with the reverse lookup returning "uk" rather than the usual "gb". =cut #----------------------------------------------------------------------- sub _alias_code { my $alias = shift; my $real = shift; my $codeset = @_ > 0 ? shift : LOCALE_CODE_DEFAULT; my $country; if (not exists $CODES->[$codeset]->{$real}) { carp "attempt to alias \"$alias\" to unknown country code \"$real\"\n"; return undef; } $country = $CODES->[$codeset]->{$real}; $CODES->[$codeset]->{$alias} = $country; $COUNTRIES->[$codeset]->{"\L$country"} = $alias; return $alias; } #----------------------------------------------------------------------- =head1 EXAMPLES The following example illustrates use of the C function. The user is prompted for a country code, and then told the corresponding country name: $| = 1; # turn off buffering print "Enter country code: "; chop($code = ); $country = code2country($code, LOCALE_CODE_ALPHA_2); if (defined $country) { print "$code = $country\n"; } else { print "'$code' is not a valid country code!\n"; } =head1 DOMAIN NAMES Most top-level domain names are based on these codes, but there are certain codes which aren't. If you are using this module to identify country from hostname, your best bet is to preprocess the country code. For example, B, B, B and friends would map to B; B would map to B. Any others? =head1 KNOWN BUGS AND LIMITATIONS =over 4 =item * When using C, the country name must currently appear exactly as it does in the source of the module. For example, country2code('United States') will return B, as expected. But the following will all return C: country2code('United States of America') country2code('Great Britain') country2code('U.S.A.') If there's need for it, a future version could have variants for country names. =item * In the current implementation, all data is read in when the module is loaded, and then held in memory. A lazy implementation would be more memory friendly. =back =head1 SEE ALSO =over 4 =item OpenSRS::Language ISO two letter codes for identification of language (ISO 639). =item OpenSRS::Currency ISO three letter codes for identification of currencies and funds (ISO 4217). =item ISO 3166 The ISO standard which defines these codes. =item http://www.din.de/gremien/nas/nabd/iso3166ma/ Official home page for ISO 3166 =item http://www.egt.ie/standards/iso3166/iso3166-1-en.html Another useful, but not official, home page. =item http://www.cia.gov/cia/publications/factbook/docs/app-f.html An appendix in the CIA world fact book which lists country codes as defined by ISO 3166, FIPS 10-4, and internet domain names. =back =head1 AUTHOR Neil Bowers Eneilb@cre.canon.co.ukE =head1 COPYRIGHT Copyright (c) 1997-2001 Canon Research Centre Europe (CRE). This module is free software; you can redistribute it and/or modify it under the same terms as Perl itself. =cut #----------------------------------------------------------------------- #======================================================================= # initialisation code - stuff the DATA into the ALPHA2 hash #======================================================================= { my ($alpha2, $alpha3, $numeric); my $country; while () { next unless /\S/; chop; ($alpha2, $alpha3, $numeric, $country) = split(/:/, $_, 4); $CODES->[LOCALE_CODE_ALPHA_2]->{$alpha2} = $country; $COUNTRIES->[LOCALE_CODE_ALPHA_2]->{"\L$country"} = $alpha2; if ($alpha3) { $CODES->[LOCALE_CODE_ALPHA_3]->{$alpha3} = $country; $COUNTRIES->[LOCALE_CODE_ALPHA_3]->{"\L$country"} = $alpha3; } if ($numeric) { $CODES->[LOCALE_CODE_NUMERIC]->{$numeric} = $country; $COUNTRIES->[LOCALE_CODE_NUMERIC]->{"\L$country"} = $numeric; } } } 1; __DATA__ ad:and:020:Andorra ae:are:784:United Arab Emirates af:afg:004:Afghanistan ag:atg:028:Antigua and Barbuda ai:aia:660:Anguilla al:alb:008:Albania am:arm:051:Armenia an:ant:530:Netherlands Antilles ao:ago:024:Angola aq:::Antarctica ar:arg:032:Argentina as:asm:016:American Samoa at:aut:040:Austria au:aus:036:Australia aw:abw:533:Aruba ax:::Aland Islands az:aze:031:Azerbaijan ba:bih:070:Bosnia and Herzegovina bb:brb:052:Barbados bd:bgd:050:Bangladesh be:bel:056:Belgium bf:bfa:854:Burkina Faso bg:bgr:100:Bulgaria bh:bhr:048:Bahrain bi:bdi:108:Burundi bj:ben:204:Benin bm:bmu:060:Bermuda bn:brn:096:Brunei Darussalam bo:bol:068:Bolivia br:bra:076:Brazil bs:bhs:044:Bahamas bt:btn:064:Bhutan bv:::Bouvet Island bw:bwa:072:Botswana by:blr:112:Belarus bz:blz:084:Belize ca:can:124:Canada cc:::Cocos (Keeling) Islands cd:cod:180:Congo, The Democratic Republic of the cf:caf:140:Central African Republic cg:cog:178:Congo ch:che:756:Switzerland ci:civ:384:Cote D'Ivoire ck:cok:184:Cook Islands cl:chl:152:Chile cm:cmr:120:Cameroon cn:chn:156:China co:col:170:Colombia cr:cri:188:Costa Rica cu:cub:192:Cuba cv:cpv:132:Cape Verde cx:::Christmas Island cy:cyp:196:Cyprus cz:cze:203:Czech Republic de:deu:276:Germany dj:dji:262:Djibouti dk:dnk:208:Denmark dm:dma:212:Dominica do:dom:214:Dominican Republic dz:dza:012:Algeria ec:ecu:218:Ecuador ee:est:233:Estonia eg:egy:818:Egypt eh:esh:732:Western Sahara er:eri:232:Eritrea es:esp:724:Spain et:eth:231:Ethiopia fi:fin:246:Finland fj:fji:242:Fiji fk:flk:238:Falkland Islands (Malvinas) fm:fsm:583:Micronesia, Federated States of fo:fro:234:Faroe Islands fr:fra:250:France fx:::France, Metropolitan ga:gab:266:Gabon gb:gbr:826:United Kingdom gd:grd:308:Grenada ge:geo:268:Georgia gf:guf:254:French Guiana gh:gha:288:Ghana gi:gib:292:Gibraltar gl:grl:304:Greenland gm:gmb:270:Gambia gn:gin:324:Guinea gp:glp:312:Guadeloupe gq:gnq:226:Equatorial Guinea gr:grc:300:Greece gs:::South Georgia and the South Sandwich Islands gt:gtm:320:Guatemala gu:gum:316:Guam gw:gnb:624:Guinea-Bissau gy:guy:328:Guyana hk:hkg:344:Hong Kong hm:::Heard Island and McDonald Islands hn:hnd:340:Honduras hr:hrv:191:Croatia ht:hti:332:Haiti hu:hun:348:Hungary id:idn:360:Indonesia ie:irl:372:Ireland il:isr:376:Israel in:ind:356:India im:imn:833:Isle of Man io:::British Indian Ocean Territory iq:irq:368:Iraq ir:irn:364:Iran, Islamic Republic of is:isl:352:Iceland it:ita:380:Italy jm:jam:388:Jamaica jo:jor:400:Jordan jp:jpn:392:Japan ke:ken:404:Kenya kg:kgz:417:Kyrgyzstan kh:khm:116:Cambodia ki:kir:296:Kiribati km:com:174:Comoros kn:kna:659:Saint Kitts and Nevis kp:prk:408:Korea, Democratic People's Republic of kr:kor:410:Korea, Republic of kw:kwt:414:Kuwait ky:cym:136:Cayman Islands kz:kaz:398:Kazakstan la:lao:418:Lao People's Democratic Republic lb:lbn:422:Lebanon lc:lca:662:Saint Lucia li:lie:438:Liechtenstein lk:lka:144:Sri Lanka lr:lbr:430:Liberia ls:lso:426:Lesotho lt:ltu:440:Lithuania lu:lux:442:Luxembourg lv:lva:428:Latvia ly:lby:434:Libyan Arab Jamahiriya ma:mar:504:Morocco mc:mco:492:Monaco md:mda:498:Moldova, Republic of mg:mdg:450:Madagascar mh:mhl:584:Marshall Islands ml:mli:466:Mali mm:mmr:104:Myanmar mn:mng:496:Mongolia mo:mac:446:Macau mp:mnp:580:Northern Mariana Islands mq:mtq:474:Martinique mr:mrt:478:Mauritania me:mne:499:Montenegro ms:msr:500:Montserrat mt:mlt:470:Malta mu:mus:480:Mauritius mv:mdv:462:Maldives mw:mwi:454:Malawi mx:mex:484:Mexico my:mys:458:Malaysia mz:moz:508:Mozambique na:nam:516:Namibia nc:ncl:540:New Caledonia ne:ner:562:Niger nf:nfk:574:Norfolk Island ng:nga:566:Nigeria ni:nic:558:Nicaragua nl:nld:528:Netherlands no:nor:578:Norway np:npl:524:Nepal nr:nru:520:Nauru nu:niu:570:Niue nz:nzl:554:New Zealand om:omn:512:Oman pa:pan:591:Panama pe:per:604:Peru pf:pyf:258:French Polynesia pg:png:598:Papua New Guinea ph:phl:608:Philippines pk:pak:586:Pakistan pl:pol:616:Poland pm:spm:666:Saint Pierre and Miquelon pn:pcn:612:Pitcairn pr:pri:630:Puerto Rico ps:pse:275:Palestinian Territory, Occupied pt:prt:620:Portugal pw:plw:585:Palau py:pry:600:Paraguay qa:qat:634:Qatar re:reu:638:Reunion ro:rom:642:Romania ru:rus:643:Russian Federation rw:rwa:646:Rwanda sa:sau:682:Saudi Arabia sb:slb:090:Solomon Islands sc:syc:690:Seychelles sd:sdn:736:Sudan se:swe:752:Sweden sg:sgp:702:Singapore sh:shn:654:Saint Helena si:svn:705:Slovenia sj:sjm:744:Svalbard and Jan Mayen sk:svk:703:Slovakia sl:sle:694:Sierra Leone sm:smr:674:San Marino sn:sen:686:Senegal rs:srb:688:Serbia so:som:706:Somalia sr:sur:740:Suriname st:stp:678:Sao Tome and Principe sv:slv:222:El Salvador sy:syr:760:Syrian Arab Republic sz:swz:748:Swaziland tc:tca:796:Turks and Caicos Islands td:tcd:148:Chad tf:::French Southern Territories tg:tgo:768:Togo th:tha:764:Thailand tj:tjk:762:Tajikistan tk:tkl:772:Tokelau tl:::Timor-Leste tm:tkm:795:Turkmenistan tn:tun:788:Tunisia to:ton:776:Tonga tp:tmp:626:East Timor tr:tur:792:Turkey tt:tto:780:Trinidad and Tobago tv:tuv:798:Tuvalu tw:twn:158:Taiwan tz:tza:834:Tanzania, United Republic of ua:ukr:804:Ukraine ug:uga:800:Uganda um:::United States Minor Outlying Islands us:usa:840:United States uy:ury:858:Uruguay uz:uzb:860:Uzbekistan va:vat:336:Holy See (Vatican City State) vc:vct:670:Saint Vincent and the Grenadines ve:ven:862:Venezuela vg:vgb:092:Virgin Islands, British vi:vir:850:Virgin Islands, U.S. vn:vnm:704:Vietnam vu:vut:548:Vanuatu wf:wlf:876:Wallis and Futuna ws:wsm:882:Samoa ye:yem:887:Yemen yt:::Mayotte za:zaf:710:South Africa zm:zmb:894:Zambia zr:::Zaire zw:zwe:716:Zimbabwe opensrs-client-3.0.0/lib/OpenSRS/Currency.pm0000644017777601777760000002462610770014202021732 0ustar nobodynogroup00000000000000#----------------------------------------------------------------------- =head1 NAME Locale::Currency - ISO three letter codes for currency identification (ISO 4217) =head1 SYNOPSIS use Locale::Currency; $curr = code2currency('usd'); # $curr gets 'US Dollar' $code = currency2code('Euro'); # $code gets 'eur' @codes = all_currency_codes(); @names = all_currency_names(); =cut #----------------------------------------------------------------------- package Locale::Currency; use strict; require 5.002; #----------------------------------------------------------------------- =head1 DESCRIPTION The C module provides access to the ISO three-letter codes for identifying currencies and funds, as defined in ISO 4217. You can either access the codes via the L (described below), or with the two functions which return lists of all currency codes or all currency names. There are two special codes defined by the standard which aren't understood by this module: =over 4 =item XTS Specifically reserved for testing purposes. =item XXX For transactions where no currency is involved. =back =cut #----------------------------------------------------------------------- require Exporter; #----------------------------------------------------------------------- # Public Global Variables #----------------------------------------------------------------------- use vars qw($VERSION @ISA @EXPORT); $VERSION = sprintf("%d.%02d", q$Revision: 1.2 $ =~ /(\d+)\.(\d+)/); @ISA = qw(Exporter); @EXPORT = qw(&code2currency ¤cy2code &all_currency_codes &all_currency_names ); #----------------------------------------------------------------------- # Private Global Variables #----------------------------------------------------------------------- my %CODES = (); my %CURRENCIES = (); #======================================================================= =head1 CONVERSION ROUTINES There are two conversion routines: C and C. =over 8 =item code2currency() This function takes a three letter currency code and returns a string which contains the name of the currency identified. If the code is not a valid currency code, as defined by ISO 4217, then C will be returned. $curr = code2currency($code); =item currency2code() This function takes a currency name and returns the corresponding three letter currency code, if such exists. If the argument could not be identified as a currency name, then C will be returned. $code = currency2code('French Franc'); The case of the currency name is not important. See the section L below. =back =cut #======================================================================= sub code2currency { my $code = shift; return undef unless defined $code; $code = lc($code); if (exists $CODES{$code}) { return $CODES{$code}; } else { #--------------------------------------------------------------- # no such currency code! #--------------------------------------------------------------- return undef; } } sub currency2code { my $curr = shift; return undef unless defined $curr; $curr = lc($curr); if (exists $CURRENCIES{$curr}) { return $CURRENCIES{$curr}; } else { #--------------------------------------------------------------- # no such currency! #--------------------------------------------------------------- return undef; } } #======================================================================= =head1 QUERY ROUTINES There are two function which can be used to obtain a list of all currency codes, or all currency names: =over 8 =item C Returns a list of all three-letter currency codes. The codes are guaranteed to be all lower-case, and not in any particular order. =item C Returns a list of all currency names for which there is a corresponding three-letter currency code. The names are capitalised, and not returned in any particular order. =back =cut #======================================================================= sub all_currency_codes { return keys %CODES; } sub all_currency_names { return values %CODES; } #----------------------------------------------------------------------- =head1 EXAMPLES The following example illustrates use of the C function. The user is prompted for a currency code, and then told the corresponding currency name: $| = 1; # turn off buffering print "Enter currency code: "; chop($code = ); $curr = code2currency($code); if (defined $curr) { print "$code = $curr\n"; } else { print "'$code' is not a valid currency code!\n"; } =head1 KNOWN BUGS AND LIMITATIONS =over 4 =item * In the current implementation, all data is read in when the module is loaded, and then held in memory. A lazy implementation would be more memory friendly. =item * This module also includes the special codes which are not for a currency, such as Gold, Platinum, etc. This might cause a problem if you're using this module to display a list of currencies. Let Neil know if this does cause a problem, and we can do something about it. =item * ISO 4217 also defines a numeric code for each currency. Currency codes are not currently supported by this module. =item * There are three cases where there is more than one code for the same currency name. Kwacha has two codes: mwk for Malawi, and zmk for Zambia. The Russian Ruble has two codes: rub and rur. The Belarussian Ruble has two codes: byr and byb. The currency2code() function only returns one code, so you might not get back the code you expected. =back =head1 SEE ALSO =over 4 =item Locale::Country ISO codes for identification of country (ISO 3166). Supports alpha-2, alpha-3, and numeric codes. The currency codes use the alpha-2 codeset. =item ISO 4217:1995 Code for the representation of currencies and funds. =item http://www.bsi-global.com/iso4217currency Official web page for the ISO 4217 maintenance agency. This has the latest list of codes, in MS Word format. Boo. =back =head1 AUTHOR Michael Hennecke Ehennecke@rz.uni-karlsruhe.deE and Neil Bowers Eneilb@cre.canon.co.ukE =head1 COPYRIGHT Copyright (c) 2001 Michael Hennecke and Canon Research Centre Europe (CRE). This module is free software; you can redistribute it and/or modify it under the same terms as Perl itself. =cut #----------------------------------------------------------------------- #======================================================================= # initialisation code - stuff the DATA into the CODES hash #======================================================================= { my $code; my $currency; while () { next unless /\S/; chop; ($code, $currency) = split(/:/, $_, 2); $CODES{$code} = $currency; $CURRENCIES{"\L$currency"} = $code; } } 1; __DATA__ adp:Andorran Peseta aed:UAE Dirham afa:Afghani all:Lek amd:Armenian Dram ang:Netherlands Antillean Guilder aoa:Kwanza aon:New Kwanza aor:Kwanza Reajustado ars:Argentine Peso ats:Schilling aud:Australian Dollar awg:Aruban Guilder azm:Azerbaijanian Manat bam:Convertible Marks bbd:Barbados Dollar bdt:Taka bef:Belgian Franc bgl:Lev bgn:Bulgarian Lev bhd:Bahraini Dinar bhd:Dinar bif:Burundi Franc bmd:Bermudian Dollar bnd:Brunei Dollar bob:Boliviano bov:MVDol brl:Brazilian Real bsd:Bahamian Dollar btn:Ngultrum bwp:Pula byb:Belarussian Ruble byr:Belarussian Ruble bzd:Belize Dollar cad:Candian Dollar cdf:Franc Congolais chf:Swiss Franc clf:Unidades de Formento clp:Chilean Peso cny:Yuan Renminbi cop:Colombian Peso crc:Costa Rican Colon cup:Cuban Peso cve:Cape Verde Escudo cyp:Cyprus Pound czk:Czech Koruna dem:German Mark djf:Djibouti Franc dkk:Danish Krone dop:Dominican Peso dzd:Algerian Dinar ecs:Sucre ecv:Unidad de Valor Constante (UVC) eek:Kroon egp:Egyptian Pound ern:Nakfa esp:Spanish Peseta etb:Ethiopian Birr eur:Euro fim:Markka fjd:Fiji Dollar fkp:Falkland Islands Pound frf:French Franc gbp:Pound Sterling gel:Lari ghc:Cedi gip:Gibraltar Pound gmd:Dalasi gnf:Guinea Franc grd:Drachma gtq:Quetzal gwp:Guinea-Bissau Peso gyd:Guyana Dollar hkd:Hong Kong Dollar hnl:Lempira hrk:Kuna htg:Gourde huf:Forint idr:Rupiah iep:Irish Pound ils:Shekel inr:Indian Rupee iqd:Iraqi Dinar irr:Iranian Rial isk:Iceland Krona itl:Italian Lira jmd:Jamaican Dollar jod:Jordanian Dinar jpy:Yen kes:Kenyan Shilling kgs:Som khr:Riel kmf:Comoro Franc kpw:North Korean Won krw:Won kwd:Kuwaiti Dinar kyd:Cayman Islands Dollar kzt:Tenge lak:Kip lbp:Lebanese Pound lkr:Sri Lanka Rupee lrd:Liberian Dollar lsl:Loti ltl:Lithuanian Litas luf:Luxembourg Franc lvl:Latvian Lats lyd:Libyan Dinar mad:Moroccan Dirham mdl:Moldovan Leu mgf:Malagasy Franc mkd:Denar mmk:Kyat mnt:Tugrik mop:Pataca mro:Ouguiya mtl:Maltese Lira mur:Mauritius Rupee mvr:Rufiyaa mwk:Kwacha mxn:Mexican Nuevo Peso myr:Malaysian Ringgit mzm:Metical nad:Namibia Dollar ngn:Naira nio:Cordoba Oro nlg:Netherlands Guilder nok:Norwegian Krone npr:Nepalese Rupee nzd:New Zealand Dollar omr:Rial Omani pab:Balboa pen:Nuevo Sol pgk:Kina php:Philippine Peso pkr:Pakistan Rupee pln:Zloty pte:Portuguese Escudo pyg:Guarani qar:Qatari Rial rol:Leu rub:Russian Ruble rur:Russian Ruble rwf:Rwanda Franc sar:Saudi Riyal sbd:Solomon Islands Dollar scr:Seychelles Rupee sdd:Sudanese Dinar sek:Swedish Krona sgd:Singapore Dollar shp:St. Helena Pound sit:Tolar skk:Slovak Koruna sll:Leone sos:Somali Shilling srg:Surinam Guilder std:Dobra svc:El Salvador Colon syp:Syrian Pound szl:Lilangeni thb:Baht tjr:Tajik Ruble tmm:Manat tnd:Tunisian Dollar top:Pa'anga tpe:Timor Escudo trl:Turkish Lira ttd:Trinidad and Tobago Dollar twd:New Taiwan Dollar tzs:Tanzanian Shilling uah:Hryvnia uak:Karbovanets ugx:Uganda Shilling usd:US Dollar usn:US Dollar (Next day) uss:US Dollar (Same day) uyu:Peso Uruguayo uzs:Uzbekistan Sum veb:Bolivar vnd:Dong vuv:Vatu wst:Tala xaf:CFA Franc BEAC xag:Silver xau:Gold xba:European Composite Unit xbb:European Monetary Unit xbc:European Unit of Account 9 xb5:European Unit of Account 17 xcd:East Caribbean Dollar xdr:SDR xeu:ECU (until 1998-12-31) xfu:UIC-Franc xfo:Gold-Franc xof:CFA Franc BCEAO xpd:Palladium xpf:CFP Franc xpt:Platinum yer:Yemeni Rial yum:New Dinar zal:Financial Rand zar:Rand zmk:Kwacha zrn:New Zaire zwd:Zimbabwe Dollar opensrs-client-3.0.0/lib/OpenSRS/EmailDefense.pm0000644017777601777760000003372410770014202022460 0ustar nobodynogroup00000000000000#!/usr/bin/perl package OpenSRS::EmailDefense; use strict; use OpenSRS::EmailDefense_errors; use OpenSRS::Util::Common qw(domain_syntax username_syntax password_syntax hostname_syntax ip_syntax build_select_menu get_cc_fields verify_cc_info); #use OpenSRS::Util::Common qw(default); use Data::Dumper; use OpenSRS::TPP_Request; use vars qw(@ISA); @ISA = qw(OpenSRS::TPP_Request); # First check domain for availability. # If it is available, return success. # If it is taken, check that sub check_domain { my $self = shift; my $domain_name = shift; return $self->error_exit(ERROR_M001) if not $domain_name; my $result = $self->check_domain_syntax($domain_name); return $result if not $result->{is_success}; # check domain availability. $result = $self->tpp_check_emaildefense_domain($domain_name); return $self->error_exit($result->{response_text}) if not $result->{is_success}; # if domain is available, return response. if ($result->{attributes}{product_data}{is_available}) { return { is_success => 1, available => 1, }; # if domain is taken, retrieve info of it's accounts. } else { $result = $self->tpp_get_domain_info($domain_name); if ($result->{is_success} and $result->{attributes}{result_control}{record_count}) { return $result; } } return $self->error_exit(ERROR_M110); } sub recover_password { my $self = shift; my $username = shift; return $self->error_exit(ERROR_M002) if not $username; my $result = $self->tpp_recover_password($username); if ($result->{is_success}) { return { is_success => 1 }; } elsif ($result->{response_code} eq '3002' ) { return $self->error_exit(ERROR_M170); } return $self->error_exit(ERROR_M100); } # Login user, authenticating with usrname and password # and cheking that the user logged in is the same as the one # managing domain. sub login_domain_user { my $self = shift; my $username = shift; my $password = shift; my $user_id = shift; my $result = $self->login_user($username,$password); if ( $result->{is_success} ) { if ( $result->{attributes}{user_id} == $user_id ) { return $result; } else { return $self->error_exit(ERROR_M004); } } else { return $result; } } # Login user, authenticating with usrname and password. sub login_user { my $self = shift; my $username = shift; my $password = shift; return $self->error_exit(ERROR_M002) if not $username; return $self->error_exit(ERROR_M003) if not $password; my $result = $self->tpp_login_user($username, $password); if ( $result->{is_success} ) { return $result; } else { if ($result->{response_code} eq '4108' ) { return $self->error_exit(ERROR_M200); } return $self->error_exit(ERROR_M100); } } sub create_user { my $self = shift; my $username = shift; my $password = shift; my $confirm_password = shift; return $self->error_exit(ERROR_M005) if not $confirm_password; return $self->error_exit(ERROR_M140) if $confirm_password ne $password; my $res = username_syntax($username); return $self->error_exit($res) if $res; $res = password_syntax($password); return $self->error_exit($res) if $res; my $result = $self->tpp_create_user($username, $password); if ($result->{is_success}) { return $result; } elsif ($result->{response_code} eq '4103' ) { return $self->error_exit(ERROR_M150); } return $self->error_exit(ERROR_M100); } sub check_username_syntax { my $self = shift; my $username = shift; return $self->error_exit(ERROR_M002) if not $username; my $res = username_syntax($username); return $self->error_exit($res) if $res; return { is_success => 1 }; } sub check_password_syntax { my $self = shift; my $password = shift; return $self->error_exit(ERROR_M003) if not $password; my $res = password_syntax($password); return $self->error_exit($res) if $res; return { is_success => 1 }; } #validate domain name sub check_domain_syntax { my $self = shift; my $domain = shift; return $self->error_exit(ERROR_M001) if not $domain; my $res = domain_syntax($domain); return $self->error_exit($res) if $res; return { is_success => 1 }; } sub check_hostname_syntax { my $self = shift; my $hostname = shift; return hostname_syntax($hostname); } sub check_port_syntax { my $self = shift; my $port = shift; return ($port =~ /^\d+$/); } sub check_preference_syntax { my $self = shift; my $preference = shift; return ($preference =~ /^\d+$/); } # Return all contacts of the quering user. sub get_contacts_by_user_id { my $self = shift; my $user_id = shift; return $self->tpp_get_contacts_by_user_id($user_id); } sub check_edef_user_password { my $self = shift; my $passwd_assgnmt = shift; my $password = shift; my $confirm_password = shift; return $self->error_exit(ERROR_M140) if $password ne $confirm_password; # Password is mandatory only if account is to be added now, # not via quarantine report. if ( $passwd_assgnmt eq 'now' ) { return $self->error_exit(ERROR_M003) if not $password; return $self->error_exit(ERROR_M006) if length $password < 6; } return { is_success => 1 }; } # Return all domains that belong to the user and have antispam service. sub get_antispam_domains_by_user { my ($self, $data) = @_; my $result = $self->tpp_get_antispam_domains_by_user($data); return $result if $result->{is_success}; return $self->error_exit(ERROR_M170) if $result->{response_code} eq '4108'; return $self->error_exit(ERROR_M100); } # Return general info on the domain. sub get_domain_info { my $self = shift; my $domain = shift; return $self->tpp_get_domain_info($domain); } # Return all accounts that belong to the domain together with info on them. sub get_domain_accounts_info { my $self = shift; my $inventory_item_id = shift; return $self->tpp_get_inventory_item_by_id($inventory_item_id); } # Get accounts that already exist on the domain and # error out if user wants to remove some accounts that don't exist on the domain. sub check_remove_user_accounts { my $self = shift; my $result = $self->check_user_accounts(@_, 'remove'); return $self->error_exit($result->{error}) if $result->{error}; return $result; } # Get accounts that already exist on the domain and # error out if user wants to add some of them again. sub check_add_user_accounts { my $self = shift; my $result = $self->check_user_accounts(@_, 'add'); return $self->error_exit($result->{error}) if $result->{error}; return $result; } sub check_user_accounts { my ( $self, $max_users, $mod_user_accounts_string, $old_user_accounts_string, $action_type ) = @_; my ( $error, $account ); return $self->error_exit(ERROR_M007) if not scalar @{$mod_user_accounts_string}; return $self->error_exit("
The maximum number of Email Defense Users you can enter is $max_users.") if scalar @{$mod_user_accounts_string} > $max_users; foreach $account ( @{$mod_user_accounts_string} ) { return $self->error_exit(ERROR_M008) if ( (grep /^$account$/, @{$mod_user_accounts_string}) > 1 ); } if ( $old_user_accounts_string ) { map { $account = $_; if ( $action_type eq 'add' ) { $error.= "$account
" if grep /^$account$/, @{$old_user_accounts_string} }; if ( $action_type eq 'remove') { $error.= "$account
" if not grep /^$account$/, @{$old_user_accounts_string} }; } @{$mod_user_accounts_string}; my $word = ( $action_type eq 'add') ? 'already' : 'do not'; $error = "Following users $word exist on the domain:
$error" if $error; return $self->error_exit($error) if $error; } return { is_success => 1 }; } # Here we need to decide which acounts should be included in the added accounts. # We get a string that has all accounts (newly selected and left from previous select before edit) # and select only newly selected and accounts from previous select that were selected again. # Accounts that were selected before and didn't make it into the new select are pruned out. sub get_edit_user_accounts { my $self = shift; my $all_user_accounts_string = shift; my $old_user_accounts = shift; my ($error, $account); my @new_user_accounts_string = (); my @old_user_accounts_string = (); my @remaining_user_accounts = (); my @result_user_accounts_string = (); # make an array of names from old user accounts obj. map { push @old_user_accounts_string, $_->{user_account}; } @{$old_user_accounts}; # prune out only newly selected accounts from all accounts. map { $account = $_; push @new_user_accounts_string, $account if not grep /^$account$/, @old_user_accounts_string; } @{$all_user_accounts_string}; # prune out previously selected accounts that made it into the new selection. map { $account = $_; push @remaining_user_accounts, $account if grep /^$account->{user_account}$/, @{$all_user_accounts_string}; } @{$old_user_accounts}; # return newly selected and previouly selected but still in the selection as separate entries. return { is_success => 1, user_accounts_new_added_string => \@new_user_accounts_string, user_accounts_remaining_string => \@remaining_user_accounts, }; } sub validate_contacts { my $self = shift; my $contact_data = shift; my $result = $self->tpp_validate_contacts( $contact_data, custom_verify => 'antispam' ); return $self->error_exit($result->{error_msg}) if $result->{error_msg}; return $result; } sub process_new_purchase_order { my $self = shift; my $handling = shift; my $order_info = shift; my (@key, @value, %new_order_info, @create_items); my @contacts = (); my %contact_data = (); map { @key=keys %{$_}; @value=values %{$_}; $contact_data{$key[0]} = $value[0]; } @{$order_info->{admin_contacts}}; push @contacts, \%contact_data; my @feature_set = ('Antispam'); my $product_data = { domain => $order_info->{domain_name}, feature_set => \@feature_set, mtas => $order_info->{mtas}, accounts => $order_info->{create_items}, }; #this points to the contact array above my $contact_set = { owner => 0, }; push @create_items, { orderitem_type => 'new', product_data => $product_data, contact_set => $contact_set, }; $new_order_info{user_id} = $order_info->{user_id}; $new_order_info{create_items} = \@create_items; $new_order_info{contacts} = \@contacts; return $self->process_order($handling, \%new_order_info); } sub process_upgrade_order { my $self = shift; my $handling = shift; my $order_info = shift; my ( %new_order_info, @create_items, %product_data); $product_data{add_accounts} = {}; $product_data{update_feature_set} = {}; if ( scalar @{$order_info->{mod_user_accounts}} > 0) { my %add_accounts; $add_accounts{accounts} = $order_info->{mod_user_accounts}; $product_data{add_accounts} = \%add_accounts; } push @create_items, { inventory_item_id => $order_info->{inventory_item_id}, orderitem_type => 'upgrade', product_data => \%product_data, }; $new_order_info{user_id} = $order_info->{user_id}; $new_order_info{create_items} = \@create_items; return $self->process_order($handling, \%new_order_info); } sub process_downgrade_order { my $self = shift; my $handling = shift; my $order_info = shift; my ( %new_order_info, @create_items, %product_data); $product_data{delete_accounts} = {}; $product_data{update_feature_set} = {}; if (scalar @{$order_info->{mod_user_accounts_string}}) { $product_data{delete_accounts} = { accounts => $order_info->{mod_user_accounts_string} }; } push @create_items, { inventory_item_id => $order_info->{inventory_item_id}, orderitem_type => 'downgrade', product_data => \%product_data, }; $new_order_info{user_id} = $order_info->{user_id}; $new_order_info{create_items} = \@create_items; return $self->process_order($handling, \%new_order_info); } sub process_order { my $self = shift; my $handling = shift; my $order_info = shift; $order_info->{handling} = $handling ? 'process' : 'save'; $order_info->{create_items}[0]{service} = 'emaildefense'; $order_info->{create_items}[0]{object_type} = 'manualprovision'; my $data = { attributes => $order_info, action => 'create', object => 'order', }; return $self->tpp_process_order($data); } sub cc_fields { my $self = shift; return get_cc_fields(@_); } sub verify_cc_fields { my $self = shift; my $error = verify_cc_info(@_); return $self->error_exit($error) if $error; return { is_success => 1 }; } 1; opensrs-client-3.0.0/lib/OpenSRS/EmailDefense_errors.pm0000644017777601777760000000277410770014202024055 0ustar nobodynogroup00000000000000#!/usr/bin/perl package OpenSRS::EmailDefense_errors; use strict; use Exporter; use vars qw( @ISA @EXPORT ); @ISA = qw(Exporter); @EXPORT = ( 'ERROR_M001', 'ERROR_M002', 'ERROR_M003', 'ERROR_M004', 'ERROR_M005', 'ERROR_M006', 'ERROR_M007', 'ERROR_M008', 'ERROR_M110', 'ERROR_M120', 'ERROR_M140', 'ERROR_M150', 'ERROR_M100', 'ERROR_M170', 'ERROR_M200', 'ERROR_M210', ); use constant ERROR_M001 => 'Empty domain name.'; use constant ERROR_M002 => 'Empty username.'; use constant ERROR_M003 => 'Empty password.'; use constant ERROR_M004 => 'User does not own queried domain.'; use constant ERROR_M005 => 'Empty confirm password.'; use constant ERROR_M006 => 'Passwords must be a minimum of 6 characters.'; use constant ERROR_M007 => 'Empty users.'; use constant ERROR_M008 => 'Duplicate users.'; use constant ERROR_M110 => 'Email Defense Service for this domain cannot be purchased or managed through this interface. Please contact your current provider for assistance.'; use constant ERROR_M100 => 'Error retrieving information.'; use constant ERROR_M140 => 'Passwords do not match.'; use constant ERROR_M150 => 'Username is already taken. Please enter another username.'; use constant ERROR_M170 => 'User does not exist.'; use constant ERROR_M200 => 'Username and/or password not found.'; use constant ERROR_M210 => 'The maximum number of Email Defense Users you can enter is '; 1; opensrs-client-3.0.0/lib/OpenSRS/HTTPS_Connector.pm0000644017777601777760000001373210770014202023050 0ustar nobodynogroup00000000000000#!/usr/bin/perl # # $Id: HTTPS_Connector.pm,v 1.6 2005/09/13 17:42:39 epirogov Exp $ # .Copyright (C) 2002 TUCOWS.com Inc. # .Created: 2002/09/03 # .Contactid: # .Url: http://www.opensrs.org # # This library is free software; you can redistribute it and/or # modify it under the terms of the GNU Lesser General Public # License as published by the Free Software Foundation; either # version 2.1 of the License, or (at your option) any later version. # # 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 # Lesser General Public License for more details. # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA # OpenSRS HTTPS connection library ####################################################### # **NOTE** This library should not be modified ##### # Instead, please modify the supplied cgi scripts ##### ####################################################### package OpenSRS::HTTPS_Connector; use strict; use HTTP::Request::Common qw(POST); use LWP::UserAgent; use Digest::MD5 qw/md5_hex/; use IO::Socket::INET; use Data::Dumper; use OPS; use vars qw($AUTOLOAD); sub new { my $that = shift; my $class = ref($that) || $that; my %args = @_; my $self = { _buffer => {is_success => 0, response_text => 'No response'}, _log_fh => undef, _OPS => new OPS(), _ua => LWP::UserAgent->new, %args, # These would be all the other hash keys/values # from the config because you use this as: # $client = new TPP_Client(%OPENSRS) or $client = new XML_Client(%OPENSRS) }; if ( exists $args{ xml_logfile } and $args{ xml_logfile } ) { require Symbol; my $fh = Symbol::gensym(); open $fh, ">>$args{ xml_logfile }" or die "Can't open XML logfile, $args{ xml_logfile } for append: $!"; select $fh; $| = 1; select STDOUT; $self->{ _log_fh } = $fh; } bless $self, $class; return $self; } # ------------------------------------------------------------------------ # Clean up before we're destroyed. undef a few variables to help mod_perl # along. sub DESTROY { my $self = shift; close $self->_log_fh if $self->_log_fh; } # ------------------------------------------------------------------------ sub AUTOLOAD { my $self = shift; my $type = ref($self) || die "$self is not an object"; my $name = $AUTOLOAD; my $value; $name =~ s/.*://; # strip packages if (@_) { $value = shift; $self->{$name} = $value; } return $self->{$name}; } sub login {} sub logout {} sub authenticate { return (is_success => 1); } sub close_socket {} sub init_socket { my $self = shift; # create a socket to check connectivity my $fh = IO::Socket::INET->new( Proto => "tcp", PeerAddr => $self->{REMOTE_HOST}, PeerPort => $self->{REMOTE_HTTPS_PORT}, ); return 0 if not defined $fh; $fh->close(); return 1; } sub read_data { my $self = shift; my $response = $self->{_buffer}; $self->{_buffer} = {is_success => 0, response_text => 'No response'}; return $response; } sub send_data{ my $self = shift; my $message = $_[0]; if ( not defined $self->{_OPS} ) { $self->{_OPS} = new OPS(); } if ( not defined $self->{_ua} ) { $self->{_ua} = LWP::UserAgent->new; } if (not $message->{protocol}) { $message->{protocol} = $self->{protocol_name}; } if ($message->{protocol} eq 'TPP' && not $message->{version}) { $message->{version} = $self->{protocol_version}; } my $xml = $self->{_OPS}->encode($message)."\n"; my $private_key = $self->{private_key}; my $signature = md5_hex(md5_hex($xml,$private_key),$private_key); my $request = POST ( 'https://'.$self->{REMOTE_HOST}.':'.$self->{REMOTE_HTTPS_PORT}, 'Content-Type' => 'text/xml', 'X-Username' => $self->{username}, 'X-Signature' => $signature, 'Keep-Alive' =>'off', 'Content-Length' => length($xml), 'Content' => $xml); my $logfh = $self->{_log_fh}; print $logfh scalar( localtime() ) . " PID $$ to OpenSRS:\n$xml\n\n" if $logfh; my $response = $self->{_ua}->request($request); if (defined $response and $response->is_success) { my $doc = $response->content; print $logfh scalar( localtime() ) . " PID $$ from OpenSRS:\n$doc\n\n" if $logfh; $self->{_buffer} = $self->{_OPS}->decode($doc); } elsif ($logfh) { print $logfh scalar( localtime() ) . " PID $$\n", "\tHTTP request: ",Dumper($request),"\n", "\tHTTP response:",Dumper($response),"\n"; } } 1; opensrs-client-3.0.0/lib/OpenSRS/Help.pm0000644017777601777760000000253710770014202021025 0ustar nobodynogroup00000000000000#!/usr/bin/perl # .Copyright (C) 1999-2002 TUCOWS.com Inc. # .Created: 11/19/1999 # .Contactid: # .Url: http://www.opensrs.org # .Originally Developed by: # Tucows/OpenSRS # .Authors: Evgeniy Pirogov # # # This program is free software; you can redistribute it and/or # modify it under the terms of the GNU Lesser General Public # License as published by the Free Software Foundation; either # version 2.1 of the License, 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 # Lesser General Public License for more details. # # You should have received a copy of the GNU Lesser General Public # License along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA package OpenSRS::Help; use Exporter; our @ISA = qw(Exporter); our @EXPORT_OK = qw/HelpPages/; use constant HelpPages => { 'province_list' => 'province_list.html', 'ca_domain_name' => 'CA_domain_name_help.htm', 'ca_profile' => 'CIRA_Profile_help.htm', }; opensrs-client-3.0.0/lib/OpenSRS/Language.pm0000644017777601777760000003074310770014202021660 0ustar nobodynogroup00000000000000#----------------------------------------------------------------------- =head1 NAME OpenSRS::Language - ISO three letter codes for language identification (ISO 639-02) For IDN domain name registration =head1 SYNOPSIS use OpenSRS::Language; $lang = code2language('eng'); # $lang gets 'English' $code = language2code('French-FRE'); # $code gets 'fre' @codes = all_language_codes(); @names = all_language_names(); $html_select_string = build_universal_encoding_menu([default_language]); =cut #----------------------------------------------------------------------- package OpenSRS::Language; use strict; use LWP::UserAgent; use HTTP::Request::Common qw(GET); use Data::Dumper; require 5.002; #----------------------------------------------------------------------- =head1 DESCRIPTION The C module provides access to the ISO two-letter codes for identifying languages, as defined in ISO 639. You can either access the codes via the L (described below), or with the two functions which return lists of all language codes or all language names. =cut #----------------------------------------------------------------------- require Exporter; #----------------------------------------------------------------------- # Public Global Variables #----------------------------------------------------------------------- use vars qw($VERSION @ISA @EXPORT_OK $OPENSRS); $VERSION = sprintf("%d.%02d", q$Revision: 1.11 $ =~ /(\d+)\.(\d+)/); @ISA = qw(Exporter); @EXPORT_OK = qw(code2language language2code all_language_codes all_language_names build_universal_encoding_menu native_to_puny puny_to_native build_wsb_language_list); my $useLibIDN = 0; eval { require Net::LibIDN; $useLibIDN = 1; }; sub native_to_puny { my $str = shift; $OPENSRS = shift; my $encoding = shift || $OPENSRS->{IDN_ENCODING_TYPE}; return $str if $str !~ /[^a-z0-9\.\-]/; return convert( command => 'from', str => $str, encoding => $encoding, ); } sub puny_to_native { my $str = shift; $OPENSRS = shift; my $encoding = shift || $OPENSRS->{IDN_ENCODING_TYPE}; return $str if $str !~ /^xn--/; return convert( command => 'to', str => $str, encoding => $encoding, ); } sub convert { my %args = @_; my $converted; if ( $useLibIDN ) { $converted = Net::LibIDN::idn_to_ascii($args{str}, $args{encoding}) if $args{command} eq 'from'; $converted = Net::LibIDN::idn_to_unicode($args{str}, $args{encoding}) if $args{command} eq 'to'; } else { my $useragent = new LWP::UserAgent(); my $http_request = GET "http://$OPENSRS->{REMOTE_IDN_HOST}:". "$OPENSRS->{REMOTE_IDN_PORT}?$args{command}=$args{encoding}&name=$args{str}"; my $http_response = $useragent->request($http_request); my $response = parse_http_response($http_response); if ( $response->{is_success} ) { $converted = $response->{punycode} if $args{command} eq 'from'; $converted = $response->{native} if $args{command} eq 'to'; } else { warn "Conversion failed: $response->{response_text}"; $converted = $args{str} } } return $converted; } sub parse_http_response { my $http_response = shift; my %response; foreach ( split "\015\012", $http_response->content ) { $response{$1} = $2 if $_ =~ /(.*)=(.*)/; } return \%response; } #----------------------------------------------------------------------- # Private Global Variables #----------------------------------------------------------------------- my %CODES = (); my %LANGUAGES = (); #======================================================================= =head1 CONVERSION ROUTINES There are two conversion routines: C and C. =over 8 =item code2language() This function takes a three letter language code and returns a string which contains the name of the language identified. If the code is not a valid language code, as defined by ISO 639, then C will be returned. $lang = code2language($code); =item language2code() This function takes a language name and returns the corresponding three letter language code, if such exists. If the argument could not be identified as a language name, then C will be returned. $code = language2code('French'); The case of the language name is not important. See the section L below. =back =cut #======================================================================= sub code2language { my $code = shift; return undef unless defined $code; $code = lc($code); if (exists $CODES{$code}) { return $CODES{$code}; } else { #--------------------------------------------------------------- # no such language code! #--------------------------------------------------------------- return undef; } } sub language2code { my $lang = shift; return undef unless defined $lang; $lang = lc($lang); if (exists $LANGUAGES{$lang}) { return $LANGUAGES{$lang}; } else { #--------------------------------------------------------------- # no such language! #--------------------------------------------------------------- return undef; } } #======================================================================= =head1 QUERY ROUTINES There are two function which can be used to obtain a list of all language codes, or all language names: =over 8 =item C Returns a list of all two-letter language codes. The codes are guaranteed to be all lower-case, and not in any particular order. =item C Returns a list of all language names for which there is a corresponding two-letter language code. The names are capitalised, and not returned in any particular order. =back =cut #======================================================================= sub all_language_codes { return keys %CODES; } sub all_language_names { return values %CODES; } sub get_idn_for_tld{ my $fqdn = shift; if ($fqdn =~ /\.(com|net)$/){ return (sort keys %CODES); } elsif ( $fqdn =~ /\.org/ ){ return (sort qw/ ger dan lit lav ice hun spa kor swe pol /); } elsif ( $fqdn =~ /\.info$/ ){ return (sort qw/ ger dan lit lav ice hun kor pol swe /); # No IDNs for .ASIA yet... # } elsif ( $fqdn =~ /\.asia$/ ){ } elsif ( $fqdn =~ /\.de$/ ){ return (sort qw/ alb cat fin ger fre dan dut scr cze est hun ita lav ice lit nor pol por slo spa swe tur vie wel /); } elsif ( $fqdn =~ /\.biz$/ ){ return (sort qw/ chi dan ger ice jpn nor spa swe /); } } sub build_universal_encoding_menu { my %args = @_; my($retstring, $language_tag, $selected); my @language_tags = sort keys %CODES; if ($args{Domain}){ @language_tags = get_idn_for_tld($args{Domain}); } $args{Default} ||= 'Standard ASCII'; $retstring = "

$msg1
$msg2
$test $response
$test $response
$header
Step 3) To order to activate Whois Privacy You must follow the instructions contained in an email message that has been sent to the Admin Contact address of the domain name.
No history found
$record->{xpack_req_id}  $w_action  $record->{create_time}  $record->{current_state} 

Legal Type

  • Canadian citizen: A Canadian citizen of the age of majority under the laws of the province or territory in Canada in which he or she resides or last resided.
  • Permanent Resident of Canada: A permanent resident as defined in the Immigration Act (Canada) R.S.C. 1985, c.I-2, as amended from time to time, who is "ordinarily resident in Canada" and of the age of majority under the laws of the province or territory in Canada in which he or she resides or last resided. ("Ordinarily resident in Canada" means an individual who resides in Canada for more than 183 days in the twelve month period immediately preceding the date of the applicable request for registration of the .ca domain name or sub-domain name and in each twelve month period thereafter for the duration of the domain name registration.)
  • Legal Representative of a Canadian Citizen or Permanent Resident: An executor, administrator or other legal representative of a Person listed as a Canadian Citizen or Permanent Resident of Canada.

    Note: This registrant type is only available to a person or entity that has been appointed by legal process to represent an individual who is not competent to represent him or herself. It is not available to anyone who represents a Canadian or foreign corporation in any capacity.

  • Corporation (Canada or Canadian province or territory): A corporation under the laws of Canada or any province or territory of Canada
  • Registered Charity: A charity which is registered with the Canada Customs and Revenue Agency. The website http://www.ccra-adrc.gc.ca/tax/charities/online_listings/canreg_interim-e.html displays registered charities. The legal type for the charity will actually be stored as a "corporation". However, the abbreviation "(NFP)" (Not for Profit) must be added to the registrant name to identify the registrant as a charity.
  • Partnership Registered in Canada: A partnership, more than 66 2/3 % of whose partners meet the requirements of one of the following Registrant Types: Corporation (Canada or Canadian province or territory), Canadian citizen, Permanent Resident of Canada, Trust established in Canada or a Legal Representative of a Canadian Citizen or Permanent Resident, which is registered as a partnership under the laws of any province or territory of Canada.
  • Trust established in Canada: A trust established and subsisting under the laws of a province or territory of Canada, more than 66 2/3 % of whose trustees meet the requirements of one of the following Registrant Types: Corporation (Canada or Canadian province or territory), Canadian citizen, Permanent Resident of Canada, or a Legal Representative of a Canadian Citizen or Permanent Resident.
  • Official mark registered in Canada: A Person which does not meet the requirements for any other Registrant Type, but which is a Person intended to be protected by Subsection 9(1) of the Trade-Marks Act (Canada) at whose request the Registrar of Trade-marks has published notice of adoption of any badge, crest, emblem, official mark or other mark pursuant to Subsection 9(1), but in this case such permission is limited to a request to register a .ca domain name consisting of or including the exact word component of such badge, crest, emblem, official mark or other mark in respect of which such Person requested publications. Note: This registrant type is only intended for Registrants which do not meet the requirements associated with any other registrant type but which have an Official Mark registered in Canada.

    The domain name must include the official mark (eg. If the official mark is WIPO, the registrant can register wipo.ca but not intellectual-property.ca)

  • Trade-mark registered in Canada (by a non-Canadian owner): A Person which does not fall under any other registrant type, but which is the owner of a trade-mark which is the subject of a registration under the Trade-marks Act (Canada) R.S.C. 1985, c.T-13 as amended from time to time, but in this case such permission is limited to a request to register a .ca domain name consisting of or including the exact word component of that registered trade-mark.

    This Registrant Type is only intended for Registrants which do not meet the requirements associated with any other registrant type but which have a trade-mark registered in Canada. (Trade-marks subject of trade-mark applications and trade-marks registered in other jurisdictions, such as the United States, do not qualify.)

    The domain name to be registered must include the trade-mark. (eg. If the trade-mark is AVEA this type of registrant can register avea.ca or aveaisus.ca but not xyz.ca).

  • Canadian Unincorporated Association is principally intended for religious congregations, social and sports clubs and community groups which are based and operating in Canada. An unincorporated organization, association or club where:
    1. at least 80% of whose members:
      1. are ordinarily resident in Canada (if such members are individuals); or
      2. meet the requirements of any one of the following Registrant Types: Corporation (Canada or Canadian province or territory), Canadian citizen, Permanent Resident of Canada, Partnership Registered in Canada, Trust established in Canada, Legal Representative of a Canadian Citizen or Permanent Resident; and
    2. at least 80% of whose directors, officers, employees, managers, administrators or other representatives are ordinarily resident in Canada.
  • Government or government entity in Canada: Her Majesty the Queen in right of Canada, a province or a territory; an agent of Her Majesty the Queen in right of Canada, of a province or of a territory; a federal, provincial or territorial Crown corporation, government agency or government entity; or a regional, municipal or local area government.
  • Canadian Political Party: A political party registered under a relevant electoral law of Canada or any province or territory of Canada
  • Canadian Educational Institution: (i) a university or college which is located in Canada and which is authorized or recognized as a university or college under an Act of the legislature of a province or territory of Canada; or (ii) a college, post-secondary school, vocational school, secondary school, pre-school or other school or educational institution which is located in Canada and which is recognized by the educational authorities of a province or territory of Canada or licensed under or maintained by an Act of Parliament of Canada or of the legislature of a province or territory of Canada.
  • Canadian Hospital: A hospital which is located in Canada and which is licensed, authorized or approved to operate as a hospital under an Act of the legislature of a province or territory of Canada.
  • Canadian Library, Archive or Museum: An institution, whether or not incorporated, that is: (i) located in Canada; and (ii) not established or conducted for profit or does not form part of, or is not administered or directly or indirectly controlled by, a body that is established or conducted for profit in which is held and maintained a collection of documents and other materials that is open to the public or to researchers.
  • Canadian Trade Union: A trade union which is recognized by a labour board under the laws of Canada or any province or territory of Canada and which has its head office in Canada.
  • Aboriginal Peoples (individuals or groups) indigenous to Canada: Any Inuit, First Nation, Metis or other people indigenous to Canada, and any collectivity of such Aboriginal peoples.
  • Indian Band recognized by the Indian Act of Canada: Any Indian band as defined in the Indian Act, R.S.C. 1985, c. I-5, as amended from time to time, and any group of Indian bands;
Registrant Name

When registering a domain with the legal type:

  1. Canadian Citizen, or
  2. Permanent Resident
The Registrant Name must be the FULL LEGAL NAME of the individual who will hold the domain name registration as the name would appear on a passport, drivers license or other identification document issued by a government.

Example: "John Doe".

The name may be followed by a space and "o/a xxxx" where "o/a" stands for "Operating As" and "xxxx" can be any alphanumeric string designated by the applicant.

When registering the domain for a small business, or a non-incorporated business, the "xxxx" field should be used to indicate this business.

Example: "John Doe o/a Doe Consulting Group"

The name may be followed by a space and a degree granted to the registrant by a recognized degree granting institution or a recognized professional designation, which the registrant has the right to use (e.g. PhD, MD, DDS).

Legal Representative of a Canadian Citizen or Permanent Resident: The individual's name must be followed by the full legal name and capacity of at least one of the official representatives.

Example: "John Doe o/a Jayne Smith - executor"

Corporation (Canada or Canadian province or territory): The Registrant name must be the full legal name of corporation and must be followed by the jurisdiction of incorporation (eg. Canada, Ontario, NWT....). The keywords: Corporation, Corp., Incorporated, Inc., Limited, LTD etc. are typically included in the registrant name.

Example: "Smith Corporation of Ontario"

Charity: The Registrant name must be the full legal name of charity (as noted at the website http://www.ccra-adrc.gc.ca/tax/charities/online_listings/canreg_interim-e.html) and must be followed by the jurisdiction of incorporation (eg. Canada, Ontario, NWT....). The abbreviation "(NFP)" (Not For Profit) must be added to the end of the registrant name.

Example: "John Doe Foundation, British Columbia - (NFP)"

Partnership Registered in Canada: The Registrant name must be the registered name of the partnership that will hold the domain name registration. The Registrant name must be followed by the jurisdiction of registration (eg. Alberta) and the registration number. (NOTE: partnerships can only have a provincial jurisdiction - they cannot be federally registered). The keywords: Partnership or LLP are typically included in the registrant name.

Example: "John Doe Partnership, British Columbia"

Trust established in Canada: The Registrants name must be the complete official name of the trust, without any abbreviations. (A common abbreviation may follow the official name in parentheses.) The Registrant name must also indicate the total percentage of the trustees that meet one or more of the following requirements: Canadian citizen, permanent resident, Canadian corporation, or legal representative.

Example: "John Doe Trust - (100%)"

Official mark registered in Canada: The Registrant's name must be the complete official name of the entity holding the domain name registration without any abbreviations. (A common abbreviation may follow the complete name in parentheses). The registration number of the official mark must follow the Registrant name.

Example: "The United Nation Educational, Scientific and Cultural Organization (UNESCO) - 0970388"

Trade-mark registered in Canada (by a non-Canadian owner): The Registrant's name must be the complete legal name of the trade-mark owner (not the trade-mark agent) holding the domain name registration without any abbreviations. (A common abbreviation may follow the complete name in parentheses). The applicant must also insert the Canadian registration number of the trade-mark following the Registrant name.

Example: "Arcuros SPA - TMA1762466"

Canadian Unincorporated Association: The Registrant's name must be the complete name of the association that will hold the domain name registration, without any abbreviations. (A common abbreviation may follow the complete name in parentheses). If the geographic location of the association is not obvious from the registrant name, the location should be added to the domain (eg. "of Winnipeg")

Example: "St-Alban's Reformed Church of Victoria"

Government or government entity in Canada: The Registrant's name must be the complete official name of the entity that will hold the domain name registration,without any abbreviations. (A common abbreviation may follow the official name in parentheses). If the Registrant is not a government, the Registrants name must be followed by the name of the jurisdiction (eg. Canada, province, territory, municipality, etc) to which the Registrant is related.

Example: "Government of Alberta"

Canadian Political Party: The Registrant's name must be the complete official name of the political party holding the domain name registration, without abbreviations. (A common abbreviation may follow the official name in parentheses.) The Registrant name must also by followed by the jurisdiction in Canada in which it is registered (if it is not obvious from the official name).

Example: "Reform Party - Alberta"

Canadian Educational Institution: The Registrant's name must be the complete official name of the institution that will hold the domain name registration, without any abbreviations. A common abbreviation may follow the official name in parentheses. The Registrant name must be followed by the jurisdiction (e.g. name of province, municipality) in which the institution is accredited if not obvious from the Registrants name.

Example: "University of British Columbia (UBC)"

Canadian Hospital: The Registrant's name must be the complete official name of the hospital that will hold the domain name registration, without any abbreviations. (A common abbreviation may follow the complete name in parentheses.) The Registrants name must be followed by the jurisdiction (e.g. name of province) in which accredited the hospital if not obvious from the Registrants name.

Example: "Veteran's Hospital Canada, Pointe Claire"

Canadian Library, Archive or Museum: The Registrant's name must be the complete legal name of the institution which will hold the domain name registration without abbreviations. (A common abbreviation may follow the complete name in parentheses.)

Example: "Royal Ontario Museum"

Canadian Trade Union: The Registrants name must be the complete official name of the trade union that will hold the domain name registration, without abbreviations. (A common abbreviation may follow the official name in parentheses.) The Registrant name must be followed by the jurisdiction in Canada which recognizes it (if it is not obvious from the Registrants name.)

Example: "Canadian Union of Postal Workers (CUPW)"

Aboriginal Peoples - Individual: the Registrant Name must be the FULL LEGAL NAME of the individual who will hold the domain name registration as the name would appear on a passport, drivers license or other identification document issued by a government.

Example: "John Doe".

Initials or nicknames are not allowed. Full legal names may only consist of alphabetic characters and the special characters: single quote mark('), hyphen(-), period(.).

The name may be followed by a space and "o/a xxxx" where "o/a" stands for "Operating As" and "xxxx" can be any alphanumeric string designated by the applicant.

Example: "John Doe o/a Doe Group"

Aboriginal Peoples - Group: The Registrants name must be the complete official name of the indigenous people a collectivity of Aboriginal Persons or, if there is no official name, the name by which the collectivity is commonly known.

Example: "Carrier Sekani Tribal Council"

Indian Band recognized by the Indian Act of Canada: The name of Registrant must be the Indian Band Name as registered with the Department of Indian and Northern Affairs, Canada.

Example: "Lac la Ronge Indian Band"
Registrant Description

The registrant description is a free form field where additional information about the registrant or the purpose of the domain can be entered.

#, }, personal => { list => [qw/CCT RES LGR/], intro => qq#

If the domain is for an individual who wishes to have a domain name for personal use, one of the following legal types may be appropriate:

  • Canadian Citizen
  • Permanent Resident of Canada
  • Legal Representative of a Canadian Citizen or Permanent Resident

The "registrant name" must be the full legal name of the individual, as it would appear on a passport, drivers license or other government issued identification documents, such as: "John Doe".

Once the domain is registered, you cannot easily change the registrant name, so please ensure that this name is correct. Please select the appropriate Legal Type and enter the appropriate Registrant Name below.

#, help => qq#

Legal Type

Domains being registered for personal use, must be registered by a Canadian with one of the following legal types:

  • Canadian citizen: A Canadian citizen of the age of majority under the laws of the province or territory in Canada in which he or she resides or last resided
  • Permanent Resident of Canada: A permanent resident as defined in the Immigration Act (Canada) R.S.C. 1985, c.I-2, as amended from time to time, who is "ordinarily resident in Canada" and of the age of majority under the laws of the province or territory in Canada in which he or she resides or last resided. ("Ordinarily resident in Canada" means an individual who resides in Canada for more than 183 days in the twelve month period immediately preceding the date of the applicable request for registration of the .ca domain name or sub-domain name and in each twelve month period thereafter for the duration of the domain name registration.)
  • Legal Representative of a Canadian Citizen or Permanent Resident: An executor, administrator or other legal representative of a Person listed as a Canadian Citizen or Permanent Resident of Canada.

Note: This registrant type is only available to a person or entity that has been appointed by legal process to represent an individual who is not competent to represent him or herself. It is not available to anyone who represents a Canadian or foreign corporation in any capacity.

Registrant Name

When registering a domain with the legal type:

  1. Canadian Citizen, or
  2. Permanent Resident
The Registrant Name must be the FULL LEGAL NAME of the individual who will hold the domain name registration as the name would appear on a passport, drivers license or other identification document issued by a government.

Example: "John Doe".

When registering a domain with the legal type, Legal Representative of a Canadian Citizen or Permanent Resident, the individual's name must be followed by the full legal name and capacity of at least one of the official representatives.

Example: "John Doe o/a Jayne Smith - executor"

Initials or nicknames are not allowed. Full legal names may only consist of alphabetic characters and the special characters: single quote mark('), hyphen(-), period(.).

The name may be followed by a space and "o/a xxxx" where "o/a" stands for "Operating As" and "xxxx" can be any alphanumeric string designated by the applicant.

Example: "John Doe o/a Doe Consulting Group"

The name may be followed by a space and a degree granted to the registrant by a recognized degree granting institution or a recognized professional designation, which the registrant has the right to use (e.g. PhD, MD, DDS).

Once the domain is registered, you cannot easily change the registrant name, so please ensure that this name is correct.

Registrant Description

The registrant description is a free form field where additional information about the registrant or the purpose of the domain can be entered.

#, }, trust => { list => [qw/CCO OMK PRT TDM TRS/], intro => q#

If the domain is for a registered business, charity, trust or trade-mark, you must select one of the following types:

  • Corporation or Registered Charity (Canada or Canadian province or territory)
  • Partnership Registered in Canada
  • Trust established in Canada
  • Official mark registered in Canada
  • Trade-mark registered in Canada (by a non-Canadian owner)

The "registrant name" must clearly reflect the organization name and the jurisdiction for the REGISTERED entity. Since these legal types have strict naming regulations, please ensure that the registrant name adheres to CIRA guidelines outlined in the ? sections.

Once the domain is registered, you cannot easily change the registrant name, so please ensure that this name is correct. Please select the appropriate Legal Type and enter the appropriate Registrant Name below.

#, help => q#

Legal Type

If the domain is for a registered business, charity, trust or trade-mark, and you have selected one of the following types:

  1. Corporation or Registered Charity (Canada or Canadian province or territory)
  2. Partnership Registered in Canada
  3. Trust established in Canada
  4. Official mark registered in Canada
  5. Trade-mark registered in Canada (by a non-Canadian owner)

The registrant must meet the requirements for the specific legal types as follows:

Corporation (Canada or Canadian province or territory) A corporation under the laws of Canada or any province or territory of Canada

Registered Charity: A charity which is registered with the Canada Customs and Revenue Agency. The website http://www.ccra-adrc.gc.ca/tax/charities/online_listings/canreg_interim-e.html displays registered charities. The legal type for the charity will actually be stored as a "corporation". However, the abbreviation "(NFP)" (Not for Profit) must be added to the registrant name to identify the registrant as a charity.

Partnership Registered in Canada: A partnership, more than 66 2/3 % of whose partners meet the requirements of one of the following Registrant Types: Corporation (Canada or Canadian province or territory), Canadian citizen, Permanent Resident of Canada, Trust established in Canada or a Legal Representative of a Canadian Citizen or Permanent Resident, which is registered as a partnership under the laws of any province or territory of Canada.

Trust established in Canada: A trust established and subsisting under the laws of a province or territory of Canada, more than 66 2/3 % of whose trustees meet the requirements of one of the following Registrant Types: Corporation (Canada or Canadian province or territory), Canadian citizen, Permanent Resident of Canada, or a Legal Representative of a Canadian Citizen or Permanent Resident.

Official mark registered in Canada: A Person which does not meet the requirements for any other Registrant Type, but which is a Person intended to be protected by Subsection 9(1) of the Trade-Marks Act (Canada) at whose request the Registrar of Trade-marks has published notice of adoption of any badge, crest, emblem, official mark or other mark pursuant to Subsection 9(1), but in this case such permission is limited to a request to register a .ca domain name consisting of or including the exact word component of such badge, crest, emblem, official mark or other mark in respect of which such Person requested publications. Note: This registrant type is only intended for Registrants which do not meet the requirements associated with any other registrant type but which have an Official Mark registered in Canada.

The domain name must include the official mark (eg. If the official mark is WIPO, the registrant can register wipo.ca but not intellectual-property.ca)

Trade-mark registered in Canada (by a non-Canadian owner): A Person which does not fall under any other registrant type, but which is the owner of a trade-mark which is the subject of a registration under the Trade-marks Act (Canada) R.S.C. 1985, c.T-13 as amended from time to time, but in this case such permission is limited to a request to register a .ca domain name consisting of or including the exact word component of that registered trade-mark. This Registrant Type is only intended for Registrants which do not meet the requirements associated with any other registrant type but which have a trade-mark registered in Canada. (Trade-marks subject of trade-mark applications and trade-marks registered in other jurisdictions, such as the United States, do not qualify.)

The domain name to be registered must include the trade-mark. (eg. If the trade-mark is AVEA this type of registrant can register avea.ca or aveaisus.ca but not xyz.ca).

Registrant Name

The "registrant name" must clearly reflect the organization name and the jurisdiction for the REGISTERED entity. Since these legal types have strict naming regulations, please ensure that the registrant name adheres to CIRA guidelines outlined below.

Corporation (Canada or Canadian province or territory): The Registrant name must be the full legal name of corporation and must be followed by the jurisdiction of incorporation (eg. Canada, Ontario, NWT....). The keywords: Corporation, Corp., Incorporated, Inc., Limited, LTD etc. are typically included in the registrant name.

Example: "Smith Corporation of Ontario"

Charity: The Registrant name must be the full legal name of charity (as noted at the website http://www.ccra-adrc.gc.ca/tax/charities/online_listings/canreg_interim-e.html) and must be followed by the jurisdiction of incorporation (eg. Canada, Ontario, NWT....). The abbreviation "(NFP)" (Not For Profit) must be added to the end of the registrant name.

Example: "John Doe Foundation, British Columbia - (NFP)"

Partnership Registered in Canada: The Registrant name must be the registered name of the partnership that will hold the domain name registration. The Registrant name must be followed by the jurisdiction of registration (eg. Alberta) and the registration number. (NOTE: partnerships can only have a provincial jurisdiction - they cannot be federally registered). The keywords: Partnership or LLP are typically included in the registrant name.

Example: "John Doe Partnership, British Columbia"

Trust established in Canada: The Registrants name must be the complete official name of the trust, without any abbreviations. (A common abbreviation may follow the official name in parentheses.) The Registrant name must also indicate the total percentage of the trustees that meet one or more of the following requirements: Canadian citizen, permanent resident, Canadian corporation, or legal representative.

Example: "John Doe Trust - (100%)"

Official mark registered in Canada: The Registrant's name must be the complete official name of the entity holding the domain name registration without any abbreviations. (A common abbreviation may follow the complete name in parentheses). The registration number of the official mark must follow the Registrant name.

Example: "The United Nation Educational, Scientific and Cultural Organization (UNESCO) - 0970388"

Trade-mark registered in Canada (by a non-Canadian owner): The Registrant's name must be the complete legal name of the trade-mark owner (not the trade-mark agent) holding the domain name registration without any abbreviations. (A common abbreviation may follow the complete name in parentheses). The applicant must also insert the Canadian registration number of the trade-mark following the Registrant name.

Example: "Arcuros SPA - TMA1762466"
Registrant Description

The registrant description is a free form field where additional information about the registrant or the purpose of the domain can be entered.

#, }, sole => { list => [qw/CCT RES/], intro => q#

If the domain is for a non-incorporated business which is owned by an individual, one of the following legal types is appropriate:

  • Canadian Citizen
  • Permanent Resident of Canada

The "registrant name" must be the full legal name of the individual, as it would appear on a passport, drivers license or other government issued identification documents, followed by the characters "o/a" and then the Business name (where o/a stands for "operating as"), such as "John Doe o/a Doe Consulting Group".

Once the domain is registered, you cannot easily change the registrant name, so please ensure that this name is correct. Please select the appropriate Legal Type and enter the appropriate Registrant Name below.

#, help => q#

Legal Type

Domains being registered for a small business or a non-incorporated business, must be registered by the Canadian owner with one of the following legal types:

  • Canadian citizen: A Canadian citizen of the age of majority under the laws of the province or territory in Canada in which he or she resides or last resided
  • Permanent Resident of Canada: A permanent resident as defined in the Immigration Act (Canada) R.S.C. 1985, c.I-2, as amended from time to time, who is "ordinarily resident in Canada" and of the age of majority under the laws of the province or territory in Canada in which he or she resides or last resided. ("Ordinarily resident in Canada" means an individual who resides in Canada for more than 183 days in the twelve month period immediately preceding the date of the applicable request for registration of the .ca domain name or sub-domain name and in each twelve month period thereafter for the duration of the domain name registration.)

The registrant name can be altered to reflect that the domain is being used for a business operation rather then for personal use.

Registrant Name

When registering a domain with the legal type:

  1. Canadian Citizen, or
  2. Permanent Resident
the Registrant Name must be the FULL LEGAL NAME of the individual who will hold the domain name registration as the name would appear on a passport, drivers license or other identification document issued by a government.

Example: "John Doe".

The name may be followed by a space and "o/a xxxx" where "o/a" stands for "Operating As" and "xxxx" can be any alphanumeric string designated by the applicant.

When registering the domain for a small business, or a non-incorporated business, the "xxxx" field should be used to indicate this business.

Example: "John Doe o/a Doe Consulting Group"

The name may be followed by a space and a degree granted to the registrant by a recognized degree granting institution or a recognized professional designation, which the registrant has the right to use (e.g. PhD, MD, DDS).

Once the domain is registered, you cannot easily change the registrant name, so please ensure that this name is correct.

Registrant Description

The registrant description is a free form field where additional information about the registrant or the purpose of the domain can be entered.

#, }, social => { list => [qw/ASS/], intro => q#

If the domain is for a religious congregation, social or sports club, or a community group the following legal type is appropriate:

  • Canadian Unincorporated Association

The "registrant name" must be the complete name of the association that will hold the domain registration, without any abbreviations. (A common abbreviation may follow the complete name in parentheses.) If the geographic location of the association is not obvious from the registrant name, the location should be added to the domain (eg. "of Winnipeg")

Once the domain is registered, you cannot easily change the registrant name, so please ensure that this name is correct. Please select the appropriate Legal Type and enter the appropriate Registrant Name below.

#, help => q#

Legal Type

The Registrant Type: Canadian Unincorporated Association is principally intended for religious congregations, social and sports clubs and community groups which are based and operating in Canada. An unincorporated organization, association or club where:

  1. at least 80% of whose members:
    1. are ordinarily resident in Canada (if such members are individuals); or
    2. meet the requirements of any one of the following Registrant Types: Corporation (Canada or Canadian province or territory), Canadian citizen, Permanent Resident of Canada, Partnership Registered in Canada, Trust established in Canada, Legal Representative of a Canadian Citizen or Permanent Resident; and
  2. at least 80% of whose directors, officers, employees, managers, administrators or other representatives are ordinarily resident in Canada.
Registrant Name

The Registrant's name must be the complete name of the association that will hold the domain name registration, without any abbreviations. (A common abbreviation may follow the complete name in parentheses). If the geographic location of the association is not obvious from the registrant name, the location should be added to the domain (eg. "of Winnipeg")

Example: "St-Alban's Reformed Church of Victoria"
Registrant Description

The registrant description is a free form field where additional information about the registrant or the purpose of the domain can be entered.

#, }, entity => { list => [qw/GOV PLT EDU HOP LAM TRD/], intro => qq#

If the domain is for government office, political party, educational institution, library, hospital or trade union, you must select one of the following types:

  • Government or Government Entity in Canada
  • Political Party
  • Educational Institution
  • Hospital
  • Library, Archive or Museum
  • Trade Union

The "registrant name" must be the complete name of the organization that will hold the domain registration, without any abbreviations. (A common abbreviation may follow the complete name in parentheses.) If the geographic location of the association is not obvious from the registrant name, the location should be added to the domain (eg. "of Winnipeg")

Once the domain is registered, you cannot easily change the registrant name, so please ensure that this name is correct. Please select the appropriate Legal Type and enter the appropriate Registrant Name below.

#, help => q#

Legal Type

If the domain is for government office, political party, educational institution, library, hospital or trade union, you have selected one of the following types:

  • Government or Government Entity in Canada
  • Political Party
  • Educational Institution
  • Hospital
  • Library, Archive or Museum
  • Trade Union

The registrant must meet the requirements for the specific legal types as follows:

Government or government entity in Canada: Her Majesty the Queen in right of Canada, a province or a territory; an agent of Her Majesty the Queen in right of Canada, of a province or of a territory; a federal, provincial or territorial Crown corporation, government agency or government entity; or a regional, municipal or local area government.

Canadian Political Party:A political party registered under a relevant electoral law of Canada or any province or territory of Canada

Canadian Educational Institution: i) a university or college which is located in Canada and which is authorized or recognized as a university or college under an Act of the legislature of a province or territory of Canada; or (ii) a college, post-secondary school, vocational school, secondary school, pre-school or other school or educational institution which is located in Canada and which is recognized by the educational authorities of a province or territory of Canada or licensed under or maintained by an Act of Parliament of Canada or of the legislature of a province or territory of Canada.

Canadian Hospital: A hospital which is located in Canada and which is licensed, authorized or approved to operate as a hospital under an Act of the legislature of a province or territory of Canada.

Canadian Library, Archive or Museum: An institution, whether or not incorporated, that is: (i) located in Canada; and (ii) not established or conducted for profit or does not form part of, or is not administered or directly or indirectly controlled by, a body that is established or conducted for profit in which is held and maintained a collection of documents and other materials that is open to the public or to researchers.

Canadian Trade Union: A trade union which is recognized by a labour board under the laws of Canada or any province or territory of Canada and which has its head office in Canada.

Registrant Name

The "registrant name" must be the complete name of the organization that will hold the domain registration, without any abbreviations. (A common abbreviation may follow the complete name in parentheses.) If the geographic location of the association is not obvious from the registrant name, the location should be added to the domain (eg. "of Winnipeg"). Specific details for a particular legal type are outlined below.

Government or government entity in Canada: The Registrant's name must be the complete official name of the entity that will hold the domain name registration,without any abbreviations. (A common abbreviation may follow the official name in parentheses). If the Registrant is not a government, the Registrants name must be followed by the name of the jurisdiction (eg. Canada, province, territory, municipality, etc) to which the Registrant is related.

Example: "Government of Alberta"

Canadian Political Party: The Registrant's name must be the complete official name of the political party holding the domain name registration, without abbreviations. (A common abbreviation may follow the official name in parentheses.) The Registrant name must also by followed by the jurisdiction in Canada in which it is registered (if it is not obvious from the official name).

Example: "Reform Party - Alberta"

Canadian Educational Institution: The Registrant's name must be the complete official name of the institution that will hold the domain name registration, without any abbreviations. A common abbreviation may follow the official name in parentheses. The Registrant name must be followed by the jurisdiction (e.g. name of province, municipality) in which the institution is accredited if not obvious from the Registrants name.

Example: "University of British Columbia (UBC)"

Canadian Hospital: The Registrant's name must be the complete official name of the hospital that will hold the domain name registration, without any abbreviations. (A common abbreviation may follow the complete name in parentheses.) The Registrants name must be followed by the jurisdiction (e.g. name of province) in which accredited the hospital if not obvious from the Registrants name.

Example: "Veteran's Hospital Canada, Pointe Claire"

Canadian Library, Archive or Museum: The Registrant's name must be the complete legal name of the institution which will hold the domain name registration without abbreviations. (A common abbreviation may follow the complete name in parentheses.)

Example: "Royal Ontario Museum"

Canadian Trade Union: The Registrants name must be the complete official name of the trade union that will hold the domain name registration, without abbreviations. (A common abbreviation may follow the official name in parentheses.) The Registrant name must be followed by the jurisdiction in Canada which recognizes it (if it is not obvious from the Registrants name.)

Example: "Canadian Union of Postal Workers (CUPW)"
Registrant Description

The registrant description is a free form field where additional information about the registrant or the purpose of the domain can be entered.

#, }, government => { list => [qw/GOV/], intro => q#

To register a municipal domain the registrant's Legal Type must be 'Government'.Government has been preselected in this form on your behalf. The registrant's name must be complete official name of the city, without any abbreviation, such as "City of Ottawa".

Once the domain is registered, you cannot easily change the registrant name, so please ensure that this name is correct. Please select the appropriate Legal Type and enter the appropriate Registrant Name below.

#, help => q#

Legal Type

The registrant must meet the requirements for "Government or government entity in Canada" as a regional, municipal or local area government.

Registrant Name

The Registrant's name must be the complete official name of the entity that will hold the domain name registration, without any abbreviations. (A common abbreviation may follow the official name in parentheses).

Example: "City of Ottawa"
Registrant Description

The registrant description is a free form field where additional information about the registrant or the purpose of the domain can be entered.

#, }, indian => { list => [qw/ABO INB/], intro => q#

If the domain is for an aboriginal individual or a group of aboriginal persons, one of the following legal types may be appropriate:

  • Aboriginal Peoples (individual or groups) indigenous to Canada
  • Indian Band recognized by the Indian Act of Canada

If the domain is for individual use, the "registrant name" must be the full legal name of the individual, as it would appear on a passport, drivers license or other government issued identification documents, such as: "John Doe".

If the domain is for group use, the "registrant name" must be the Indian Band Name or complete official name of the collectivity, or if there is no official name, the commonly known name.

Once the domain is registered, you cannot easily change the registrant name, so please ensure that this name is correct. Please select the appropriate Legal Type and enter the appropriate Registrant Name below.

#, help => q#

Legal Type

Domains being registered for use by Aboriginal Peoples, must be registered by a Canadian with one of the following legal types:

  • Aboriginal Peoples (individuals or groups) indigenous to Canada: Any Inuit, First Nation, Metis or other people indigenous to Canada, and any collectivity of such Aboriginal peoples.
  • Indian Band recognized by the Indian Act of Canada: Any Indian band as defined in the Indian Act, R.S.C. 1985, c. I-5, as amended from time to time, and any group of Indian bands;
Registrant Name

Aboriginal Peoples - Individual: the Registrant Name must be the FULL LEGAL NAME of the individual who will hold the domain name registration as the name would appear on a passport, drivers license or other identification document issued by a government.

Example: "John Doe".

Initials or nicknames are not allowed. Full legal names may only consist of alphabetic characters and the special characters: single quote mark('), hyphen(-), period(.).

The name may be followed by a space and "o/a xxxx" where "o/a" stands for "Operating As" and "xxxx" can be any alphanumeric string designated by the applicant.

Example: "John Doe o/a Doe Group"

The name may be followed by a space and a degree granted to the registrant by a recognized degree granting institution or a recognized professional designation, which the registrant has the right to use (e.g. PhD, MD, DDS).

Aboriginal Peoples - Group: The Registrants name must be the complete official name of the indigenous people a collectivity of Aboriginal Persons or, if there is no official name, the name by which the collectivity is commonly known.

Example: "Carrier Sekani Tribal Council"

Indian Band recognized by the Indian Act of Canada: The name of Registrant must be the Indian Band Name as registered with the Department of Indian and Northern Affairs, Canada.

Example: "Lac la Ronge Indian Band"
Registrant Description

The registrant description is a free form field where additional information about the registrant or the purpose of the domain can be entered.

#, }, other => { list => [qw/CCT RES/], intro => q#

If you were not able to find the appropriate "grouping" from the list, the registrant MAY NOT BE CANADIAN. In this case, the domain cannot be registered UNLESS it is a registered trademark in Canada. If it is registered trademark, please go back and register this domain using the trademark legal type.

Otherwise, the registrant most likely is representing an informal group like a musical group or fan club. In this case the domain should be registered by an individual and use one of the following legal types:

  • Canadian Citizen
  • Permanent Resident of Canada

The "registrant name" must be the full legal name of the individual, as it would appear on a passport, drivers license or other government issued identification documents, followed by the characters "o/a" and then the "informal group" name (where o/a stands for "operating as"), such as "John Doe o/a Heavy Metal".

Once the domain is registered, you cannot easily change the registrant name, so please ensure that this name is correct. Please select the appropriate Legal Type and enter the appropriate Registrant Name below.

#, help => q#

Legal Type

Domains being registered for a small business or a non-incorporated business, must be registered by the Canadian owner with one of the following legal types:

  • Canadian citizen: A Canadian citizen of the age of majority under the laws of the province or territory in Canada in which he or she resides or last resided
  • Permanent Resident of Canada: A permanent resident as defined in the Immigration Act (Canada) R.S.C. 1985, c.I-2, as amended from time to time, who is "ordinarily resident in Canada" and of the age of majority under the laws of the province or territory in Canada in which he or she resides or last resided. ("Ordinarily resident in Canada" means an individual who resides in Canada for more than 183 days in the twelve month period immediately preceding the date of the applicable request for registration of the .ca domain name or sub-domain name and in each twelve month period thereafter for the duration of the domain name registration.)

The registrant name can be altered to reflect that the domain is being used for a business operation rather then for personal use.

Registrant Name

When registering a domain with the legal type:

  1. Canadian Citizen, or
  2. Permanent Resident

The Registrant Name must be the FULL LEGAL NAME of the individual who will hold the domain name registration as the name would appear on a passport, drivers license or other identification document issued by a government.

Example: "John Doe".

The name may be followed by a space and "o/a xxxx" where "o/a" stands for "Operating As" and "xxxx" can be any alphanumeric string designated by the applicant. When registering the domain for a small business, or a non-incorporated business, the "xxxx" field should be used to indicate this business.

Example: "John Doe o/a Doe Consulting Group"

The name may be followed by a space and a degree granted to the registrant by a recognized degree granting institution or a recognized professional designation, which the registrant has the right to use (e.g. PhD, MD, DDS).

Once the domain is registered, you cannot easily change the registrant name, so please ensure that this name is correct.

Registrant Description

The registrant description is a free form field where additional information about the registrant or the purpose of the domain can be entered.

#, }, ); sub legal_type_list{ my $group = shift; unless (exists $legal_type_groups{$group}){ $group = 'all'; } my @list = map { { legal_type => $_, %{$legal_types{$_}}, } } @{$legal_type_groups{$group}{list}}; return (%{$legal_type_groups{$group}},list=>\@list); } sub municipal_format{ my $domain_name=shift; #4th level with previx and province return 1 if $domain_name =~ /^ ( city| ville| town| village| hamlet| hameau| municipality| municipalite ) \.([^.]+)\. ( ab|bc|mb|nb|nl|ns|nt|nu|on|pe|qc|sk|yk) \.ca$/xi; #2nd level only and real name is not a province return 1 if $domain_name =~ /^([^.]+)\.ca$/i and $1 !~ /^(ab|bc|mb|nb|nl|ns|nt|nu|on|pe|qc|sk|yk)$/i; return 0; } sub help_icon{ print "Content-type: image/gif\n\n", "GIF89a\24\0\24\0\263\16\0\373\347^\375\357\225\240\225&\371\336!\353\322\"UjPeY\r\301\255\36\373\342=\322\303/\31?b\335\304\35A:\b\207|\e\0\0\0\0\0\0!\371\4\1\0\0\16\0,\0\0\0\0\24\0\24\0\0\4\240\320\311\31\252\r`jz-\370\310&] b\226\233\207\$\205\342\26\2049\f\34\266\272\270\2\317\3042\332\203V\316%\230-\16\216\n\0001\313\tu\306\203\340\3\230\5\13\5\201\0W0\n\32 \353,1lx\301Kq\320I\360\32\226L\361\263h]4\f\246\270U\200m,\304\aw2jO\tV\4\a\6\fjcNu\r\f\f\16\13\13m3\a\216\3\13\2\212\22\a\a\224\226O\a\232\234\221\23Z\240\4\253\251=\246\222\32\r\262\2\237\265_\221\260\e\6\273\274\273\270\271\"\16\277\277\"\21\0;"; return (); } 1; opensrs-client-3.0.0/lib/RACE/0000755017777601777760000000000010770014215017015 5ustar nobodynogroup00000000000000opensrs-client-3.0.0/lib/RACE/CharlintK.storage0000644017777601777760000051224010770014205022265 0ustar nobodynogroup00000000000000pst0 230Ö™ 222Öš 220Ö› 230Öœ 230Ö 230Öž 118ຸ 230ÖŸ 118ູ 230Ö  230Ö¡ 24× 25ׂ 220Ö£ 220Ö¤ 230ׄ 220Ö¥ 220Ö¦ 220Ö§ 230Ö¨ 230Ö© 220Öª 230Ö« 230Ö¬ 222Ö­ 228Ö® 230Ö¯ 10Ö° 11Ö± 12Ö² 13Ö³ 14Ö´ 15Öµ 16Ö¶ 9à­ 17Ö· 18Ö¸ 19Ö¹ 20Ö» 21Ö¼ 22Ö½ 23Ö¿ 220༘ 220༙ 7଼ 220༵ 220༷ 216༹ 130ྀ 230ྂ 230ྃ 27Ù‹ 9྄ 28ÙŒ 29Ù 230྆ 30ÙŽ 230྇ 31Ù 32Ù 33Ù‘ 34Ù’ 230Ù“ 230Ù” 220Ù• 9௠129ཱ 130ི 132ུ 130ེ 130ཻ 130ོ 130ཽ 220࿆ 35Ù° 230Ì€ 230Ì 230Ì‚ 230̃ 230Ì„ 230Ì… 230̆ 230̇ 230̈ 230̉ 230ÌŠ 230Ì‹ 230ÌŒ 230Ì 230ÌŽ 230Ì 230Ì 230Ì‘ 230Ì’ 230Ì“ 9à± 230Û– 230Ì” 230Û— 232Ì• 230Û˜ 220Ì– 230Û™ 220Ì— 9្ 230Ûš 220̘ 230Û› 220Ì™ 230Ûœ 232Ìš 216Ì› 220Ìœ 84ౕ 230ÛŸ 220Ì 91à±– 230Û  220Ìž 7့ 230Û¡ 220ÌŸ 230Û¢ 220Ì  9္ 220Û£ 202Ì¡ 230Í€ 230Û¤ 202Ì¢ 230Í 220Ì£ 230Í‚ 220̤ 230̓ 220Ì¥ 230Í„ 230Û§ 220̦ 240Í… 230Û¨ 202̧ 230͆ 202̨ 220͇ 220Ûª 220Ì© 220͈ 230Û« 220̪ 220͉ 230Û¬ 220Ì« 230ÍŠ 220Û­ 220̬ 230Í‹ 230ÍŒ 220Ì­ 220Í 220Ì® 220ÍŽ 220̯ 220̰ 36Ü‘ 220̱ 220̲ 220̳ 1Ì´ 1̵ 1̶ 1Ì· 1̸ 220̹ 220̺ 220Ì» 220̼ 230̽ 230̾ 230Ì¿ 230Ý€ 230Ý 234Í  220Ý‚ 234Í¡ 233Í¢ 230݃ 220Ý„ 230Ý… 220݆ 230݇ 220݈ 230݉ 230ÝŠ 230ܰ 220ܱ 230ܲ 230ܳ 220Ü´ 230ܵ 230ܶ 220Ü· 9à³ 220ܸ 220ܹ 230ܺ 220Ü» 220ܼ 230ܽ 220ܾ 230Ü¿ 9ॠ230॑ 220॒ 230॓ 230॔ 7़ 228ᢩ 9ൠ9à§ 230⃠230⃑ 1⃒ 1⃓ 230⃔ 230⃕ 230⃖ 230⃗ 1⃘ 1⃙ 1⃚ 230⃛ 230⃜ 230Òƒ 230Ò„ 7় 230Ò… 230Ò† 230⃡ 218〪 228〫 232〬 222〭 224〮 224〯 9à·Š 230︠ 230︡ 230︢ 230︣ 9à© 8ã‚™ 8゚ 7਼ 107่ 107้ 107๊ 107๋ 103ุ 103ู 9ฺ 9à« 26ﬞ 7઼ 122່ 220Ö‘ 122້ 230Ö’ 122໊ 230Ö“ 122໋ 230Ö” 230Ö• 220Ö– 230Ö— 230Ö˜ CombClass– ≇≇ á½®Ὦ á¼¢ἢ ἤá¼ Ì ≮≮ ἃá¼Ì€ ᾨᾨ á¼…á¼Ì ᾚᾚ ᾋᾋ Ç´GÌ ÄœGÌ‚ ḠGÌ„ ḟḟ ÄžĞ á¸ḝ Ç­ǭ Ä Ġ ḔÄ’Ì€ ḖÄ’Ì ೋೋ á»’Ồ ǦGÌŒ ゲゲ á»Ã”Ì á»–Ỗ ÓªӪ á»”Ổ Ó­Ñ̈ ἦá¼ Í‚ ἇá¼Í‚ ệệ á¾á¼ Í… á¾á¼Í… ã¹ã¸ã‚™ ãºã¸ã‚š Ä¢Ģ ோோ ỀỀ ẾÃŠÌ ỄỄ Ó¯ӯ ὫὫ ỂỂ Ñžў á½­á½©Ì Ó±ӱ Ó³ӳ ⇎⇎ Å”RÌ ऱऱ ṘṘ ŘRÌŒ á¹¥ṥ ÈRÌ ÐŒÐšÌ È’RÌ‘ ≱≱ ὯὯ ὂὂ á¼£ἣ ῇῇ ὄá½€Ì á¼¥á¼¡Ì ≠≠ ∉∉ ᾩᾩ á¾›ᾛ ᾌᾌ ǵgÌ ÄgÌ‚ デデ ĤHÌ‚ ḡgÌ„ ṚRÌ£ ÄŸğ ãšã™ã‚™ Ä¡ġ Å–Ŗ ḢḢ ḦḦ ồồ ḕḕ ǧgÌŒ ốÃ´Ì ḗÄ“Ì á»—ỗ ṌÃ•Ì ÈžHÌŒ ȬȬ ṞṞ Ó«ӫ ổổ ṎṎ Ï“Ï’Ì ⊀⊀ ボボ â‰≁ ÓÐ̆ ãƒポ Ó’Ð̈ Ï”ϔ á¼§ἧ ᾑᾑ ᾂᾂ ḤHÌ£ Ä£ģ ḨḨ ヸヸ á»ề ếÃªÌ ヂãƒã‚™ á»…ễ ḪHÌ® ോോ ῺῺ ểể ÎÎ©Ì Û€Û•Ù” ЇЇ á¿‚á½´Í… Å•rÌ ジã‚·ã‚™ ÅšSÌ ÅœSÌ‚ á¹™ṙ ὨὨ ὩὩ á¹ Ṡ ǯÊ’ÌŒ Å™rÌŒ Å SÌŒ È‘rÌ È“rÌ‘ ÑœÐºÌ ῸῸ ÎŒÎŸÌ á½¢ὢ ゞã‚ã‚™ ὤá½ Ì ὃá½Ì€ ããã‚™ ῼῼ á½…á½Ì ≯≯ ᾪᾪ ᾜᾜ á¾á¼Í… Ä¥hÌ‚ ÃŒIÌ€ ÃIÌ á¹›rÌ£ ÃŽIÌ‚ ĨĨ á¹¢SÌ£ ĪIÌ„ ỪỪ Å—ŗ ỨÆ¯Ì ḣḣ ĬĬ ḧḧ ȘȘ ÅžŞ İİ ὈὈ á»®Ữ ÃÏ ὉὉ ỈỈ á¹ÃµÌ ÈŸhÌŒ ÇIÌŒ ỬỬ ã¥ã¤ã‚™ È­ȭ ṟṟ ȪȪ ȈIÌ á¹ṏ ÈŠIÌ‘ ῈῈ âŠ⊁ Ó‘ӑ ΈÎ•Ì Ó“ӓ ὦá½ Í‚ ἚἚ Ἔá¼˜Ì Û‚ÛÙ” á¾ á½ Í… á¾’ᾒ ᾃᾃ ೊೊ ḥhÌ£ ỊIÌ£ à§Œৌ ḩḩ á»°Ự Ä®Į ἘἘ á¼™Ἑ à§‹ো ḫhÌ® ẖẖ ḬḬ á½¼ὼ ೇೇ ೈೈ ÏŽÏ‰Ì ã‚®ã‚­ã‚™ ã ãŸã‚™ Å›sÌ ÅsÌ‚ ṡṡ á½ ὠ ὡὡ ṪṪ Å¡sÌŒ ŤTÌŒ ẦẦ ẤÃ‚Ì ẪẪ à·šේ ὸὸ ÏŒÎ¿Ì à·œෙ෠ẨẨ ⊈⊈ á¿¶ῶ á½£ὣ á½¥á½¡Ì ≉≉ ῳῳ ᾫᾫ á¾á¼­Í… ìiÌ€ íiÌ ᾎᾎ îiÌ‚ Ä©ĩ á¹£sÌ£ Ä´JÌ‚ Ä«iÌ„ ṬTÌ£ Ä­ĭ ừừ È™ș ÅŸş á½€ὀ ứÆ°Ì à·žෞ ïï á½ὁ ÈšȚ Å¢Ţ ữữ ỉỉ ÇiÌŒ á»­ử á¹°TÌ­ È«ȫ ȉiÌ È‹iÌ‘ á¹®Ṯ á½²ὲ έÎµÌ ゾゾ â‹ ⋠ ã°ã¯ã‚™ ã±ã¯ã‚š ἺἺ á¼¼á¼¸Ì á½§ὧ á¼›Ἓ á¼á¼™Ì ᾡᾡ ᾓᾓ Ø¢آ Ø£أ ᾄᾄ Ø¥إ ịiÌ£ įį á¼ἐ ἑἑ á»±ự ṸÅ¨Ì ヹヹ à­ˆୈ à­Œୌ ã–ã•ã‚™ ḭḭ à­‹ୋ á¿’ÏŠÌ€ ÎÏŠÌ ≴≴ â‹¢⋢ Ó´Ӵ á¼¾Ἶ ÙUÌ€ ÚUÌ ÛUÌ‚ ŨŨ ḸḸ ŪUÌ„ ṫṫ ŬŬ ẗẗ ÜÜ ỦỦ Å®UÌŠ Å¥tÌŒ ŰUÌ‹ ầầ Ç“UÌŒ ấÃ¢Ì ẫẫ È”UÌ È–UÌ‘ á¿῍ ῎á¾¿Ì ẩẩ ⊉⊉ á¿—ÏŠÍ‚ ∌∌ ƯUÌ› ᾬᾬ ᾞᾞ á¾á¼Í… ĵjÌ‚ á¹­tÌ£ ḰKÌ ỤUÌ£ á¹²Ṳ È›ț Å£ţ ŲŲ ῬῬ ã‚´ゴ ビビ ピピ á¹±tÌ­ ǰjÌŒ á¹¶UÌ­ ǾÃ˜Ì ǨKÌŒ ṯṯ á¹´Ṵ ЃÐ“Ì ῊῊ â‹¡⋡ á¿῏ ΉÎ—Ì á¼»Ἳ á¼½á¼¹Ì á¾¢ᾢ á¾”ᾔ á¾…á¼…Í… ÀAÌ€ ãŒã‹ã‚™ ÃAÌ ÂAÌ‚ ḲKÌ£ Ãà ĀAÌ„ ĶĶ Ä‚Ă á¹¹Å©Ì ἨἨ ȦȦ ÄÄ ἩἩ ẢẢ Ã…AÌŠ ÇAÌŒ È€AÌ ḴḴ È‚AÌ‘ á¿¢ῢ ΰÏ‹Ì ≵≵ â‹£⋣ Óµӵ á¼’á¼Ì€ ῌῌ ἿἿ á¼”á¼Ì ùuÌ€ úuÌ ûuÌ‚ Å©ũ Å«uÌ„ á¹¼Ṽ Å­ŭ ẠAÌ£ ḹḹ üü ḀAÌ¥ á»§ủ ůuÌŠ űuÌ‹ Ä„Ą Ç”uÌŒ ã¶ãµã‚™ ã·ãµã‚š ẰẰ ẮÄ‚Ì ã‚”ã†ã‚™ È•uÌ ẴẴ È—uÌ‘ á¿῝ ÇžǞ ῞á¿¾Ì ÓšӚ ẲẲ á¿§ῧ ưuÌ› Ó¦Ӧ á¾´ᾴ á¾­á½­Í… ᾟᾟ ↚â†Ì¸ ドド ḱkÌ ãœã›ã‚™ ĹLÌ ụuÌ£ á¹³ṳ á¹¾VÌ£ ȰȰ ųų ῤÏÌ“ á¿¥ÏÌ” Ç©kÌŒ Ç¿Ã¸Ì á¹·uÌ­ ĽLÌŒ á¹µṵ Ñ“Ð³Ì á½´ὴ ῟῟ ήÎ·Ì á½›Ὓ á½á½™Ì á¾£ᾣ ᾕᾕ àaÌ€ ؤÙˆÙ” áaÌ ᾆᾆ âaÌ‚ ḳkÌ£ ãã ÄaÌ„ ḶLÌ£ Ä·ķ ăă ヺヺ ȧȧ á¼ ἠ Ä»Ļ ää ἡἡ ḂḂ ảả Ã¥aÌŠ ÇŽaÌŒ ḮÃÌ ÈaÌ ḼLÌ­ ṺṺ ȃaÌ‘ ḵḵ ऩऩ ḺḺ ⋪⋪ ῆῆ ἲἲ ῃῃ á¼´á¼°Ì á¾·á¾¶Í… ἓἓ ὟὟ ἕá¼‘Ì ズズ ベベ ైై ペペ ẀWÌ€ ẂWÌ á¹½ṽ Å´WÌ‚ ạaÌ£ á¸aÌ¥ ḄBÌ£ Ä…ą ẆẆ ẄẄ ằằ ẛẛ ắÄƒÌ ǺÃ…Ì ṦṦ ẵẵ ÇŸǟ ḆḆ Ó›ӛ ⊭⊭ ẳẳ ã’ã‘ã‚™ Ó§ӧ á¼¶á¼°Í‚ á¾®ᾮ ĺlÌ ḾMÌ ṿvÌ£ ẈWÌ£ ȱȱ á¹€Ṁ ã§ã¦ã‚™ ľlÌŒ ЀЀ ῚῚ ΊÎ™Ì Ó–Ӗ á¿™Ῑ ÐЁ ῘῘ ∄∄ ᾤᾤ ΪΪ ã¼ã»ã‚™ ã½ã»ã‚š á¾–ᾖ ẬẬ ᾇᾇ ḷlÌ£ ĆCÌ ĈCÌ‚ ṂMÌ£ ẶẶ ļļ ḃḃ ṨṨ ÄŠĊ ἸἸ á¹Ṑ á¼¹Ἱ á¹’ÅŒÌ ḯÃ¯Ì ḽlÌ­ ÄŒCÌŒ á¹»ṻ ヾヾ ḻḻ ã‚°グ â‹«⋫ ã¢ã¡ã‚™ á½’á½Ì€ á¼³ἳ á½”á½Ì á¼µá¼±Ì ऴऴ áºwÌ€ ẃwÌ ŵwÌ‚ ḅbÌ£ ẇẇ ẅẅ ẊẊ ÇÇ ẌẌ ẘwÌŠ Ç»Ã¥Ì ǼÃ†Ì á¹§ṧ ḇḇ Ç¢Ǣ ⊮⊮ á¿„ῄ á½–á½Í‚ á¼·ἷ ἊἊ ᾯᾯ â‡â‡Ì¸ Ἄá¼ˆÌ ↛↛ ḿmÌ ǸNÌ€ ŃNÌ ẉwÌ£ ÑÑ á¹ṁ ṄṄ ŇNÌŒ Ñѐ ダã‚¿ã‚™ á½¶ὶ ίÎ¹Ì Ó—ӗ á¿‘ῑ Ñ‘ё ÓӁ ≢≢ á¿ῐ ÓœӜ ∤∤ ÏŠϊ á¾¥ᾥ ἎἎ á¾—á¼§Í… ï¬×™Ö´ ئÙŠÙ” ậậ ćcÌ ᾈᾈ ĉcÌ‚ ṃmÌ£ ṆNÌ£ ặặ Ç Ǡ Ä‹ċ á¼°ἰ ṩṩ ヅヅ á¼±ἱ Å…Ņ ḊḊ ṑÅÌ€ ã˜ã—ã‚™ ṓÅÌ ÄcÌŒ ÄŽDÌŒ ṊNÌ­ ṈṈ ⋬⋬ á¿–ῖ ≸≸ á¿·á¿¶Í… ὓὓ Ó¸Ӹ ὕá½‘Ì ỲYÌ€ ÃYÌ ŶYÌ‚ ỸỸ ḌDÌ£ ȲYÌ„ ẋẋ ỜỜ çç áºẍ ỚÆ Ì ẎẎ ŸŸ á¸Ḑ á» Ỡ á»¶Ỷ ǽÃ¦Ì á¿­῭ ḒDÌ­ ḈÃ‡Ì Î…Â¨Ì ỞỞ Ç£ǣ ḎḎ ῪῪ ÎŽÎ¥Ì ≭â‰Ì¸ á¿©Ῡ ἪἪ á¿´ÏŽÍ… Ἤá¼¨Ì ῨῨ á½—ὗ ἋἋ á¼á¼‰Ì ᾲᾲ ΫΫ ǹnÌ€ Å„nÌ Ã’OÌ€ ññ ÓOÌ ÔOÌ‚ ÕÕ á»´YÌ£ ÅŒOÌ„ ã‚¶ザ á¹…ṅ ÅŽŎ á½™Ὑ È®Ȯ ỢỢ ÖÖ ỎỎ ňnÌŒ ÅOÌ‹ Ç›Ǜ Ç—ÃœÌ Ç‘OÌŒ Ç•Ǖ á¿῁ ÈŒOÌ ÈŽOÌ‘ Ó‚ӂ Óӝ Ç™Ǚ ≄≄ ÓžӞ Æ OÌ› á¼®Ἦ ᾦᾦ ѶÑ´Ì á¼Ἇ ãŽãã‚™ ᾘᾘ ᾉᾉ ÈEÌ€ ṇnÌ£ ÉEÌ ÊEÌ‚ ỌOÌ£ Ç¡ǡ ẼẼ Ä’EÌ„ ņņ ḋḋ Ä”Ĕ Ä–Ė ËË ǪǪ ẺẺ ÄdÌŒ ṋnÌ­ ÄšEÌŒ ãƒãƒã‚™ ṉṉ パãƒã‚š È„EÌ à®”ஔ ȆEÌ‘ â‹­⋭ ᾺᾺ ≹≹ ΆÎ‘Ì Ó¹ӹ á¾¹Ᾱ ᾸᾸ ỳyÌ€ ýyÌ Å·yÌ‚ ŹZÌ à³€ೀ ỹỹ á¸dÌ£ ȳyÌ„ áºZÌ‚ ṜṜ ẸEÌ£ áºẏ á»ờ ÿÿ ḑḑ ௌௌ á»›Æ¡Ì Å»Ż á»·ỷ ȨȨ ẙyÌŠ ỡỡ ἈἈ ĘĘ ἉἉ à·ෝ ŽZÌŒ ḓdÌ­ ḉÃ§Ì ொொ ḘEÌ­ ởở á¸ḏ ḚḚ ⊯⊯ ὺÏ…Ì€ ÏÏ…Ì á¿¡Ï…Ì„ ὊὊ ἫἫ Ὄá½ˆÌ á¼­á¼©Ì ガã‚«ã‚™ á¿ ῠ Û“Û’Ù” á¾¼ᾼ â‡⇏ ãžãã‚™ Ï‹ϋ òoÌ€ ↮↮ ỘỘ óoÌ ôoÌ‚ õõ á¹”PÌ ỵyÌ£ ÅoÌ„ ẒZÌ£ Åŏ ȯȯ öö á½Ï…Ì“ ὑÏ…Ì” á¹–Ṗ á»ỏ ợợ Å‘oÌ‹ Çœǜ Ç’oÌŒ ǘÃ¼Ì Ç–ǖ ÈoÌ ÈoÌ‘ ã³ã²ã‚™ ÐЍ ẔẔ ã´ã²ã‚š Ó¢Ӣ Çšǚ ဦဦ ⊄⊄ ÓŸӟ ЙЙ Ñ—ї ῦÏ…Í‚ ∦∦ Ó¤Ӥ Æ¡oÌ› ἯἯ ἂἂ á¾§á½§Í… Ñ·ÑµÌ ἄá¼€Ì á¾™ᾙ èeÌ€ éeÌ ᾊᾊ êeÌ‚ á»oÌ£ ẽẽ Ä“eÌ„ ヴヴ Ä•ĕ Ä—ė ëë ḜḜ ǬǬ Ç«ǫ ḞḞ ẻẻ Ä›eÌŒ È…eÌ ȇeÌ‘ á½°ὰ άÎ±Ì á¾±ᾱ Ó¬Ӭ ゼゼ á¾°ᾰ ῲῲ ỆỆ ἆἆ źzÌ ẑzÌ‚ á¾€ᾀ ẹeÌ£ á¹ṝ żż È©ȩ á¼€ἀ Ä™ę á¼ἁ žzÌŒ ḙeÌ­ ヷヷ ൌൌ ḛḛ ã”ã“ã‚™ ൊൊ Ó®Ӯ á¾¶ᾶ ὪὪ ÐŽЎ Ὤá½¨Ì ὋὋ Ó°Ӱ á¾³ᾳ á½á½‰Ì Ó²Ӳ á»™á»Ì‚ ṕpÌ ẓzÌ£ ブブ ププ ã©ã¨ã‚™ á¹—ṗ Ñѝ ṤṤ ẕẕ ǮǮ Ó£ӣ ⊬⊬ йй ≰≰ ⊅⊅ Ó¥ӥCompCano üÌǘ ǙÇ™ ǚÇš ǛÇ› ǜÇœ ǞÇž ǟÇŸ ǠÇ  ǡÇ¡ AÌÈ€ ǢÇ¢ aÌÈ ǣÇ£ ȂȂ aÌ‘ȃ EÌÈ„ GÌŒǦ eÌÈ… gÌŒǧ EÌ‘Ȇ KÌŒǨ eÌ‘ȇ ǩǩ IÌȈ ǪǪ iÌȉ ǫÇ« ȊȊ ǬǬ ȋȋ ǭÇ­ OÌÈŒ ǮǮ oÌÈ Ê’ÌŒǯ ȎȎ jÌŒǰ oÌ‘È RÌÈ ୈà­ˆ rÌÈ‘ ȒȒ GÌÇ´ ȓȓ ୋà­‹ gÌǵ UÌÈ” ୌà­Œ uÌÈ• ȖȖ NÌ€Ǹ ȗȗ nÌ€ǹ ȘȘ AÌŠÌǺ șÈ™ aÌŠÌÇ» ȚÈš ÆÌǼ țÈ› æÌǽ ØÌǾ øÌÇ¿ ȞȞ ȟȟ ଡ଼à­œ ଢ଼à­ ȦȦ ȧȧ ȨȨ ȩÈ© ȪȪ ȫÈ« ȬȬ ȭÈ­ ȮÈ® ȯȯ ȰȰ ȱȱ YÌ„Ȳ yÌ„ȳ ஔà®” ொொ ோோ ௌௌ ైై 豈豈 æ›´ï¤ 車車 賈賈 滑滑 串串 å¥句 龜龜 ̀̀ 龜龜 ÌÍ 契契 金金 Ì“̓ å–‡喇 ̈ÌÍ„ 奈奈 懶ï¤ 癩癩 ç¾…ï¤ 蘿ï¤ 螺螺 裸裸 é‚邏 樂樂 æ´›洛 烙烙 çž珞 è½落 é…ª酪 é§±駱 亂亂 åµ卵 欄ï¤ 爛爛 蘭蘭 鸞鸞 鹿鹿 åµ嵐 è«–ï¥ æ¿«濫 è—藍 壟壟 襤襤 弄弄 拉拉 ç± 籠 臘臘 è¾聾 è Ÿ蠟 牢牢 廊廊 磊磊 朗朗 賂賂 浪浪 é›·雷 狼狼 壘壘 郎郎 å±¢屢 ¨ÌÎ… ΑÌΆ 來來 樓樓 ·· 冷冷 æ·šï¥ ΕÌΈ ೀà³€ 勞勞 æ¼漏 ΗÌΉ æ“„擄 ç´¯ï¥ ΙÌΊ æ«“櫓 縷ï¥ çˆ爐 é›»陋 ΟÌÎŒ ç›§盧 å‹’勒 è€老 è‚‹肋 Î¥ÌÎŽ 蘆蘆 凜凜 ΩÌÎ ೇೇ 虜虜 凌凌 ϊÌÎ ೈೈ è·¯路 稜稜 露露 ç¶¾綾 ೊೊ é­¯魯 è±菱 ೋೋ é·º鷺 陵陵 ʹÍ´ 碌碌 讀讀 祿祿 æ‹拏 ç¶ 綠 樂樂 è‰菉 諾ï¥ 錄錄 丹丹 寧寧 怒怒 率率 å‘‚呂 ç•°異 女ï¦ 北北 廬廬 ;; 磻磻 æ—…旅 便便 濾濾 復復 礪礪 ä¸不 é–­閭 泌泌 驪驪 數數 麗麗 ç´¢索 黎黎 åƒ參 力力 塞塞 曆曆 çœ省 æ­·歷 葉葉 è½¢ï¦ å¹´年 說說 æ†ï¦ 殺殺 ΪΪ 戀ï¦ è¾°辰 ϊÏŠ ΫΫ æ’š撚 沈沈 ϋÏ‹ αÌά æ¼£漣 拾拾 οÌÏŒ εÌέ ç…‰煉 è‹¥若 Ï…ÌÏ ηÌή ç’‰璉 掠掠 ωÌÏŽ ιÌί ç§Š秊 ç•¥略 ϋÌΰ ç·´練 亮亮 è¯聯 å…©兩 輦輦 凉凉 è“®蓮 æ¢梁 連連 ç³§糧 Ï’ÌÏ“ éŠ鍊 良良 ϔÏ” 列列 è«’諒 劣ï¦ é‡量 å’½咽 勵勵 烈烈 裂裂 燎ï§€ 說說 療ï§ 廉廉 蓼ï§‚ 念念 é¼遼 æ»捻 é¾ï§„ æ®®殮 暈ï§… ç°¾簾 阮阮 çµ獵 劉劉 令令 ЀЀ æ»杻 囹囹 ЁÐ 柳柳 寧寧 ГÌЃ æµï§Š 嶺嶺 溜ï§‹ 怜怜 ç‰ï§Œ 玲玲 ç•™ï§ ç‘©瑩 ЇЇ 羚羚 ç¡«ï§Ž è†聆 ç´ï§ 鈴鈴 類ï§ é›¶零 å…­ï§‘ КÌÐŒ éˆ靈 戮ï§’ ЍÐ é ˜領 陸ï§“ ЎÐŽ 例例 倫ï§” 禮禮 崙崙 醴醴 淪淪 隸隸 輪ï§— ൊൊ 惡惡 律律 了了 æ…„ï§™ ോോ 僚僚 æ —ï§š ൌൌ 寮寮 率ï§› å°¿尿 隆ï§œ æ–™料 利ï§ 樂樂 åï§ž 履履 ЙЙ 易ï§  æŽï§¡ 切切 梨ï§¢ 度ï¨ æ³¥ï§£ æ‹“拓 ç†理 ç³–糖 痢痢 å®…宅 ç½¹罹 æ´ž洞 è£ï§§ æš´暴 裡裡 è¼»輻 里ï§© 行行 離離 é™降 匿ï§« 見見 溺溺 廓廓 åï§­ å…€兀 ç‡ï§® å—€ï¨ ç’˜璘 藺藺 隣ï§± 塚ï¨ é±—ï§² 麟ï§³ æ™´晴 æž—ï§´ æ·‹ï§µ 臨ï§¶ 凞凞 ç«‹ï§· 猪猪 ѐÑ 笠笠 益益 ёÑ‘ ç²’ï§¹ 礼礼 ç‹€狀 神神 гÌÑ“ 炙炙 祥祥 識識 ç¦福 什ï§½ é–靖 茶ï§¾ ç²¾ï¨ їÑ— 刺ï§¿ ç¾½羽 йй 蘒蘒 諸諸 кÌÑœ ѝÑ ўÑž 逸逸 都都 飯飯 飼飼 館館 é¶´鶴 Ñ´ÌѶ ѵÌÑ· ӁÓ ේà·š ӂÓ‚ à·™à·à·œ à·™à·à·Šà· ෞà·ž Ð̆Ó ӑÓ‘ Ð̈Ó’ ӓÓ“ ӖÓ– ӗÓ— ӚÓš ӛÓ› ӜÓœ ӝÓ ӞÓž ӟÓŸ ӢÓ¢ ӣÓ£ ӤÓ¤ ӥÓ¥ ӦÓ¦ ӧÓ§ ӪÓª ӫÓ« ӬÓ¬ Ñ̈Ó­ ӮÓ® ӯÓ¯ ӰÓ° ӱÓ± ӲÓ² ӳÓ³ ӴÓ´ ӵÓµ ӸÓ¸ ӹÓ¹ ×™Ö´ï¬ ײַײַ נּנּ סּï­ ×£Ö¼ï­ƒ פּï­„ צּï­† קּקּ רּï­ˆ ש×שׁ שּï­‰ שׂשׂ תּï­Š שּ×שּׁ וֹï­‹ שּׂשּׂ בֿï­Œ ×Ö·אַ ×›Ö¿ï­ ×Ö¸אָ פֿï­Ž ×Ö¼אּ בּבּ ×’Ö¼גּ דּדּ ×”Ö¼הּ וּוּ ×–Ö¼זּ טּטּ ×™Ö¼יּ ךּךּ ×›Ö¼כּ לּלּ מּמּ གྷགྷ ཌྷའདྷདྷ བྷབྷ آØ¢ أØ£ ÙˆÙ”ؤ ཛྷཛྷ إØ¥ ÙŠÙ”ئ ཱྀྠཀྵཀྵ ཱཱིི ྒྷྒྷ ཱཱུུ ྲྀྲྀ ླྀླྀ ྜྷྠྡྷྡྷ ྦྷྦྷ ྫྷྫྷ à¾à¾µྐྵ Û•Ù”Û€ ÛÙ”Û‚ Û’Ù”Û“     †ΩΩ KK AÌŠâ„« â†Ì¸↚ ↛↛ ↮↮ â‡Ì¸⇠⇎⇎ ⇏⇠∄∄ ∉∉ ∌∌ ≁≠∤∤ ≄≄ ∦∦ ≇≇ ≉≉ ≠≠ ⊀⊀ ≢≢ ⊁⊠⊄⊄ ⊅⊅ ⊈⊈ ⊉⊉ â‰Ì¸≭ ≮≮ ≯≯ ≰≰ ≱≱ ≴≴ ≵≵ ≸≸ ≹≹ ⊬⊬ ⊭⊭ ⊮⊮ ⊯⊯ ⋠â‹  ⋡â‹¡ ⋢â‹¢ ⋣â‹£ ⋪⋪ ⋫â‹« ⋬⋬ ⋭â‹­ 〈〈 〉〉 AÌ¥Ḁ aÌ¥ḠḂḂ ḃḃ BÌ£Ḅ bÌ£ḅ ḆḆ ḇḇ ÇÌḈ çÌḉ ḊḊ ḋḋ DÌ£Ḍ dÌ£ḠḎḎ ḏḠḐḠḑḑ DÌ­Ḓ dÌ­ḓ ḔḔ ḕḕ EÌ„ÌḖ eÌ„Ìḗ EÌ­Ḙ eÌ­ḙ ḚḚ ḛḛ ḜḜ ḝḠḞḞ ḟḟ GÌ„Ḡ Ṁá¹€ gÌ„ḡ ṁá¹ ḢḢ MÌ£Ṃ ḣḣ mÌ£ṃ HÌ£Ḥ ṄṄ hÌ£ḥ ṅá¹… ḦḦ NÌ£Ṇ ḧḧ nÌ£ṇ ḨḨ ṈṈ ḩḩ ṉṉ HÌ®Ḫ NÌ­Ṋ hÌ®ḫ nÌ­ṋ ḬḬ ÕÌṌ ḭḭ õÌá¹ ÏÌḮ ṎṎ ïÌḯ ṏá¹ KÌḰ Ṑá¹ kÌḱ ṑṑ KÌ£Ḳ OÌ„Ìá¹’ kÌ£ḳ oÌ„Ìṓ ḴḴ PÌá¹” ḵḵ pÌṕ LÌ£Ḷ Ṗá¹– lÌ£ḷ ṗá¹— ḸḸ ṘṘ ḹḹ ṙá¹™ ḺḺ RÌ£Ṛ ḻḻ ṛṛ LÌ­Ḽ ṜṜ lÌ­ḽ ṝá¹ MÌḾ ṞṞ mÌḿ ṟṟ Ṡá¹  ṡṡ WÌ€Ẁ ṢṢ wÌ€Ạṣṣ WÌẂ SÌ̇Ṥ wÌẃ sÌ̇á¹¥ ẄẄ ṦṦ ẅẅ ṧá¹§ ẆẆ ṨṨ ẇẇ ṩṩ WÌ£Ẉ ṪṪ wÌ£ẉ ṫṫ ẊẊ TÌ£Ṭ ẋẋ ṭṭ ẌẌ Ṯá¹® ẍẠṯṯ ẎẎ TÌ­á¹° ẏẠtÌ­á¹± ZÌ‚ẠṲá¹² zÌ‚ẑ ṳá¹³ ZÌ£Ẓ Ṵá¹´ zÌ£ẓ ṵá¹µ ẔẔ UÌ­á¹¶ ẕẕ uÌ­á¹· ẖẖ ŨÌṸ ẗẗ ũÌá¹¹ wÌŠẘ ṺṺ yÌŠẙ ṻá¹» Ṽá¹¼ ẛẛ ṽá¹½ ṾṾ vÌ£ṿ AÌ£Ạ aÌ£ạ ỀỀ ẢẢ ềá» ảả ỂỂ AÌ‚ÌẤ ểể aÌ‚Ìấ ỄỄ ẦẦ ễá»… ầầ ỆỆ ẨẨ ệệ ẩẩ ỈỈ ẪẪ ỉỉ ẫẫ IÌ£Ị ẬẬ iÌ£ị ậậ OÌ£Ọ ĂÌẮ ọỠăÌắ ỎỎ ẰẰ ỏá» ằằ OÌ‚Ìá» ẲẲ oÌ‚Ìố ẳẳ Ồá»’ ẴẴ ồồ ẵẵ Ổá»” ẶẶ ổổ ặặ Ỗá»– EÌ£Ẹ ỗá»— eÌ£ẹ ỘỘ ẺẺ ộá»™ ẻẻ OÌ›ÌỚ ẼẼ oÌ›Ìá»› ẽẽ ỜỜ EÌ‚ÌẾ ờá» eÌ‚Ìế ỞỞ ởở Ỡá»  ỡỡ ἀá¼€ ỢỢ ἁá¼ ợợ ἂἂ UÌ£Ụ ἃἃ uÌ£ụ ἀÌἄ ỦỦ ἁÌá¼… ủá»§ ἆἆ UÌ›ÌỨ ἇἇ uÌ›Ìứ ἈἈ ỪỪ ἉἉ ừừ ἊἊ ỬỬ ἋἋ ửá»­ ἈÌἌ Ữá»® ἉÌá¼ ữữ ἎἎ Ựá»° Ἇá¼ ựá»± ἐá¼ YÌ€Ỳ ἑἑ yÌ€ỳ ἒá¼’ ỴỴ ἓἓ yÌ£ỵ ἐÌá¼” Ỷá»¶ ἑÌἕ ỷá»· ỸỸ ỹỹ ἘἘ Ἑá¼™ ἚἚ Ἓá¼› ἘÌἜ ἙÌá¼ ἠá¼  ἡἡ ὀá½€ ἢá¼¢ ὁá½ ἣá¼£ ὂὂ ἠÌἤ ὃὃ ἡÌá¼¥ ὀÌὄ ἦἦ ὁÌá½… ἧá¼§ ἨἨ ἩἩ ὈὈ ἪἪ ὉὉ ἫἫ ὊὊ ဦဦ ἨÌἬ ὋὋ ἩÌá¼­ ὈÌὌ Ἦá¼® ὉÌá½ ἯἯ ἰá¼° ἱá¼± ὐὠἲá¼² Ï…Ì”ὑ ἳá¼³ ὒá½’ ἰÌá¼´ ὓὓ ἱÌá¼µ Ï…Ì“Ìá½” ἶá¼¶ Ï…Ì”Ìὕ ἷá¼· ὖá½– ἸἸ ὗá½— Ἱá¼¹ ἺἺ Ὑá½™ Ἳá¼» ἸÌá¼¼ Ὓá½› ἹÌá¼½ Ἶá¼¾ ὙÌá½ ἿἿ ὟὟ ὠá½  ὡὡ ᾀá¾€ ὢá½¢ ᾁá¾ ὣá½£ ᾂᾂ ὠÌὤ ᾃᾃ ὡÌá½¥ ἀÌÍ…ᾄ ὦὦ ἁÌÍ…á¾… ὧá½§ ᾆᾆ ὨὨ ᾇᾇ ὩὩ ᾈᾈ ὪὪ ᾉᾉ ὫὫ ᾊᾊ ὨÌὬ ᾋᾋ ὩÌá½­ ἈÌÍ…ᾌ Ὦá½® ἉÌÍ…á¾ ὯὯ ᾎᾎ ὰá½° ᾏá¾ αÌá½± ᾐá¾ ὲá½² ᾑᾑ εÌá½³ ᾒá¾’ ὴá½´ ᾓᾓ ηÌá½µ ἠÌÍ…á¾” ὶá½¶ ἡÌÍ…ᾕ ιÌá½· ᾖá¾– ὸὸ ᾗá¾— οÌá½¹ ᾘᾘ Ï…Ì€ὺ ᾙá¾™ Ï…Ìá½» ᾚᾚ ὼá½¼ ᾛá¾› ωÌá½½ ἨÌÍ…ᾜ ἩÌÍ…á¾ ᾞᾞ ᾟᾟ ᾠá¾  ᾡᾡ ᾢá¾¢ ῁á¿ ᾣá¾£ ῂá¿‚ ὠÌÍ…ᾤ ῃῃ ὡÌÍ…á¾¥ ηÌÍ…á¿„ ᾦᾦ ᾧá¾§ ῆῆ ᾨᾨ ῇῇ ᾩᾩ ῈῈ ᾪᾪ ΕÌΈ ᾫᾫ ῊῊ ὨÌÍ…ᾬ ΗÌá¿‹ ὩÌÍ…á¾­ ῌῌ ᾮá¾® ῍á¿ ᾯᾯ ᾿Ì῎ ᾰá¾° ῏á¿ ᾱá¾± ῐá¿ ᾲá¾² ῑá¿‘ ᾳá¾³ ῒá¿’ αÌÍ…á¾´ ϊÌá¿“ ᾶá¾¶ ᾷá¾· ῖá¿– ᾸᾸ ῗá¿— Ᾱá¾¹ ῘῘ ᾺᾺ Ῑá¿™ ΑÌá¾» ῚῚ ᾼá¾¼ ΙÌá¿› ῝á¿ ιá¾¾ ῾Ì῞ ῟῟ ῠá¿  ῡῡ ῢá¿¢ ϋÌá¿£ ÏÌ“ῤ Ï̔ῥ Ï…Í‚ῦ ῧá¿§ ῨῨ Ῡá¿© ῪῪ Î¥Ìá¿« ῬῬ ῭á¿­ ¨Ìá¿® `` ऩऩ ῲῲ ῳῳ ωÌÍ…á¿´ ῶá¿¶ ῷá¿· ऱऱ ῸῸ ΟÌΌ ῺῺ ऴऴ ΩÌá¿» ῼῼ ´´ क़क़ ख़ख़ ग़ग़ ज़ज़ ड़ड़ ढ़ॠफ़फ़ य़य़ োà§‹ ৌà§Œ AÌ€À AÌà AÌ‚ Ãà ড়à§œ ÄÄ ঢ়à§ AÌŠÃ… য়à§Ÿ ÇÇ EÌ€È EÌÉ EÌ‚Ê ËË ÌÌ IÌà ã‹ã‚™㌠ÎÎ Ïà ãã‚™㎠ÑÑ ãã‚™ã ÒÒ OÌÓ ã‘゙㒠OÌ‚Ô ÕÕ ã“゙㔠ÖÖ ã•゙㖠UÌ€Ù ã—ã‚™㘠UÌÚ UÌ‚Û ã™ã‚™ãš ÜÜ YÌà ã›ã‚™㜠ã゙㞠aÌ€à aÌá ĀĀ ãŸã‚™ã  aÌ‚â aÌ„Ä ãã ĂÄ‚ ã¡ã‚™㢠ää ăă aÌŠÃ¥ ĄÄ„ ąÄ… ã¤ã‚™㥠çç CÌĆ eÌ€è cÌć ã¦ã‚™ã§ eÌé CÌ‚Ĉ eÌ‚ê cÌ‚ĉ ã¨ã‚™ã© ëë ĊÄŠ iÌ€ì ċÄ‹ iÌí ČČ iÌ‚î cÌŒÄ ïï ĎĎ dÌŒÄ ññ ã¯ã‚™ã° oÌ€ò ã¯ã‚šã± oÌó ĒĒ oÌ‚ô ēē ã²ã‚™ã³ õõ ĔÄ” ã²ã‚šã´ öö ĕÄ• ã†ã‚™ã‚” ĖÄ– ãµã‚™ã¶ ėÄ— ãµã‚šã· uÌ€ù ĘĘ uÌú ęÄ™ ã¸ã‚™ã¹ uÌ‚û ĚĚ ਲ਼ਲ਼ ã¸ã‚š㺠üü ěě yÌý ĜĜ ਸ਼ਸ਼ ã»ã‚™ã¼ gÌ‚Ä ã»ã‚šã½ ÿÿ ĞÄž ğÄŸ ã‚ã‚™ゞ ĠÄ  ġÄ¡ ਖ਼à©™ ĢÄ¢ ਗ਼ਗ਼ ã‚¿ã‚™ダ ģÄ£ ਜ਼à©› HÌ‚Ĥ NÌŃ ãƒã‚™ヂ ĥĥ nÌÅ„ ŅÅ… ਫ਼ਫ਼ ņņ ヅヅ ĨĨ NÌŒŇ ĩÄ© nÌŒň デデ IÌ„Ī īī ドド ĬĬ ĭÄ­ ŌŌ ã‚«ã‚™ガ ĮÄ® ōŠįį ŎÅŽ ギギ İİ ŏÅ ŐŠグã‚° őő ãƒã‚™ムãƒã‚šパ ゲゲ ĴĴ jÌ‚ĵ RÌÅ” ビビ ゴã‚´ ĶĶ rÌÅ• ピピ ķÄ· ŖÅ– ザã‚¶ ŗÅ— ブブ LÌĹ RÌŒŘ ププ ã‚·ã‚™ジ lÌĺ řř ĻÄ» SÌÅš ベベ ズズ ļļ sÌÅ› ペペ LÌŒĽ ŜŜ ゼゼ lÌŒľ ŝŠボボ ŞÅž ポムゾゾ şÅŸ ŠŠ šš ŢÅ¢ ţÅ£ TÌŒŤ ťť ŨŨ ũÅ© UÌ„Ū ūū ŬŬ ŭÅ­ UÌŠÅ® uÌŠů UÌ‹Ű uÌ‹ű ŲŲ ųų ŴŴ wÌ‚ŵ ヴヴ YÌ‚Ŷ ŷŷ ŸŸ ヷヷ ZÌŹ ヸヸ zÌź ヹヹ ŻÅ» ヺヺ żż ZÌŒŽ zÌŒž ヾヾ ƠƠ ơơ AÌŒÇ ǎǎ UÌ›Ư IÌŒÇ uÌ›ư iÌŒÇ ǑǑ ǒǒ ǓǓ ǔǔ ǕÇ• ǖÇ– ÜÌÇ—DecoCano › ᅨㅖ ᄃã„· á…©ã…— á„„ㄸ ᅪㅘ á„…ㄹ á…«ã…™ ᆰㄺ ᅬㅚ ᆱã„» á…­ã…› ᆲㄼ ᅮㅜ ᆳㄽ á…¯ã… ᆴㄾ á…°ã…ž ᆵã„¿ ᅱㅟ ᅲㅠ á…‡ㆀ ᅳㅡ á…Œㆠá…´ã…¢ ᇱㆂ ᅵㅣ ᇲㆃ á… ã…¤ á…—ㆄ ᄔㅥ á…˜ㆅ á„•ã…¦ á…™ㆆ ᇇã…§ ᆄㆇ ᇈã…¨ ᆅㆈ ᇌã…© ᆈㆉ ᇎã…ª ᆑㆊ ᇓã…« ᆒㆋ ᇗã…¬ ᆔㆌ ᇙã…­ ᆞㆠᄜã…® ᆡㆎ á‡ã…¯ ᇟã…° á„ã…± ᄞã…² 一㆒ á„ ã…³ 二㆓ ᄢㅴ 三㆔ ᄣㅵ å››㆕ á„§ã…¶ 上㆖ á„©ã…· 中㆗ á„«ã…¸ 下㆘ ᄬã…¹ 甲㆙ á„­ã…º ä¹™㆚ ᄮㅻ 丙㆛ ᄯã…¼ ä¸㆜ ᄲã…½ 天ㆠá„¶ã…¾ 地㆞ ᅀㅿ 人㆟ (á„€)㈀ (á„‚)㈠(ᄃ)㈂ (á„…)㈃ (ᄆ)㈄ (ᄇ)㈅ (ᄉ)㈆ (á„‹)㈇ (ᄌ)㈈ (ᄎ)㈉ (á„)㈊ (á„)㈋ (á„‘)㈌ (á„’)㈠(가)㈎ (á„‚á…¡)㈠(다)㈠(á„…á…¡)㈑ (마)㈒ (바)㈓ (사)㈔ (á„‹á…¡)㈕ (자)㈖ (차)㈗ (á„á…¡)㈘ (á„á…¡)㈙ (á„‘á…¡)㈚ (á„’á…¡)㈛ (주)㈜ (一)㈠ (祭)㉀ (二)㈡ (休)㉠(三)㈢ (自)㉂ (å››)㈣ (至)㉃ (五)㈤ (å…­)㈥ (七)㈦ (å…«)㈧ (ä¹)㈨ (å)㈩ (月)㈪ (ç«)㈫ (æ°´)㈬ (木)㈭ (金)㈮ (土)㈯ (æ—¥)㈰ (æ ª)㈱ (有)㈲ (社)㈳ (å)㈴ (特)㈵ (財)㈶ (ç¥)㈷ (労)㈸ (代)㈹ (呼)㈺ (å­¦)㈻ (監)㈼ (ä¼)㈽ (資)㈾ (å”)㈿ á„€㉠ 一㊀ á„‚㉡ 二㊠ᄃ㉢ 三㊂ á„…㉣ å››㊃ ᄆ㉤ 五㊄ ᄇ㉥ å…­㊅ ᄉ㉦ 七㊆ á„‹㉧ å…«㊇ ᄌ㉨ ä¹㊈ ᄎ㉩ å㊉ á„㉪ 月㊊ á„㉫ ç«㊋ á„‘㉬ æ°´㊌ á„’㉭ 木㊠가㉮ 金㊎ á„‚á…¡㉯ 土㊠다㉰ æ—¥㊠á„…á…¡㉱ æ ª㊑ 마㉲ 有㊒ 바㉳ 社㊓ 사㉴ å㊔ á„‹á…¡㉵ 特㊕ 자㉶ 財㊖ 차㉷ ç¥㊗ á„á…¡㉸ 労㊘ á„á…¡㉹ 秘㊙ á„‘á…¡㉺ ç”·㊚ á„’á…¡㉻ 女㊛ é©㊜ 優㊠å°㊞ 注㊟ é …㊠ 1月ã‹€ 休㊡ 2月ã‹ 写㊢ 3月ã‹‚ æ­£㊣ 4月㋃ 上㊤ 5月ã‹„ 中㊥ 6月ã‹… 下㊦ 7月㋆ å·¦㊧ 8月㋇ å³㊨ 9月㋈ 医㊩ 10月㋉ å®—㊪ 11月㋊ å­¦㊫ 12月ã‹‹ 監㊬ ä¼㊭ 資㊮ å”㊯ 夜㊰ ア㋠イã‹‘ ウã‹’ エã‹“ オã‹” ã‚«ã‹• ã‚­ã‹– クã‹— ケ㋘ コã‹™ サ㋚ ã‚·ã‹› ス㋜ セ㋠ソ㋞ ã‚¿㋟ ãƒã‹  ã‚¢ãƒã‚šãƒ¼ãƒˆ㌀ ツã‹¡ アルファ㌠テã‹¢ アンペア㌂ トã‹£ アール㌃ ナ㋤ イニング㌄ ニã‹¥ インãƒ㌅ ヌ㋦ ウォン㌆ ãƒã‹§ エスクード㌇ ノ㋨ エーカー㌈ ãƒã‹© オンス㌉ ヒ㋪ オーム㌊ フã‹« カイリ㌋ ヘ㋬ カラット㌌ ホã‹­ カロリー㌠マã‹® ガロン㌎ ミ㋯ ガンマ㌠ムã‹° ギガ㌠メ㋱ ギニー㌑ モ㋲ キュリー㌒ ヤ㋳ ギルダー㌓ ユã‹´ キロ㌔ ヨ㋵ キログラム㌕ ラã‹¶ キロメートル㌖ リã‹· キロワット㌗ ル㋸ グラム㌘ レ㋹ グラムトン㌙ ロ㋺ クルゼイロ㌚ ワã‹» クローãƒ㌛ ヰ㋼ ケース㌜ ヱ㋽ コルナ㌠ヲ㋾ コーポ㌞ サイクル㌟ サンãƒãƒ¼ãƒ ㌠ ポンド〠シリング㌡ ホールã センãƒ㌢ ホーン゠セント㌣ マイクロムダース㌤ マイルㄠデシ㌥ マッãƒã… ドル㌦ マルクㆠトン㌧ マンション㇠ナノ㌨ ミクロン㈠ノット㌩ ミリ㉠ãƒã‚¤ãƒ„㌪ ミリãƒã‚™ãƒ¼ãƒ«㊠ãƒã‚šãƒ¼ã‚»ãƒ³ãƒˆ㌫ メガã‹ ãƒã‚šãƒ¼ãƒ„㌬ メガトン㌠ãƒã‚™ãƒ¼ãƒ¬ãƒ«㌭ メートルã ピアストル㌮ ヤード㎠ピクル㌯ ヤールã ピコ㌰ ユアンã ビル㌱ リットルã‘ ファラッド㌲ リラ㒠フィート㌳ ルピーã“ ブッシェル㌴ ルーブル㔠フラン㌵ レムã• ヘクタール㌶ レントゲン㖠ペソ㌷ ワット㗠ペニヒ㌸ 0点㘠ヘルツ㌹ 1点㙠ペンス㌺ 2点ãš ページ㌻ 3点㛠ベータ㌼ 4点㜠ポイント㌽ 5点ã ボルト㌾ 6点ãž ホン㌿ 7点㟠8点ã  pA㎀ 9点ã¡ nA㎠10点㢠μA㎂ 11点㣠mA㎃ 12点㤠kA㎄ 13点㥠KB㎅ 14点㦠MB㎆ 15点ã§ GB㎇ 16点㨠cal㎈ 17点ã© kcal㎉ 18点㪠pF㎊ 19点ã« nF㎋ 20点㬠μF㎌ 21点ã­ μg㎠22点ã® mg㎎ 23点㯠kg㎠24点ã° Hz㎠hPaã± kHz㎑ daã² MHz㎒ AUã³ GHz㎓ barã´ THz㎔ oVãµ μl㎕ pcã¶ ml㎖ dl㎗ kl㎘ fm㎙ nm㎚ å¹³æˆã» μm㎛ 昭和ã¼ mm㎜ 大正ã½ cm㎠明治ã¾ km㎞ æ ªå¼ä¼šç¤¾ã¿ mm2㎟ cm2㎠ kΩ〠m2㎡ MΩã km2㎢ a.m.ã‚ mm3㎣ Bqムcm3㎤ ccã„ m3㎥ cdã… km3㎦ C∕kgㆠm∕s㎧ Co.㇠m∕s2㎨ dB㈠Pa㎩ Gy㉠kPa㎪ ha㊠MPa㎫ HPã‹ GPa㎬ in㌠rad㎭ KKã rad∕s㎮ KM㎠rad∕s2㎯ ktã ps㎰ lmã ns㎱ lnã‘ μs㎲ logã’ ms㎳ lxã“ pV㎴ mbã” nV㎵ milã• μV㎶ molã– mV㎷ PHã— kV㎸ p.m.㘠MV㎹ PPMã™ pW㎺ PRãš nW㎻ srã› μW㎼ Sv㜠mW㎽ Wbã kW㎾ MW㎿ 1æ—¥ã  2日㡠3æ—¥㢠4æ—¥㣠5æ—¥㤠6æ—¥㥠7æ—¥㦠8日㧠9æ—¥㨠10日㩠11æ—¥㪠12日㫠13æ—¥㬠14日㭠15日㮠16æ—¥㯠17日㰠18日㱠19日㲠20日㳠21日㴠22日㵠23日㶠24日㷠25æ—¥㸠26日㹠27æ—¥㺠28日㻠29日㼠30日㽠31日㾠æ¯⺟ 一â¼€ 丨â¼ 丶⼂ 丿⼃ ä¹™⼄ 亅â¼… 二⼆ 亠⼇ 人⼈ å„¿⼉ å…¥⼊ å…«⼋ 冂⼌ 冖â¼ 冫⼎ 几â¼ 凵â¼ 刀⼑ 力â¼’ 龟⻳ 勹⼓ 匕â¼” 匚⼕ 匸â¼– åâ¼— åœ⼘ å©â¼™ 厂⼚ 厶â¼› åˆ⼜ å£â¼ å›—⼞ 土⼟ 士â¼  支â½€ 夂⼡ æ”´â½ 夊â¼¢ æ–‡⽂ 夕â¼£ æ–—⽃ 大⼤ æ–¤⽄ 女â¼¥ 方⽅ å­⼦ æ— ⽆ 宀â¼§ æ—¥⽇ 寸⼨ æ›°⽈ å°⼩ 月⽉ å°¢⼪ 木⽊ å°¸⼫ 欠⽋ å±®⼬ æ­¢⽌ 山⼭ 歹⽠巛⼮ 殳⽎ å·¥⼯ 毋⽠己⼰ 比⽠巾⼱ 毛⽑ 干⼲ æ°â½’ 幺â¼³ æ°”⽓ 广â¼´ æ°´â½” å»´â¼µ ç«⽕ 廾â¼¶ 爪â½– 弋â¼· 父â½— 弓⼸ 爻⽘ å½â¼¹ 爿â½™ 彡⼺ 片⽚ 彳⼻ 牙â½› 心â¼¼ 牛⽜ 戈â¼½ 犬â½ 戶â¼¾ 玄⽞ 手⼿ 玉⽟ 瓜â½  è¿â¾€ 瓦⽡ 肉â¾ 甘â½¢ 臣⾂ 生â½£ 自⾃ 用⽤ 至⾄ ç”°â½¥ 臼â¾… ç–‹⽦ 舌⾆ ç–’â½§ 舛⾇ ç™¶⽨ 舟⾈ 白⽩ 艮⾉ çš®⽪ 色⾊ çš¿⽫ 艸⾋ ç›®⽬ è™⾌ 矛â½­ 虫â¾ 矢â½® è¡€⾎ 石⽯ 行â¾ 示â½° 衣⾠禸â½± 襾⾑ 禾â½² 見â¾’ ç©´â½³ è§’⾓ ç«‹â½´ 言â¾” 竹â½µ è°·⾕ 米⽶ 豆â¾– 糸â½· 豕â¾— ç¼¶⽸ 豸⾘ 网â½¹ è²â¾™ 羊⽺ 赤⾚ 羽⽻ èµ°â¾› è€â½¼ è¶³⾜ 而â½½ 身â¾ 耒â½¾ 車⾞ 耳⽿ è¾›⾟ è¾°â¾  鬲â¿€ è¾µ⾡ 鬼â¿ é‚‘â¾¢ é­šâ¿‚ 酉⾣ é³¥⿃ 釆⾤ 鹵⿄ 里â¾¥ 鹿â¿… 金⾦ 麥⿆ é•·â¾§ 麻⿇ é–€⾨ 黃⿈ 阜⾩ é»⿉ éš¶⾪ 黑⿊ éš¹⾫ 黹â¿‹ 雨⾬ 黽⿌ é‘â¾­ 鼎â¿ éžâ¾® 鼓⿎ é¢⾯ é¼ â¿ é©â¾° 鼻⿠韋â¾± 齊â¿‘ 韭â¾² é½’â¿’ 音â¾³ é¾â¿“ é â¾´ 龜â¿” 風â¾µ é¾ â¿• 飛â¾¶ 食â¾· 首⾸ 香â¾¹ 馬⾺ 骨â¾» 高â¾¼ 髟â¾½ 鬥â¾¾ 鬯⾿ ဦဦ ऩऩ ऱऱ ऴऴ क़क़ ख़ख़ ग़ग़ ज़ज़ ड़ड़ ढ़ॠफ़फ़ य़य़ োà§‹ ৌà§Œ    AÌ€À AÌà AÌ‚ ড়à§œ Ãà ঢ়à§ ÄÄ AÌŠÃ… য়à§Ÿ  ̈¨ ÇÇ EÌ€È aª EÌÉ EÌ‚Ê ËË ÌÌ IÌà  Ì„¯ ÎÎ Ïà 2² ÑÑ 3³ ÒÒ  Ì´ OÌÓ μµ OÌ‚Ô ÕÕ ÖÖ  ̧¸ 1¹ UÌ€Ù oº UÌÚ UÌ‚Û 1â„4¼ ÜÜ 1â„2½ YÌà 3â„4¾ aÌ€à ĀĀ aÌá aÌ„Ä aÌ‚â ĂÄ‚ ãã ăă ää ĄÄ„ aÌŠÃ¥ ąÄ… CÌĆ çç cÌć eÌ€è CÌ‚Ĉ eÌé cÌ‚ĉ eÌ‚ê ĊÄŠ ëë ċÄ‹ iÌ€ì ČČ iÌí cÌŒÄ iÌ‚î ĎĎ ïï dÌŒÄ ññ oÌ€ò ĒĒ oÌó ēē oÌ‚ô ĔÄ” õõ ĕÄ• öö ĖÄ– ėÄ— ĘĘ uÌ€ù ęÄ™ uÌú ਲ਼ਲ਼ ĚĚ uÌ‚û ěě üü ਸ਼ਸ਼ ĜĜ yÌý gÌ‚Ä ĞÄž ÿÿ ğÄŸ ĠÄ  ਖ਼à©™ l·Å€ ġÄ¡ ਗ਼ਗ਼ ĢÄ¢ ਜ਼à©› ģÄ£ NÌŃ HÌ‚Ĥ nÌÅ„ ĥĥ ਫ਼ਫ਼ ŅÅ… ņņ ĨĨ NÌŒŇ ĩÄ© nÌŒň IÌ„Ī ʼnʼn īī ĬĬ ĭÄ­ ŌŌ ĮÄ® ōŠįį ŎÅŽ İİ ŏÅ ŐŠIJIJ őő ijij ĴĴ jÌ‚ĵ RÌÅ” ĶĶ rÌÅ• ķÄ· ŖÅ– ŗÅ— LÌĹ RÌŒŘ lÌĺ řř ĻÄ» SÌÅš ļļ sÌÅ› LÌŒĽ ŜŜ lÌŒľ ŝŠL·Ä¿ ŞÅž şÅŸ ŠŠ šš ŢÅ¢ ţÅ£ TÌŒŤ ťť ŨŨ ũÅ© UÌ„Ū ūū ŬŬ ŭÅ­ UÌŠÅ® uÌŠů UÌ‹Ű uÌ‹ű ŲŲ ųų ŴŴ wÌ‚ŵ YÌ‚Ŷ ŷŷ ŸŸ ZÌŹ zÌź ŻÅ» żż ZÌŒŽ zÌŒž sÅ¿ ƠƠ ơơ DŽDŽ DžDž dzÌŒdž LJLJ LjLj ljlj NJÇŠ NjÇ‹ njÇŒ AÌŒÇ UÌ›Ư ǎǎ uÌ›ư IÌŒÇ iÌŒÇ ǑǑ ǒǒ ǓǓ ǔǔ ǕÇ• ǖÇ– ÜÌÇ— üÌǘ ǙÇ™ ǚÇš ǛÇ› ǜÇœ ǞÇž ǟÇŸ ǠÇ  ǡÇ¡ AÌÈ€ ǢÇ¢ aÌÈ ǣÇ£ ȂȂ aÌ‘ȃ EÌÈ„ GÌŒǦ eÌÈ… gÌŒǧ EÌ‘Ȇ KÌŒǨ eÌ‘ȇ ǩǩ IÌȈ ǪǪ iÌȉ ǫÇ« ȊȊ ǬǬ ȋȋ ǭÇ­ OÌÈŒ ǮǮ oÌÈ Ê’ÌŒǯ ȎȎ jÌŒǰ oÌ‘È DZDZ RÌÈ ୈà­ˆ DzDz rÌÈ‘ dzdz ȒȒ GÌÇ´ ȓȓ ୋà­‹ gÌǵ UÌÈ” ୌà­Œ uÌÈ• ȖȖ NÌ€Ǹ ȗȗ nÌ€ǹ ȘȘ AÌŠÌǺ șÈ™ aÌŠÌÇ» ȚÈš ÆÌǼ țÈ› æÌǽ ØÌǾ øÌÇ¿ ȞȞ ȟȟ ଡ଼à­œ ଢ଼à­ ȦȦ ȧȧ ȨȨ ȩÈ© ȪȪ ȫÈ« ȬȬ ȭÈ­ ȮÈ® ȯȯ ȰȰ ȱȱ YÌ„Ȳ yÌ„ȳ ஔà®” ொொ ோோ ௌௌ hʰ ɦʱ jʲ rʳ ɹÊ´ É»ʵ Êʶ wÊ· yʸ  ̆˘  ̇Ë™  ÌŠËš  ̨Ë›  ̃Ëœ  Ì‹Ë É£Ë  lË¡ sË¢ xË£ Ê•ˤ ైై 豈豈 æ›´ï¤ 車車 賈賈 滑滑 串串 å¥句 龜龜 ̀̀ 龜龜 ÌÍ 契契 金金 Ì“̓ å–‡喇 ̈ÌÍ„ 奈奈 懶ï¤ 癩癩 ç¾…ï¤ 蘿ï¤ 螺螺 裸裸 é‚邏 樂樂 æ´›洛 烙烙 çž珞 è½落 é…ª酪 é§±駱 亂亂 åµ卵 欄ï¤ 爛爛 蘭蘭 鸞鸞 鹿鹿 åµ嵐 è«–ï¥ æ¿«濫 壟壟 è—藍 弄弄 襤襤 ç± 籠 拉拉 è¾聾 臘臘 牢牢 è Ÿ蠟 磊磊 廊廊 賂賂 朗朗 é›·雷 浪浪 壘壘 狼狼 å±¢屢 郎郎  Ì΄  ̈ÌÎ… 樓樓 來來 ΑÌΆ æ·šï¥ 冷冷 ·· æ¼漏 勞勞 ΕÌΈ ೀà³€ ç´¯ï¥ æ“„擄 ΗÌΉ 縷ï¥ æ«“櫓 ΙÌΊ é›»陋 çˆ爐 å‹’勒 ç›§盧 ΟÌÎŒ è‚‹肋 è€老 凜凜 蘆蘆 Î¥ÌÎŽ 凌凌 虜虜 ΩÌÎ ೇೇ 稜稜 è·¯路 ϊÌÎ ೈೈ ç¶¾綾 露露 è±菱 é­¯魯 ೊೊ 陵陵 é·º鷺 ೋೋ 讀讀 碌碌 ʹÍ´ æ‹拏 祿祿 樂樂 ç¶ 綠 諾ï¥ è‰菉 丹丹 錄錄 寧寧 怒怒  Í…ͺ å‘‚呂 率率 女ï¦ ç•°異 廬廬 北北 æ—…旅 磻磻 ;; 濾濾 便便 礪礪 復復 é–­閭 ä¸不 驪驪 泌泌 麗麗 數數 黎黎 ç´¢索 力力 åƒ參 曆曆 塞塞 æ­·歷 çœ省 è½¢ï¦ 葉葉 å¹´年 說說 æ†ï¦ 殺殺 ΪΪ 戀ï¦ è¾°辰 ΫΫ ϊÏŠ æ’š撚 沈沈 αÌά ϋÏ‹ æ¼£漣 拾拾 εÌέ οÌÏŒ ç…‰煉 è‹¥若 ηÌή Ï…ÌÏ ç’‰璉 掠掠 ιÌί ωÌÏŽ ç§Š秊 ç•¥略 ϋÌΰ ç·´練 亮亮 βÏ è¯聯 å…©兩 輦輦 凉凉 θÏ‘ è“®蓮 æ¢梁 Υϒ 連連 ç³§糧 Î¥ÌÏ“ éŠ鍊 良良 ΫÏ” 列列 è«’諒 φÏ• 劣ï¦ é‡量 πϖ å’½咽 勵勵 烈烈 裂裂 燎ï§€ 說說 療ï§ 廉廉 蓼ï§‚ 念念 é¼遼 æ»捻 é¾ï§„ æ®®殮 暈ï§… ç°¾簾 阮阮 çµ獵 劉劉 令令 ЀЀ æ»杻 囹囹 ЁÐ 柳柳 寧寧 ГÌЃ æµï§Š 嶺嶺 溜ï§‹ 怜怜 ç‰ï§Œ 玲玲 ç•™ï§ ç‘©瑩 ЇЇ ç¡«ï§Ž 羚羚 ç´ï§ è†聆 類ï§ 鈴鈴 å…­ï§‘ é›¶零 戮ï§’ éˆ靈 КÌÐŒ 陸ï§“ é ˜領 ЍÐ 倫ï§” 例例 ЎÐŽ å´™ï§• 禮禮 κϰ 淪淪 醴醴 輪ï§— 隸隸 Ïϱ 律律 惡惡 Ï‚ϲ ൊൊ æ…„ï§™ 了了 æ —ï§š 僚僚 ോോ 率ï§› 寮寮 ൌൌ 隆ï§œ å°¿尿 利ï§ æ–™料 åï§ž 樂樂 履履 易ï§  ЙЙ 切切 æŽï§¡ 度ï¨ 梨ï§¢ æ‹“拓 泥泥 ç³–糖 ç†理 å®…宅 痢痢 æ´ž洞 ç½¹罹 æš´暴 è£ï§§ è¼»輻 裡裡 行行 里ï§© é™降 離離 見見 匿ï§« 廓廓 溺溺 å…€兀 åï§­ å—€ï¨ ç‡ï§® ç’˜璘 藺藺 塚ï¨ 隣ï§± é±—ï§² æ™´晴 麟ï§³ æž—ï§´ æ·‹ï§µ 凞凞 臨ï§¶ 猪猪 ç«‹ï§· 益益 笠笠 ѐÑ 礼礼 ç²’ï§¹ ёÑ‘ 神神 ç‹€狀 祥祥 炙炙 гÌÑ“ ç¦福 識識 é–靖 什ï§½ ç²¾ï¨ 茶ï§¾ ç¾½羽 刺ï§¿ їÑ— йй 蘒蘒 諸諸 кÌÑœ ѝÑ 逸逸 ўÑž 都都 飯飯 飼飼 館館 é¶´鶴 Ñ´ÌѶ ѵÌÑ· ӁÓ ේà·š ӂÓ‚ à·™à·à·œ à·™à·à·Šà· ෞà·ž Ð̆Ó ӑÓ‘ Ð̈Ó’ ӓÓ“ ӖÓ– ӗÓ— ӚÓš ӛÓ› ӜÓœ ӝÓ ӞÓž ӟÓŸ ӢÓ¢ ӣÓ£ ӤÓ¤ ӥÓ¥ ӦÓ¦ ӧÓ§ ӪÓª ӫÓ« ӬÓ¬ Ñ̈Ó­ ӮÓ® ӯÓ¯ ӰÓ° ӱÓ± ӲÓ² ӳÓ³ ӴÓ´ ӵÓµ ӸÓ¸ ӹÓ¹ ffff à¹à¸²ำ fiï¬ flfl ffiffi fflffl stſt stst Õ´Õ¶ﬓ Õ´Õ¥ﬔ Õ´Õ«ﬕ Õ¾Õ¶ﬖ Õ´Õ­ﬗ ×™Ö´ï¬ ײַײַ ×¢ﬠ נּנּ ×ﬡ סּï­ דﬢ ×”ﬣ ףּףּ ×›ﬤ פּï­„ לﬥ ×ﬦ צּï­† רﬧ קּקּ תﬨ רּï­ˆ +﬩ שּï­‰ ש×שׁ תּï­Š שׂשׂ וֹï­‹ שּ×שּׁ בֿï­Œ שּׂשּׂ ×›Ö¿ï­ ×Ö·אַ Õ¥Ö‚Ö‡ פֿï­Ž ×Ö¸אָ ×לï­ ×Ö¼אּ Ù±ï­ בּבּ ٱﭑ ×’Ö¼גּ ٻﭒ דּדּ ٻﭓ ×”Ö¼הּ ٻﭔ וּוּ ٻﭕ ×–Ö¼זּ پﭖ پﭗ טּטּ پﭘ ×™Ö¼יּ پﭙ ךּךּ ڀﭚ ×›Ö¼כּ ڀﭛ לּלּ ڀﭜ Ú€ï­ מּמּ ٺﭞ ٺﭟ ٺﭠ Ú‡ﮀ ٺﭡ à»àº²ຳ Ú‡ï® Ù¿ï­¢ Úﮂ Ù¿ï­£ Úﮃ Ù¿ï­¤ ÚŒﮄ Ù¿ï­¥ ڌﮅ ٹﭦ ÚŽﮆ ٹﭧ ÚŽﮇ ٹﭨ Úˆﮈ ٹﭩ Úˆﮉ ڤﭪ ຫນໜ Ú˜ﮊ ڤﭫ ຫມà» Ú˜ﮋ ڤﭬ Ú‘ﮌ ڤﭭ Ú‘ï® Ú¦ï­® Ú©ﮎ ڦﭯ Ú©ï® Ú¦ï­° Ú©ï® Ú¦ï­± Ú©ﮑ Ú„ï­² گﮒ Ú„ï­³ Ú¯ﮓ Ú„ï­´ گﮔ Ú„ï­µ Ú¯ﮕ ڃﭶ ڳﮖ ڃﭷ ڳﮗ ڃﭸ Ú³ﮘ ڃﭹ ڳﮙ چﭺ Ú±ﮚ چﭻ ڱﮛ چﭼ ་༌ Ú±ﮜ چﭽ Ú±ï® Ú‡ï­¾ Úºﮞ ڇﭿ Úºﮟ ڻﮠ Ú»ﮡ Ú»ﮢ Ú»ﮣ Û•Ù”ﮤ Û•Ù”ﮥ Ûﮦ Ûï®§ Ûﮨ Ûﮩ Ú¾ﮪ Ú¾ﮫ Ú¾ﮬ ھﮭ Û’ï®® Û’ﮯ ۓﮰ ۓﮱ གྷགྷ Ú­ﯓ Ú­ﯔ Ú­ﯕ Ú­ﯖ Û‡ﯗ Û‡ﯘ Û†ﯙ Û†ﯚ Ûˆﯛ Ûˆﯜ ཌྷའÛ‡Ù´ï¯ Û‹ﯞ Û‹ﯟ Û…ﯠ ئجï°€ Û…ﯡ དྷདྷ ئحï° Û‰ﯢ ÙŠÙ”Ù…ï°‚ Û‰ﯣ ئىﰃ Ûﯤ ÙŠÙ”ÙŠï°„ Ûﯥ བྷབྷ بجï°… Ûﯦ بحï°† Ûﯧ بخï°‡ Ù‰ﯨ آØ¢ بمï°ˆ Ù‰ﯩ أØ£ بىï°‰ ئاﯪ ཛྷཛྷ ÙˆÙ”ؤ بيï°Š ئاﯫ إØ¥ تجï°‹ ÙŠÙ”Û•ﯬ ÙŠÙ”ئ تحï°Œ ÙŠÙ”Û•ﯭ تخï° ÙŠÙ”Ùˆﯮ تمï°Ž ÙŠÙ”Ùˆﯯ تىï° ÙŠÙ”Û‡ﯰ ཱྀྠتيï° ÙŠÙ”Û‡ﯱ ثجï°‘ ÙŠÙ”Û†ﯲ ثمï°’ ÙŠÙ”Û†ﯳ ثىï°“ ÙŠÙ”Ûˆﯴ ثيï°” ÙŠÙ”Ûˆﯵ جحï°• ÙŠÙ”Ûﯶ جمï°– ÙŠÙ”Ûﯷ حجï°— ÙŠÙ”Ûﯸ ཀྵཀྵ حمï°˜ ÙŠÙ”Ù‰ﯹ خجï°™ ÙŠÙ”Ù‰ﯺ خحï°š ÙŠÙ”Ù‰ﯻ خمï°› ÛŒﯼ سجï°œ ÛŒﯽ سحï° ÛŒﯾ سخï°ž ÛŒﯿ سمï°Ÿ صحï°  ཱཱིི لحï±€ صمï°¡ ྒྷྒྷ لخï± ضجï°¢ ཱཱུུ لمﱂ ضحï°£ ྲྀྲྀ لىﱃ ضخï°¤ ྲཱྀཷ ليﱄ ضمï°¥ ླྀླྀ مجï±… طحï°¦ ླཱྀཹ محﱆ طمï°§ مخﱇ ظمï°¨ ممﱈ عجï°© مىﱉ عمï°ª ميﱊ غجï°« ྜྷྠنجﱋ غمï°¬ نحﱌ ÙØ¬ï°­ نخï± ÙØ­ï°® نمﱎ ÙØ®ï°¯ نىï± ÙÙ…ï°° نيï± Ùىﰱ ྡྷྡྷ هجﱑ ÙÙŠï°² همï±’ قحï°³ هىﱓ قمï°´ هيï±” قىï°µ يجﱕ قيï°¶ ྦྷྦྷ يحï±– كاï°· يخï±— كجï°¸ يمﱘ كحï°¹ يىï±™ كخï°º ييﱚ كلï°» ྫྷྫྷ ذٰï±› كمï°¼ اٴÙµ رٰﱜ كىï°½ وٴÙ¶ ىٰï± كيï°¾ ۇٴٷ  ٌّﱞ لجï°¿ يٴÙ¸  ÙÙ‘ﱟ  ÙŽÙ‘ï±  كاï²€  ÙÙ‘ﱡ كلï²  ÙÙ‘ï±¢ كمﲂ  ّٰï±£ كىﲃ ئرﱤ كيﲄ ئزï±¥ لمï²… ÙŠÙ”Ù…ﱦ à¾à¾µྐྵ لىﲆ ئنﱧ Û•Ù”Û€ ليﲇ ÙŠÙ”Ù‰ﱨ ماﲈ ÙŠÙ”ÙŠﱩ ÛÙ”Û‚ ممﲉ برﱪ نرﲊ بزﱫ نزﲋ بمﱬ نمﲌ بنï±­ ننï² بىï±® نىﲎ بيﱯ نيï² ترï±° ىٰï² تزï±± يرﲑ تمï±² يزï²’ تنï±³ يمﲓ تىï±´ ينï²” تيï±µ يىﲕ ثرï±¶ ييï²– ثزï±· ئجï²— ثمﱸ ئحﲘ ثنï±¹ ئخï²™ ثىﱺ ÙŠÙ”Ù…ﲚ ثيï±» Û’Ù”Û“ ئهﲛ Ùىﱼ بجﲜ ÙÙŠï±½ بحï² قىï±¾ بخﲞ قيﱿ بمﲟ بهï²  ÙØ®ï³€ تجﲡ ÙÙ…ï³ تحï²¢ قحﳂ تخï²£ قمﳃ تمﲤ كجﳄ تهï²¥ كحï³… ثمﲦ كخﳆ جحï²§ كلﳇ جمﲨ كمﳈ حجﲩ لجﳉ حمﲪ لحﳊ خجﲫ لخﳋ خمﲬ لمﳌ سجï²­ لهï³ سحï²® مجﳎ سخﲯ محï³ سمï²° مخï³ صحï²± ممﳑ صخï²² نجï³’ صمï²³ نحﳓ ضجï²´ نخï³” ضحï²µ نمﳕ ضخï²¶ نهï³– ضمï²· هجï³— طحﲸ همﳘ ظمï²¹ هٰï³™ عجﲺ يجﳚ عمï²» يحï³› غجï²¼ يخﳜ غمï²½ يمï³ ÙØ¬ï²¾ يهﳞ ÙØ­ﲿ ÙŠÙ”Ù…ﳟ ئهﳠ حيï´€ بمﳡ جىï´ بهï³¢ جيï´‚ تمï³£ خىï´ƒ تهﳤ خيï´„ ثمï³¥ صىï´… ثهﳦ صيï´† سمï³§ ضىï´‡ سهﳨ ضيï´ˆ شمﳩ شجï´‰ شهﳪ شحï´Š كلﳫ شخï´‹ كمﳬ شمï´Œ لمï³­ شرï´ نمï³® سرï´Ž نهﳯ صرï´ يمï³°    ضرï´ يهï³±  †طىï´‘ Ù€ÙŽÙ‘ï³²    طيï´’ Ù€ÙÙ‘ï³³    عىï´“ Ù€ÙÙ‘ï³´    عيï´” طىï³µ    غىï´• طيï³¶    غيï´– عىï³·    سىï´— عيﳸ    سيï´˜ غىï³¹    شىï´™ غيﳺ    شيï´š سىï³» حىï´› سيï³¼ حيï´œ شىï³½ جىï´ شيï³¾ جيï´ž حىﳿ خىï´Ÿ â€‑ خيï´  صىï´¡ صيï´¢ ضىï´£ ضيï´¤ شجï´¥  ̳‗ شحï´¦ شخï´§ شمï´¨ شرï´© سرï´ª صرï´« ضرï´¬ شجï´­ شحï´® شخï´¯ شمï´° تجمïµ سهï´± تحجﵑ شهï´² تحجïµ’ طمï´³ .․ تحمﵓ سجï´´ ..‥ تخمïµ” سحï´µ ...… تمجﵕ سخï´¶ تمحïµ– شجï´· تمخïµ— شحï´¸ ?!∠جمحﵘ شخï´¹ !?≠جمحïµ™ طمï´º حميﵚ ظمï´» حمىïµ› اًï´¼ سحجﵜ اًï´½    سجحïµ سجىﵞ سمحﵟ سمحïµ  ′′″ لحمï¶€ سمجﵡ ′′′‴ لحيï¶ سممïµ¢ لحىï¶‚ سممïµ£ ‵‵‶ لججﶃ صححﵤ ‵‵‵‷ لججï¶„ صححïµ¥ لخمï¶… صممﵦ لخمﶆ شحمïµ§ لمحﶇ شحمﵨ لمحﶈ شجيﵩ !!‼ محجﶉ شمخﵪ محمï¶Š شمخﵫ محيï¶‹ شممﵬ  Ì…‾ مجحï¶Œ شممïµ­ مجمï¶ ضحىïµ® مخجï¶Ž ضخمﵯ مخمï¶ ضخمïµ° 0â‚€ طمحïµ± 1â‚ طمحïµ² 2â‚‚ مجخï¶’ طممïµ³ 3₃ همجï¶“ طميïµ´ 4â‚„ هممï¶” عجمïµµ 5â‚… نحمï¶• عممïµ¶ 6₆ نحىï¶– عممïµ· 7₇ نجمï¶— عمىﵸ 8₈ نجمﶘ غممïµ¹ 9₉ نجىï¶™ غميﵺ +₊ نميï¶š غمىïµ» −â‚‹ =₌ نمىï¶› ÙØ®Ù…ïµ¼ (â‚ يممï¶œ ÙØ®Ù…ïµ½ )₎ يممï¶ قمحïµ¾ 0â° بخيï¶ž قممﵿ تجيï¶Ÿ تجىï¶  مجيï·€ تخيï¶¡ 4â´ Ùميï· تخىï¶¢ 5âµ بحيï·‚ تميï¶£ 6â¶ كممï·ƒ تمىﶤ 7â· عجمï·„ جميï¶¥ 8⸠صممï·… جحىﶦ 9â¹ سخيï·† جمىï¶§ +⺠نجيï·‡ سخىﶨ −â» صحيï¶© =â¼ شحيﶪ ضحيï¶« (â½ لجيﶬ )â¾ لميï¶­ nâ¿ يحيï¶® يجيﶯ يميï¶° مميï¶± قميï¶² نحيï¶³ قمحï¶´ لحمï¶µ عميï¶¶ كميï¶· Rs₨ نجحﶸ مخيï¶¹ لجمﶺ كممï¶» لجمï¶¼ نجحï¶½ جحيï¶¾ حجيï¶¿ صلےï·° a/câ„€ قلےï·± a/sâ„ اللهï·² Câ„‚ اكبرï·³ °C℃ محمدï·´ صلعمï·µ c/oâ„… رسولï·¶ c/u℆ عليهï·· Æℇ وسلمï·¸ صلىï·¹ °F℉ gℊ !صلى الله عليه وسلمï·º Hâ„‹ جل جلالهï·» Hℌ Hâ„ hℎ ħâ„ Iâ„ Iâ„‘ Lâ„’ 〉ï¹€ lâ„“ 「ï¹ ã€﹂ Nâ„• 『﹃ Noâ„– ã€﹄ Pâ„™ Qℚ  Ì…﹉ Râ„›  Ì…﹊ Rℜ  Ì…﹋ Râ„  Ì…﹌ _ï¹ _﹎ SMâ„  _ï¹ ..︰ TELâ„¡ ,ï¹ —︱ TMâ„¢ ã€﹑ –︲ .ï¹’ _︳ Zℤ _︴ ;ï¹” (︵ ΩΩ :﹕ )︶ ?ï¹– {︷ Zℨ !ï¹— }︸ KK —﹘ 〔︹ AÌŠâ„« (ï¹™ 〕︺ Bℬ )﹚ ã€︻ Câ„­ {ï¹› 】︼ }﹜ 《︽ eℯ 〔ï¹ 》︾ Eâ„° 〕﹞ 〈︿ Fℱ #﹟ &ï¹  Mℳ Ø¡ﺀ *﹡ oâ„´ 1â„3â…“ آïº +ï¹¢ ×ℵ 2â„3â…” آﺂ -ï¹£ בâ„¶ 1â„5â…• أﺃ <﹤ ×’â„· 2â„5â…– أﺄ >ï¹¥ דℸ 3â„5â…— ÙˆÙ”ﺅ =﹦ iℹ 4â„5â…˜ ÙˆÙ”ﺆ إﺇ \﹨ 1â„6â…™ إﺈ $﹩ 5â„6â…š ÙŠÙ”ﺉ %﹪ 1â„8â…› ÙŠÙ”ﺊ @﹫ 3â„8â…œ ÙŠÙ”ﺋ 5â„8â… ÙŠÙ”ﺌ 7â„8â…ž اïº 1â„â…Ÿ اﺎ Iâ…  بïº  Ù‹ï¹° IIâ…¡ بïº ـًï¹± IIIâ…¢ بﺑ  ٌﹲ IVâ…£ بﺒ Vâ…¤ Ø©ﺓ  Ùï¹´ VIâ…¥ Ø©ﺔ VIIâ…¦ تﺕ  ÙŽï¹¶ VIIIâ…§ تﺖ Ù€ÙŽï¹· IXâ…¨ Xâ…© تﺗ  Ùﹸ XIâ…ª تﺘ Ù€Ùï¹¹ XIIâ…« Ø«ﺙ  Ùﹺ Lâ…¬ Ø«ﺚ Ù€Ùï¹» Câ…­ Ø«ﺛ  Ù‘ï¹¼ Dâ…® Ø«ﺜ ـّï¹½ Mâ…¯ جïº  Ù’ï¹¾ iâ…° جﺞ ـْﹿ iiâ…± جﺟ iiiâ…² جﺠ ivâ…³ ضﻀ Ø­ﺡ vâ…´ Ø·ï» Ø­ﺢ viâ…µ Ø·ﻂ Ø­ﺣ viiâ…¶ Ø·ﻃ Ø­ﺤ viiiâ…· Ø·ﻄ Ø®ﺥ ixâ…¸ ظï»… Ø®ﺦ ظﻆ Ø®ﺧ xâ…¹ ظﻇ Ø®ﺨ xiâ…º ظﻈ دﺩ xiiâ…» â†Ì¸↚ عﻉ دﺪ lâ…¼ ↛↛ عﻊ ذﺫ câ…½ عﻋ ذﺬ dâ…¾ عﻌ رﺭ mâ…¿ غï» رﺮ غﻎ زﺯ غï» زﺰ غï» سﺱ Ùﻑ سﺲ Ùï»’ سﺳ Ùﻓ سﺴ Ùï»” Ø´ﺵ Ù‚ﻕ Ø´ﺶ Ù‚ï»– Ø´ﺷ Ù‚ï»— Ø´ﺸ Ù‚ﻘ صﺹ كﻙ صﺺ Ùƒﻚ صﺻ كﻛ صﺼ ↮↮ â‡Ì¸⇠Ùƒﻜ ضﺽ ⇎⇎ Ù„ï» ضﺾ ⇏⇠Ù„ﻞ ضﺿ Ù„ﻟ Ù„ï»  Ù…ﻡ !ï¼ Ù…ﻢ "" Ù…ﻣ ## Ù…ﻤ $$ Ù†ﻥ %ï¼… Ù†ﻦ && نﻧ '' Ù†ﻨ (( Ù‡ﻩ )) Ù‡ﻪ ** Ù‡ﻫ ++ Ù‡ﻬ ,, وﻭ -ï¼ Ùˆï»® .. Ù‰ﻯ /ï¼ Ù‰ï»° 0ï¼ ÙŠï»± 11 ÙŠﻲ 2ï¼’ ÙŠﻳ 33 ÙŠï»´ ∄∄ 4ï¼” لآﻵ 55 لآï»¶ 6ï¼– لأï»· 7ï¼— لأﻸ ∉∉ 88 لإﻹ 9ï¼™ لإﻺ :: لاï»» ∌∌ ;ï¼› لاﻼ << =ï¼ >> ?? @ï¼  `ï½€ AA aï½ Bï¼¢ bb Cï¼£ cc DD dd Eï¼¥ eï½… FF ff Gï¼§ gg HH hh II ii JJ jj KK kk LL ll Mï¼­ mï½ Nï¼® nn OO oï½ Pï¼° pï½ Qï¼± ≁≠qq Rï¼² rï½’ Sï¼³ ∤∤ ss Tï¼´ ≄≄ ∦∦ tï½” Uï¼µ uu Vï¼¶ ≇≇ vï½– Wï¼· wï½— XX ≉≉ xx Yï¼¹ yï½™ ZZ ∫∫∬ zz [ï¼» ∫∫∫∭ {ï½› \ï¼¼ || ]ï¼½ ∮∮∯ }ï½ ^ï¼¾ ∮∮∮∰ ~~ __ ã‚¿ï¾€ 。。 ãƒï¾ 「ï½¢ ツツ ã€ï½£ テテ ã€、 トト ・ï½¥ ナï¾… ヲヲ ニニ ã‚¡ï½§ ヌヌ ã‚£ィ ãƒネ ã‚¥ゥ ノノ ã‚§ェ ãƒハ ã‚©ォ ヒヒ ャャ フフ ュï½­ ヘï¾ ョï½® ホホ ッッ ≠≠ マï¾ ーï½° ⊀⊀ ミï¾ ã‚¢ï½± ≢≢ ⊁⊠ムム イï½² メï¾’ ウï½³ ⊄⊄ モモ エï½´ ⊅⊅ ヤï¾” オï½µ ユユ ã‚«ï½¶ ヨï¾– ã‚­ï½· ⊈⊈ ラï¾— クク ⊉⊉ リリ ケï½¹ ルï¾™ ココ レレ サï½» â‰Ì¸≭ ロï¾› ã‚·ï½¼ ≮≮ ワワ スï½½ ≯≯ ンï¾ ã‚»ï½¾ ≰≰ ã‚™゙ ソソ ≱≱ ゚゚ á… ï¾  á„€ᄀ ≴≴ á„ï¾¢ á…¡ï¿‚ ᆪï¾£ ≵≵ á…¢ᅢ á„‚ᄂ ᅣᅣ ᆬï¾¥ ᅤᅤ ᆭᆭ ≸≸ á…¥ᅥ ᄃï¾§ ≹≹ á…¦ᅦ á„„ᄄ á„…ᄅ ᆰᆰ á…§ᅧ ᆱᆱ ᅨᅨ ᆲᆲ á…©ᅩ ᆳï¾­ á…ªï¿ ᆴï¾® á…«ᅫ ᆵᆵ á…¬ï¿ ᄚï¾° ᄆï¾± ᄇï¾² á…­ï¿’ ᄈï¾³ ᅮᅮ á„¡ï¾´ ᅯᅯ ᄉï¾µ á…°ï¿• ᄊï¾¶ ᅱᅱ á„‹ï¾· ᅲᅲ ᄌᄌ á„ï¾¹ ᄎᄎ ⊬⊬ á…³ᅳ á„ï¾» ⊭⊭ á…´ï¿› á„ï¾¼ ⊮⊮ á…µᅵ á„‘ï¾½ ⊯⊯ á„’ï¾¾ ¢ï¿  £ï¿¡ ¬ï¿¢  ̄ ̄ ¦¦ ¥¥ â‚©₩ ││ â†ï¿© ↑↑ →ï¿« ↓↓ â– ï¿­ â—‹ï¿® ⋠â‹  ⋡â‹¡ ⋢â‹¢ ⋣â‹£ ⋪⋪ ⋫â‹« ⋬⋬ ⋭â‹­ 〈〈 〉〉 1â‘  2â‘¡ (13)â’€ 3â‘¢ (14)â’ 4â‘£ (15)â’‚ 5⑤ (16)â’ƒ 6â‘¥ (17)â’„ 7⑦ (18)â’… 8â‘§ (19)â’† 9⑨ (20)â’‡ 10â‘© 1.â’ˆ 11⑪ 2.â’‰ 12â‘« 3.â’Š 13⑬ 4.â’‹ 14â‘­ 5.â’Œ 15â‘® 6.â’ 16⑯ 7.â’Ž 17â‘° 8.â’ 18⑱ 9.â’ 19⑲ 10.â’‘ 20⑳ 11.â’’ (1)â‘´ 12.â’“ (2)⑵ 13.â’” (3)â‘¶ 14.â’• (4)â‘· 15.â’– (5)⑸ 16.â’— (6)⑹ 17.â’˜ (7)⑺ 18.â’™ (8)â‘» 19.â’š (9)⑼ 20.â’› (10)⑽ (a)â’œ (11)⑾ (b)â’ (12)â‘¿ (c)â’ž (d)â’Ÿ (e)â’  (f)â’¡ Kâ“€ (g)â’¢ Lâ“ (h)â’£ Mâ“‚ (i)â’¤ NⓃ (j)â’¥ Oâ“„ (k)â’¦ Pâ“… (l)â’§ QⓆ (m)â’¨ RⓇ (n)â’© SⓈ (o)â’ª TⓉ (p)â’« UⓊ (q)â’¬ Vâ“‹ (r)â’­ WⓌ (s)â’® Xâ“ (t)â’¯ YⓎ (u)â’° Zâ“ (v)â’± aâ“ (w)â’² bâ“‘ (x)â’³ câ“’ (y)â’´ dâ““ (z)â’µ eâ“” Aâ’¶ fâ“• Bâ’· gâ“– Câ’¸ hâ“— Dâ’¹ iⓘ Eâ’º jâ“™ Fâ’» kⓚ Gâ’¼ lâ“› Hâ’½ mⓜ Iâ’¾ nâ“ Jâ’¿ oⓞ pⓟ qâ“  râ“¡ sâ“¢ tâ“£ uⓤ vâ“¥ wⓦ xâ“§ yⓨ zâ“© 0⓪ AÌ¥Ḁ aÌ¥ḠḂḂ ḃḃ BÌ£Ḅ bÌ£ḅ ḆḆ ḇḇ ÇÌḈ çÌḉ ḊḊ ḋḋ DÌ£Ḍ dÌ£ḠḎḎ ḏḠḐḠḑḑ DÌ­Ḓ dÌ­ḓ ḔḔ ḕḕ EÌ„ÌḖ eÌ„Ìḗ EÌ­Ḙ eÌ­ḙ ḚḚ ḛḛ ḜḜ ḝḠḞḞ ḟḟ GÌ„Ḡ Ṁá¹€ gÌ„ḡ ṁá¹ ḢḢ MÌ£Ṃ ḣḣ mÌ£ṃ HÌ£Ḥ ṄṄ hÌ£ḥ ṅá¹… ḦḦ NÌ£Ṇ ḧḧ nÌ£ṇ ḨḨ ṈṈ ḩḩ ṉṉ HÌ®Ḫ NÌ­Ṋ hÌ®ḫ nÌ­ṋ ḬḬ ÕÌṌ ḭḭ õÌá¹ ÏÌḮ ṎṎ ïÌḯ ṏá¹ KÌḰ Ṑá¹ kÌḱ ṑṑ KÌ£Ḳ OÌ„Ìá¹’ kÌ£ḳ oÌ„Ìṓ ḴḴ PÌá¹” ḵḵ pÌṕ LÌ£Ḷ Ṗá¹– lÌ£ḷ ṗá¹— ḸḸ ṘṘ ḹḹ ṙá¹™ ḺḺ RÌ£Ṛ ḻḻ ṛṛ LÌ­Ḽ ṜṜ lÌ­ḽ ṝá¹ MÌḾ ṞṞ mÌḿ ṟṟ Ṡá¹  WÌ€Ẁ ṡṡ wÌ€ẠṢṢ WÌẂ ṣṣ wÌẃ SÌ̇Ṥ ẄẄ sÌ̇á¹¥ ẅẅ ṦṦ ẆẆ ṧá¹§ ẇẇ ṨṨ WÌ£Ẉ ṩṩ wÌ£ẉ ṪṪ ẊẊ ṫṫ ẋẋ TÌ£Ṭ ẌẌ ṭṭ ẍẠṮá¹® ẎẎ ṯṯ ẏẠTÌ­á¹° ZÌ‚ẠtÌ­á¹± zÌ‚ẑ Ṳá¹² ZÌ£Ẓ ṳá¹³ zÌ£ẓ Ṵá¹´ ẔẔ ṵá¹µ ẕẕ UÌ­á¹¶ ẖẖ uÌ­á¹· ẗẗ ŨÌṸ wÌŠẘ ũÌá¹¹ yÌŠẙ ṺṺ aʾẚ ṻá¹» ṡẛ Ṽá¹¼ ṽá¹½ ṾṾ vÌ£ṿ AÌ£Ạ ỀỀ aÌ£ạ ềá» ẢẢ ỂỂ ảả ểể AÌ‚ÌẤ ỄỄ aÌ‚Ìấ ễá»… ẦẦ ỆỆ ầầ ệệ ẨẨ ỈỈ ẩẩ ỉỉ ẪẪ IÌ£Ị ẫẫ iÌ£ị ẬẬ OÌ£Ọ ậậ ọỠĂÌẮ ỎỎ ăÌắ ỏá» ẰẰ OÌ‚Ìá» ằằ oÌ‚Ìố ẲẲ Ồá»’ ẳẳ ồồ ẴẴ Ổá»” ẵẵ ổổ ẶẶ Ỗá»– ặặ ỗá»— EÌ£Ẹ ỘỘ eÌ£ẹ ộá»™ ẺẺ OÌ›ÌỚ ẻẻ oÌ›Ìá»› ẼẼ ỜỜ ẽẽ ờá» EÌ‚ÌẾ ỞỞ eÌ‚Ìế ởở Ỡá»  ἀá¼€ ỡỡ ἁá¼ ỢỢ ἂἂ ợợ ἃἃ UÌ£Ụ ἀÌἄ uÌ£ụ ἁÌá¼… ỦỦ ἆἆ ủá»§ ἇἇ UÌ›ÌỨ ἈἈ uÌ›Ìứ ἉἉ ỪỪ ἊἊ ừừ ἋἋ ỬỬ ἈÌἌ ửá»­ ἉÌá¼ Ữá»® ἎἎ ữữ Ἇá¼ Ựá»° ἐá¼ ựá»± ἑἑ YÌ€Ỳ ἒá¼’ yÌ€ỳ ἓἓ ỴỴ ἐÌá¼” yÌ£ỵ ἑÌἕ Ỷá»¶ ỷá»· ỸỸ ἘἘ ỹỹ Ἑá¼™ ἚἚ Ἓá¼› ἘÌἜ ἙÌá¼ ἠá¼  ὀá½€ ἡἡ ὁá½ ἢá¼¢ ὂὂ ἣá¼£ ὃὃ ἠÌἤ ὀÌὄ ἡÌá¼¥ ὁÌá½… ἦἦ ἧá¼§ ἨἨ ὈὈ ἩἩ ὉὉ ἪἪ ὊὊ ἫἫ ὋὋ ἨÌἬ ὈÌὌ ἩÌá¼­ ὉÌá½ Ἦá¼® ἯἯ ἰá¼° ὐὠἱá¼± Ï…Ì”ὑ ἲá¼² ὒá½’ ἳá¼³ ὓὓ ἰÌá¼´ Ï…Ì“Ìá½” ἱÌá¼µ Ï…Ì”Ìὕ ἶá¼¶ ὖá½– ἷá¼· ὗá½— ἸἸ Ἱá¼¹ Ὑá½™ ἺἺ Ἳá¼» Ὓá½› ἸÌá¼¼ ἹÌá¼½ ὙÌá½ Ἶá¼¾ ἿἿ ὟὟ ὠá½  ᾀá¾€ ὡὡ ᾁá¾ ὢá½¢ ᾂᾂ ὣá½£ ᾃᾃ ὠÌὤ ἀÌÍ…ᾄ ὡÌá½¥ ἁÌÍ…á¾… ὦὦ ᾆᾆ ὧá½§ ᾇᾇ ὨὨ ᾈᾈ ὩὩ ᾉᾉ ὪὪ ᾊᾊ ὫὫ ᾋᾋ ὨÌὬ ἈÌÍ…ᾌ ὩÌá½­ ἉÌÍ…á¾ Ὦá½® ᾎᾎ ὯὯ ᾏá¾ ὰá½° ᾐá¾ αÌá½± ᾑᾑ ὲá½² ᾒá¾’ εÌá½³ ᾓᾓ ὴá½´ ἠÌÍ…á¾” ηÌá½µ ἡÌÍ…ᾕ ὶá½¶ ᾖá¾– ιÌá½· ᾗá¾— ὸὸ ᾘᾘ οÌá½¹ ᾙá¾™ Ï…Ì€ὺ ᾚᾚ Ï…Ìá½» ᾛá¾› ὼá½¼ ἨÌÍ…ᾜ ωÌá½½ ἩÌÍ…á¾ ᾞᾞ ᾟᾟ ᾠá¾   ͂῀ ᾡᾡ  ̈͂á¿ ᾢá¾¢ ῂá¿‚ ᾣá¾£ ῃῃ ὠÌÍ…ᾤ ηÌÍ…á¿„ ὡÌÍ…á¾¥ ᾦᾦ ῆῆ ᾧá¾§ ῇῇ ᾨᾨ ῈῈ ᾩᾩ ΕÌΈ ᾪᾪ ῊῊ ᾫᾫ ΗÌá¿‹ ὨÌÍ…ᾬ ῌῌ ὩÌÍ…á¾­  ̓̀á¿ ᾮá¾®  Ì“Ì῎ ᾯᾯ  ̓͂á¿ ᾰá¾° ῐá¿ ᾱá¾± ῑá¿‘ ᾲá¾² ῒá¿’ ᾳá¾³ ϊÌá¿“ αÌÍ…á¾´ ᾶá¾¶ ῖá¿– ᾷá¾· ῗá¿— ᾸᾸ ῘῘ Ᾱá¾¹ Ῑá¿™ ᾺᾺ ῚῚ ΑÌá¾» ΙÌá¿› ᾼá¾¼  ̓᾽  ̔̀á¿ ιá¾¾  Ì”Ì῞  Ì“᾿  ̔͂῟ ῠá¿  ῡῡ ῢá¿¢ ϋÌá¿£ ÏÌ“ῤ Ï̔ῥ Ï…Í‚ῦ ῧá¿§ ῨῨ Ῡá¿© ῪῪ Î¥Ìá¿« ῬῬ  ̈̀á¿­  ̈Ìá¿® `` ῲῲ ῳῳ ωÌÍ…á¿´ ῶá¿¶ ῷá¿· ῸῸ ΟÌΌ ῺῺ ΩÌá¿» ῼῼ  Ì´  Ì”῾    ã‹ã‚™㌠ãã‚™㎠ãã‚™ã ã‘゙㒠ã“゙㔠〒〶 ã•゙㖠å〸 å„〹 ã—ã‚™㘠å…〺 ã™ã‚™ãš ã›ã‚™㜠ã゙㞠ãŸã‚™ã  ã¡ã‚™㢠ã¤ã‚™㥠ã¦ã‚™ã§ ã¨ã‚™ã© ã¯ã‚™ã° ã¯ã‚šã± ã²ã‚™ã³ ã²ã‚šã´ ã†ã‚™ã‚” ãµã‚™ã¶ ãµã‚šã· ã¸ã‚™ã¹ ã¸ã‚š㺠ã»ã‚™ã¼  ゙゛ ã»ã‚šã½  ゚゜ ã‚ã‚™ゞ ã‚¿ã‚™ダ ãƒã‚™ヂ ヅヅ デデ ドド ã‚«ã‚™ガ ギギ グã‚° ãƒã‚™ムゲゲ ãƒã‚šパ ゴã‚´ ビビ ピピ ザã‚¶ ブブ ã‚·ã‚™ジ ププ ズズ ベベ ペペ ゼゼ ボボ ゾゾ ポムヴヴ ヷヷ ヸヸ ヹヹ ヺヺ ヾヾ ᄚã…€ ᄆã… ᄇã…‚ ᄈã…ƒ á„¡ã…„ ᄉã…… ᄊã…† á„‹ã…‡ ᄌã…ˆ á„ã…‰ ᄎã…Š á„ã…‹ á„ã…Œ á„‘ã… á„’ã…Ž á…¡ã… á„€ㄱ á…¢ã… á„ㄲ ᅣㅑ ᆪㄳ ᅤㅒ á„‚ã„´ ᅥㅓ ᆬㄵ ᅦㅔ ᆭã„¶ á…§ã…• DecoKompData)k      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ꀀê€ꀂꀃꀄꀅꀆꀇꀈꀉꀊꀋꀌê€ꀎê€ê€ꀑꀒꀓꀔꀕꀖꀗꀘꀙꀚꀛꀜê€ꀞꀟꀠê€ꀡêꀢê‚ꀣêƒꀤê„ꀥê…ꀦê†ꀧê‡ꀨêˆꀩê‰ꀪêŠꀫê‹ꀬêŒꀭêꀮêŽꀯêꀰêꀱê‘ꀲê’ꀳê“ꀴê”ꀵê•ꀶê–ꀷê—ꀸê˜ꀹê™ꀺêšꀻê›ꀼêœꀽêꀾêžꀿêŸê ê‚€ê¡ê‚ê¢ê‚‚ê£ꂃê¤ê‚„ê¥ê‚…ê¦ꂆê§ꂇê¨ꂈê©ꂉêªꂊê«ê‚‹ê¬ꂌê­ê‚ê®ꂎê¯ê‚ê°ê‚ê±ê‚‘ê²ê‚’ê³ê‚“ê´ê‚”êµê‚•ê¶ê‚–ê·ê‚—ê¸ꂘê¹ê‚™êºꂚê»ê‚›ê¼ꂜê½ê‚ê¾ꂞê¿ꂟê‚ ꃀê‚¡êƒê‚¢ꃂê‚£ꃃꂤꃄê‚¥ꃅꂦꃆê‚§ꃇꂨꃈê‚©ꃉꂪꃊê‚«ꃋꂬꃌê‚­êƒê‚®ꃎꂯêƒê‚°êƒꂱꃑꂲꃒꂳꃓê‚´ꃔꂵꃕê‚¶ꃖê‚·ꃗꂸꃘꂹꃙꂺꃚê‚»ꃛꂼꃜꂽêƒꂾꃞê‚¿ꃟꃠê„€ꃡê„ꃢê„‚ꃣꄃꃤê„„ꃥê„…ꃦꄆꃧꄇꃨꄈꃩꄉꃪꄊꃫê„‹ꃬꄌꃭê„ꃮꄎꃯê„ꃰê„ꃱê„‘ꃲê„’ꃳê„“ꃴê„”ꃵê„•ꃶê„–ꃷê„—ꃸꄘꃹê„™ꃺꄚꃻê„›ꃼꄜꃽê„ꃾꄞꃿꄟꄠꅀꄡê…ꄢꅂꄣꅃꄤꅄꄥꅅꄦꅆꄧꅇꄨꅈꄩꅉꄪê…Šê„«ê…‹ꄬꅌꄭê…ꄮꅎꄯê…ê„°ê…ꄱê…‘ꄲê…’ꄳê…“ê„´ê…”ꄵê…•ê„¶ê…–ê„·ê…—ꄸê…˜ꄹê…™ꄺꅚꄻꅛꄼê…œꄽê…ꄾê…žê„¿ê…Ÿê… ꆀê…¡ê†ê…¢ꆂê…£ꆃê…¤ꆄê…¥ꆅê…¦ꆆê…§ꆇê…¨ꆈê…©ꆉê…ªꆊê…«ꆋê…¬ꆌê…­ê†ê…®ꆎê…¯ê†ê…°ê†ê…±ꆑê…²ꆒê…³ꆓê…´ꆔê…µꆕê…¶ꆖê…·ꆗê…¸ꆘê…¹ꆙê…ºꆚê…»ꆛê…¼ꆜê…½ê†ê…¾ꆞê…¿ꆟꆠꇀꆡê‡ꆢꇂꆣꇃꆤꇄꆥꇅꆦꇆꆧꇇꆨꇈꆩꇉꆪꇊꆫꇋꆬꇌꆭê‡ꆮꇎꆯê‡ꆰê‡ꆱꇑꆲꇒꆳꇓꆴꇔꆵꇕꆶꇖꆷꇗꆸꇘꆹꇙꆺꇚꆻꇛꆼꇜꆽê‡ꆾꇞꆿꇟꇠꈀꇡêˆꇢꈂꇣꈃꇤꈄꇥꈅꇦꈆꇧꈇꇨꈈꇩꈉꇪꈊꇫꈋꇬꈌꇭêˆꇮꈎꇯêˆꇰêˆꇱꈑꇲꈒꇳꈓꇴꈔꇵꈕꇶꈖꇷꈗꇸꈘꇹꈙꇺꈚꇻꈛꇼꈜꇽêˆꇾꈞꇿꈟꈠꉀꈡê‰ꈢꉂꈣꉃꈤꉄꈥꉅꈦꉆꈧꉇꈨꉈꈩꉉꈪꉊꈫꉋꈬꉌꈭê‰ꈮꉎꈯê‰ꈰê‰ꈱꉑꈲꉒꈳꉓꈴꉔꈵꉕꈶꉖꈷꉗꈸꉘꈹꉙꈺꉚꈻꉛꈼꉜꈽê‰ꈾꉞꈿꉟꉠꊀꉡêŠꉢꊂꉣꊃꉤꊄꉥꊅꉦꊆꉧꊇꉨꊈꉩꊉꉪꊊꉫꊋꉬꊌꉭêŠꉮꊎꉯêŠꉰêŠꉱꊑꉲꊒꉳꊓꉴꊔꉵꊕꉶꊖꉷꊗꉸꊘꉹꊙꉺꊚꉻꊛꉼꊜꉽêŠꉾꊞꉿꊟꊠê‹€ꊡê‹ꊢê‹‚ꊣꋃꊤê‹„ꊥê‹…ꊦꋆꊧꋇꊨꋈꊩꋉꊪꋊꊫê‹‹ꊬꋌꊭê‹ꊮꋎꊯê‹ꊰê‹ꊱê‹‘ꊲê‹’ꊳê‹“ꊴê‹”ꊵê‹•ꊶê‹–ꊷê‹—ꊸꋘꊹê‹™ꊺꋚꊻê‹›ꊼꋜꊽê‹ꊾꋞꊿꋟê‹ ꌀê‹¡êŒê‹¢ꌂê‹£ꌃꋤꌄê‹¥ꌅꋦꌆê‹§ꌇꋨꌈê‹©ꌉꋪꌊê‹«ꌋꋬꌌê‹­êŒê‹®ꌎꋯêŒê‹°êŒꋱꌑꋲꌒꋳꌓê‹´ꌔꋵꌕê‹¶ꌖê‹·ꌗꋸꌘꋹꌙꋺꌚê‹»ꌛꋼꌜꋽêŒꋾꌞê‹¿ꌟꌠê€ꌡêꌢê‚ꌣêƒꌤê„ꌥê…ꌦê†ꌧê‡ꌨêˆꌩê‰ꌪêŠꌫê‹ꌬêŒꌭêꌮêŽꌯêꌰêꌱê‘ꌲê’ꌳê“ꌴê”ꌵê•ꌶê–ꌷê—ꌸê˜ꌹê™ꌺêšꌻê›ꌼêœꌽêꌾêžꌿêŸê ꎀê¡êŽê¢ꎂê£ꎃê¤ꎄê¥ꎅê¦ꎆê§ꎇê¨ꎈê©ꎉêªꎊê«ꎋê¬ꎌê­êŽê®ꎎê¯êŽê°êŽê±ꎑê²ꎒê³ꎓê´ꎔêµꎕê¶ꎖê·ꎗê¸ꎘê¹ꎙêºꎚê»ꎛê¼ꎜê½êŽê¾ꎞê¿ꎟꎠê€ꎡêꎢê‚ꎣêƒꎤê„ꎥê…ꎦê†ꎧê‡ꎨêˆꎩê‰ꎪêŠꎫê‹ꎬêŒꎭêꎮêŽꎯêꎰêꎱê‘ꎲê’ꎳê“ꎴê”ꎵê•ꎶê–ꎷê—ꎸê˜ꎹê™ꎺêšꎻê›ꎼêœꎽêꎾêžꎿêŸê ê€ê¡êê¢ê‚ê£êƒê¤ê„ê¥ê…ê¦ê†ê§ê‡ê¨êˆê©ê‰êªêŠê«ê‹ê¬êŒê­êê®êŽê¯êê°êê±ê‘ê²ê’ê³ê“ê´ê”êµê•ê¶ê–ê·ê—ê¸ê˜ê¹ê™êºêšê»ê›ê¼êœê½êê¾êžê¿êŸê ê‘€ê¡ê‘ê¢ê‘‚ê£ꑃê¤ê‘„ê¥ê‘…ê¦ꑆê§ꑇê¨ꑈê©ꑉêªꑊê«ê‘‹ê¬ꑌê­ê‘ê®ꑎê¯ê‘ê°ê‘ê±ê‘‘ê²ê‘’ê³ê‘“ê´ê‘”êµê‘•ê¶ê‘–ê·ê‘—ê¸ꑘê¹ê‘™êºꑚê»ê‘›ê¼ꑜê½ê‘ê¾ꑞê¿ꑟꑠꒀꑡê’ꑢꒂꑣꒃꑤꒄꑥꒅꑦꒆꑧꒇꑨꒈꑩꒉꑪê’Šê‘«ê’‹ꑬꒌꑭꑮꑯê‘°ê’ꑱê’‘ꑲê’’ꑳê’“ê‘´ê’”ꑵê’•ê‘¶ê’–ê‘·ê’—ꑸê’˜ꑹê’™ꑺ꒚ꑻ꒛ꑼê’œꑽê’ꑾ꒞ꑿ꒟꒠꓀꒡꓂꓃꒤꓄꒥꒦꓆꒧꒨꒩꒪꒫꒬꒭꒮꒯꒰꒱꒲꒳꒵꒶꒷꒸꒹꒺꒻꒼꒽꒾꒿ကá€ဂဃငစဆဇဈဉညဋဌá€ဎá€á€ထဒဓနပဖဗဘမယရလá€သဟဠအá€áဣá‚ဤáƒဥá„ဦá…ဧá†á‡ဩáˆဪá‰áŠာá‹ိáŒီáုáŽူáေáဲá‘á’á“á”ံá•့á–းá—္á˜á™á‚ á‚¡Ⴠà¤á‚¢áƒंá‚£ჂःႤჃá‚¥ჄअႦჅआá‚§इႨईá‚©उႪऊá‚«ऋႬऌá‚­à¤á‚®ऎႯà¤á‚°à¤ႱáƒऑႲბऒႳგओá‚´დऔႵეकá‚¶ვखá‚·ზगႸთघႹიङႺკचá‚»ლछႼმजႽნà¤Ⴞáƒञá‚¿პटჟठრडीსá„€ढà¥ტá„णूუá„‚तृფᄃथॄქá„„दॅღá„…धॆყᄆनेშᄇऩैჩᄈपॉცᄉफॊძᄊबोწá„‹भौჭᄌमà¥ხá„यჯᄎरჰá„ऱà¥ჱá„ल॑ჲá„‘ळ॒ჳá„’ऴ॓ჴá„“व॔ჵá„”शჶá„•षá„–सá„—हक़ᄘख़á„™ग़჻ᄚ़ज़á„›ऽड़ᄜाà¥á„िफ़ᄞय़ᄟॠá„ ॡá„¡á…€ॢà¦á„¢á…ॣংᄣᅂ।ঃᄤá…ƒ॥ᄥᅄ०অᄦá……१আá„§á…†२ইᄨá…‡३ঈá„©á…ˆ४উᄪá…‰५ঊá„«á…Š६ঋᄬá…‹७ঌá„­á…Œ८á„®á…९ᄯá…Ž॰à¦á„°á…à¦ᄱá…ᄲá…‘ᄳá…’ওá„´á…“ঔᄵá…”কá„¶á…•খá„·á…–গᄸá…—ঘᄹá…˜ঙᄺá…™চá„»ছᄼজᄽà¦ᄾঞá„¿টá…Ÿঠá… ডীᅡᆀঢà§á…¢á†ণà§‚á…£ᆂতৃá…¤ᆃথà§„á…¥ᆄদá…¦ᆅধá…§ᆆনেá…¨ᆇৈá…©ᆈপá…ªᆉফá…«ᆊবà§‹á…¬ᆋভৌᅭᆌমà§á…®á†যá…¯ᆎরá…°á†á…±á†লá…²ᆑá…³ᆒá…´ᆓá…µᆔশá…¶ᆕষá…·ᆖসà§—á…¸ᆗহá…¹ᆘá…ºᆙá…»ᆚ়á…¼ᆛড়ᅽᆜাà§á…¾á†িá…¿ᆞà§Ÿᆟà§ ᆠà§¡ᆡᇀà§¢ᆢá‡à§£ਂᇂᇃᇄ০ਅᇅà§§ਆᇆ২ਇᆨᇇà§©ਈᆩᇈ৪ਉᆪᇉà§«ਊᆫᇊ৬ᆬᇋà§­ᆭᇌà§®ᆮá‡৯ᆯᇎà§°à¨ᆰá‡à§±à¨ᆱá‡à§²ᆲᇑà§³ᆳᇒà§´ਓᆴᇓà§µਔᆵᇔà§¶ਕᆶᇕà§·ਖᆷᇖ৸ਗᆸᇗà§¹ਘᆹᇘ৺ਙᆺᇙਚᆻᇚਛᆼᇛਜᆽᇜà¨ᆾá‡ਞᆿᇞਟᇟਠᇠਡà©€ᇡሀਢà©ᇢáˆਣà©‚ᇣሂਤᇤሃਥᇥሄਦᇦህਧᇧሆਨੇᇨੈᇩለਪᇪሉਫᇫሊਬà©‹ᇬላਭੌᇭሌਮà©ᇮáˆਯᇯሎਰᇰáˆᇱáˆਲᇲሑਲ਼ᇳሒᇴሓਵᇵሔਸ਼ᇶሕᇷሖਸᇸሗਹᇹመà©™ሙਗ਼ሚ਼à©›ማੜሜਾáˆਿਫ਼ሞሟሠሡቀàªሢá‰ંሣቂઃሤቃሥቄ੦અሦቅà©§આሧቆ੨ઇረà©©ઈሩቈ੪ઉሪà©«ઊራቊ੬ઋሬቋà©­ርቌà©®àªሮá‰੯ሯà©°àªሰੱàªሱá‰ੲઑሲቑੳሳቒà©´ઓሴቓઔስቔકሶቕખሷቖગሸઘሹቘઙሺચሻቚછሼቛજሽቜàªሾá‰ઞሿટઠበડà«€ቡኀઢà«ቢáŠણà«‚ባኂતૃቤኃથà«„ብኄદà«…ቦኅધቧኆનેቨૈቩኈપૉቪફቫኊબà«‹ቬኋભૌቭኌમà«ቮáŠયቯરተà«ቱáŠલቲኑળታኒቴናવትኔશቶንષቷኖસቸኗહቹኘቺኙቻኚ઼ቼኛઽችኜાቾáŠિቿኞኟà« አኡá‹€à¬ኢଂኣá‹‚ଃኤዃእá‹„૦ଅኦá‹…à«§ଆኧ૨ଇከà«©ଈኩወ૪ଉኪዉà««ଊካዊ૬ଋኬá‹‹à«­ଌክዌà«®ኮá‹૯ዎà¬ኰà¬á‹ኲá‹‘ኳá‹’ଓኴá‹“ଔኵá‹”କá‹•ଖá‹–ଗኸଘኹዘଙኺá‹™ଚኻዚଛኼá‹›ଜኽዜà¬ኾá‹ଞዞଟዟଠá‹ à­€ଡá‹¡ጀà­ଢá‹¢áŒà­‚ଣá‹£ጂà­ƒତዤጃଥá‹¥ጄଦዦጅଧá‹§ጆà­‡ନየጇୈዩገପዪጉଫá‹«ጊà­‹ବዬጋà­Œଭá‹­ጌà­ମá‹®áŒଯጎରá‹°ዱáŒଲዲଳዳጒá‹´ጓድጔଶá‹¶ጕà­–ଷá‹·à­—ସዸହዹጘዺጙá‹»ጚ଼ዼጛà­œଽዽጜà­ାዾáŒିá‹¿ጞà­Ÿà­ ጠà­¡ጡá€ጢáஂጣá‚ஃጤáƒጥá„à®…à­¦ጦá…ஆà­§ጧá†இà­¨ጨஈà­©ጩáˆஉà­ªጪá‰ஊà­«ጫáŠà­¬ጬá‹à­­ጭáŒà­®ጮáஎà­¯ጯáŽà®à­°ጰáà®ጱáጲá‘à®’ጳá’ஓጴá“à®”ጵá”கጶá•ጷá–ጸá—ጹá˜à®™ጺá™சጻášጼஜጽጾஞጿடீá¡à¯á¢ூணá£தá¤á¥á¦ெá§ேநá¨ைனá©பáªொá«ோá¬ௌá­à¯à®®á®யá¯à®°á°à®±á±லá²ளá³à®´á´வáµá¶à®·á·ௗஸá¸ஹá¹áºá»á¼ாிᎠᎡá€à°Ꭲáà°‚Ꭳá‚à°ƒᎤáƒᎥá„à°…Ꭶá…௧à°†Ꭷá†௨à°‡Ꭸá‡௩à°ˆᎩáˆ௪à°‰Ꭺá‰௫à°ŠᎫáŠ௬à°‹Ꭼá‹௭à°ŒᎭáŒ௮Ꭾá௯à°ŽᎯáŽ௰à°Ꮀá௱à°Ꮁá௲Ꮂá‘à°’Ꮃá’à°“Ꮄá“à°”Ꮅá”à°•Ꮆá•à°–Ꮇá–à°—Ꮈá—à°˜Ꮉá˜à°™Ꮊá™à°šᎻášà°›Ꮌá›à°œᎽáœà°Ꮎáà°žᎿážà°ŸáŸà° á à°¡à±€á¡à°¢à±á¢áà°£ూá£á‚à°¤ృá¤áƒà°¥ౄá¥á„à°¦á¦á…à°§ెá§á†à°¨ేá¨á‡ైá©áˆà°ªáªá‰à°«ొá«áŠà°¬ోá¬á‹à°­ౌá­áŒà°®à±á®áà°¯á¯áŽà°°á°áà°±á±áà°²á²á‘豈à°³á³á’ï¤á´á“車à°µá”賈à°¶ౕá•滑à°·à±–á–串à°¸á—句à°¹á˜龜á™龜áš契á›金áœ喇à°¾á奈à°¿ážáŸï¤à± á 癩ౡá¡á‘€ï¤á¢á‘ï¤ಂá£á‘‚螺ಃá¤ᑃ裸á¥á‘„邏౦ಅá¦á‘…樂à±§ಆá§ᑆ洛౨ಇá¨ᑇ烙౩ಈá©ᑈ珞౪ಉáªᑉ落౫ಊá«ᑊ酪౬ಋá¬á‘‹駱à±­ಌá­ᑌ亂à±®á®á‘卵ï¤౯ಎá¯ᑎ爛à²á°á‘蘭à²á±á‘鸞á²á‘‘鹿嵐ಒá³á‘’ï¥濫ಓá´á‘“壟藍ಔáµá‘”弄襤ಕá¶á‘•籠拉ಖá·á‘–聾臘ಗá¸á‘—牢蠟ಘá¹ᑘ磊廊ಙáºá‘™賂朗ಚá»ᑚ雷浪ಛá¼á‘›壘狼ಜá½ᑜ屢郎à²á¾á‘ಞá¿ᑞ樓來ಟᑟï¥冷ಠá‘ 漏勞ಡೀᑡᒀï¥擄ಢà³á‘¢á’ï¥櫓ಣೂᑣᒂ陋爐ತೃᑤá’ƒ勒盧ಥೄᑥᒄ肋老ದᑦá’…凜蘆ಧೆá‘§á’†凌虜ನೇᑨá’‡稜路ೈá‘©á’ˆ綾露ಪᑪá’‰菱魯ಫೊá‘«á’Š陵鷺ಬೋᑬá’‹讀碌ಭೌá‘­á’Œ拏祿樂綠ಮà³á‘®á’ï¥菉ಯᑯá’Ž丹錄ರá‘°á’寧ಱᑱá’怒ಲᑲá’‘呂率ಳᑳá’’ï¦異á‘´á’“廬北ವᑵá’”旅磻ಶೕá‘¶á’•濾便ಷà³–á‘·á’–礪復ಸᑸá’—閭不ಹᑹá’˜驪泌ᑺá’™麗數ᑻᒚ黎索ᑼá’›力參ᑽá’œಾᑾá’曆塞ಿೞá‘¿á’ž歷省á’Ÿï¦葉à³ á’ 年說ೡá’¡á“€ï¦殺á’¢á“ï¦辰ംᒣᓂ撚沈ഃᒤᓃ漣拾ᒥᓄ煉若೦അᒦᓅ璉掠೧ആᒧᓆ秊略೨ഇᒨᓇ練亮೩ഈᒩᓈ聯兩೪ഉᒪᓉ輦凉೫à´Šá’«ᓊ蓮梁೬ഋᒬᓋ連糧鍊良೭ഌᒭᓌ列諒೮ᒮá“ï¦量೯à´Žá’¯ᓎ咽勵à´á’°á“烈à´á’±á“裂ᒲᓑ燎說ഒᒳᓒï§廉à´“á’´á““ï§‚念ഔᒵᓔ遼捻à´•á’¶á“•ï§„殮à´–á’·á“–ï§…簾ഗᒸᓗ阮獵ഘᒹᓘ劉令ങᒺᓙ杻囹à´šá’»ᓚ柳寧ഛᒼᓛജᒽᓜï§Š嶺à´á’¾á“ï§‹怜à´žá’¿ᓞï§Œ玲à´Ÿᓟï§瑩à´ á“ ï§Ž羚à´¡ീá“¡ᔀï§聆à´¢àµá“¢á”ï§鈴à´£ൂá“£ᔂï§‘零à´¤ൃᓤᔃï§’靈ഥᓥᔄï§“領à´¦ᓦá”…ï§”例à´§െá“§ᔆï§•禮à´¨േᓨᔇï§–醴ൈá“©ᔈï§—隸à´ªᓪᔉ律惡à´«ൊá“«ᔊï§™了ï§š僚à´¬ോᓬᔋï§›寮à´­ൌá“­ᔌï§œ尿à´®àµá“®á”ï§料à´¯ᓯᔎï§ž樂à´°á“°á”ï§Ÿà´±ᓱá”ï§ à´²ᓲᔑ切ï§¡à´³ᓳá”’ï¨ï§¢à´´á“´ᔓ拓泥വᓵá””糖理à´¶á“¶ᔕ宅痢ഷᓷᔖ洞罹à´¸ൗᓸá”—暴ï§§à´¹ᓹᔘ輻裡ᓺá”™行ï§©á“»ᔚᓼá”›降離ᓽᔜ見ï§«à´¾ᓾá”廓溺à´¿á“¿ᔞ兀ï§­ᔟï¨ï§®ൠá” 﨎璘ൡᔡá•€ï¨ï§°ᔢá•ï¨ï§±à¶‚ᔣá•‚﨑ï§²ඃᔤᕃ晴ï§³ᔥá•„﨓ï§´൦à¶…ᔦá•…﨔ï§µ൧ආá”§ᕆ凞ï§¶൨ඇᔨᕇ猪ï§·൩ඈᔩᕈ益笠൪ඉᔪᕉ礼ï§¹神狀൫à¶Šᔫᕊ祥ï§»൬à¶‹ᔬá•‹福ï§¼൭ඌᔭᕌ靖ï§½൮à¶á”®á•ï¨ï§¾൯à¶Žᔯᕎ羽ï§¿à¶á”°á•﨟à¶á”±á•蘒à¶‘ᔲá•‘﨡à¶’ᔳá•’諸à¶“á”´á•“﨣à¶”ᔵá•”﨤à¶•á”¶á••逸à¶–á”·á•–都ᔸá•—﨧ᔹᕘ﨨ᔺᕙකᔻᕚ﨩à¶›ᔼá•›飯à¶œᔽᕜ飼à¶ᔾá•館à¶žᔿᕞ鶴à¶Ÿᕟචᕠඡවᕡᖀජà·á•¢á–ඣෂᕣᖂඤà·ƒᕤᖃඥහᕥᖄඦà·…ᕦᖅටෆᕧᖆඨᕨᖇඩᕩᖈඪᕪᖉණ්ᕫᖊඬᕬᖋතᕭᖌථᕮá–දᕯá–Žà¶°à·á•°á–à¶±à·ᕱá–à·‘ᕲᖑඳිᕳᖒපීᕴᖓඵුᕵᖔබᕶᖕභූᕷᖖමᕸᖗඹෘᕹá–˜යà·™ᕺᖙරේᕻᖚෛᕼᖛලොᕽá–œà·ᕾá–à·žá•¿á–žà·Ÿá–Ÿá– á–¡á—€à¸á–¢á—ขᖣᗂฃᖤᗃคᖥᗄฅᖦᗅฆá–§á—†งᖨᗇจá–©á—ˆฉᖪᗉชá–«á—Šซᖬᗋฌá–­á—Œà¸á–®á—ฎᖯᗎà¸á–°á—à¸á–±á—à·²ฑᖲᗑෳฒᖳᗒ෴ณá–´á—“ดᖵᗔตá–¶á—•ถá–·á—–ทᖸᗗธᖹᗘนᖺᗙบᖻᗚปᖼᗛผᖽᗜà¸á–¾á—พá–¿á—žฟá—Ÿภá— มเá—¡ᘀยà¹á—¢á˜รโá—£ᘂฤใá—¤ᘃลไá—¥ᘄฦๅá—¦ᘅวๆá—§ᘆศ็á—¨ᘇษ่á—©ᘈส้á—ªᘉห๊á—«ᘊฬ๋á—¬ᘋอ์á—­ᘌฮà¹á—®á˜ฯ๎á—¯ᘎะà¹á—°á˜ัà¹á—±á˜า๑á—²ᘑffำ๒á—³ᘒï¬ิ๓á—´ᘓflี๔á—µᘔffiึ๕á—¶ᘕfflื๖á—·ᘖุ๗á—¸ᘗſtู๘á—¹ᘘstฺ๙á—ºᘙ๚á—»ᘚ๛á—¼ᘛá—½ᘜá—¾á˜฿á—¿ᘞᘟᘠᘡᙀàºᘢá™ຂᘣᙂᘤᙃຄᘥᙄﬓᘦá™…ﬔﬕᘧᙆﬖງᘨᙇﬗຈᘩᙈᘪᙉຊᘫᙊᘬᙋᘭᙌàºᘮá™ï¬ᘯᙎﬞᘰá™ײַᘱá™ﬠᘲᙑï­€ﬡᘳá™’ï­ﬢᘴᙓﬣດᘵᙔףּﬤຕᘶᙕຖᘷá™–ï­„ﬥທᘸá™—ﬦᘹᙘï­†ﬧນᘺᙙקּﬨບᘻᙚï­ˆ﬩ປᘼᙛשּשׁຜᘽᙜï­Šשׂàºᘾá™ï­‹שּׁພᘿᙞï­Œשּׂຟᙟï­אַá™ ï­Žאָມເᙡ ï­אּຢà»ᙢášï­בּຣໂᙣᚂﭑגּໃᙤᚃï­’דּລໄᙥᚄﭓהּï­”וּᙦáš…ï­•זּວໆá™§ᚆï­–ᙨᚇï­—טּ່ᙩᚈï­˜יּສ້ᙪᚉï­™ךּຫ໊ᙫᚊï­šכּ໋ᙬᚋﭛלּອ໌á™­ᚌï­œຮà»á™®ášï­מּຯᙯᚎï­žະá™°ášï­Ÿັà»á™±ášï­ າ໑ᙲáš‘ﮀï­¡ຳà»’ᙳáš’ï®ï­¢ິ໓á™´áš“ﮂï­£ີà»”ᙵáš”ຶ໕á™¶áš•ﮃï­¤ືà»–áš–ﮄï­¥ຸà»—áš—ï®…ï­¦ູ໘ᚘﮆﭧ໙ᚙﮇï­¨ົáššﮈï­©ຼáš›ﮉï­ªຽໜášœﮊï­«à»ﮋï­¬ﮌï­­ï®ï­®áš ﮎï­¯ༀáš¡ᛀï®ï­°à¼ᚢá›ï®ï­±༂ᚣᛂﮑï­²༃ᚤᛃï®’ï­³ﮓï­´༄ᚥᛄﮔﭵ༅ᚦá›…ﮕï­¶༆áš§ᛆï®–ï­·༇ᚨᛇï®—ï­¸༈áš©ᛈﮘï­¹༉ᚪᛉﮙﭺ༊áš«ᛊﮚï­»་ᚬᛋﮛﭼ༌áš­ᛌﮜï­½à¼áš®á›ï®ï­¾༎ᚯᛎﮞï­¿à¼áš°á›ﮟà¼áš±á›ï® ༑áš²ᛑﮡ༒ᚳᛒﮢ༓áš´ᛓ༔ᚵᛔﮣ༕áš¶ᛕﮤ༖áš·á›–ﮥ༗ᚸá›—ﮦ༘áš¹ᛘï®§༙ᚺá›™ﮨ༚áš»ᛚﮩ༛ᚼᛛﮪ༜áš½ᛜﮫà¼áš¾á›ﮬ༞áš¿ᛞï®­༟ᛟï®®༠á› ﮯ༡ཀᛡï®°༢à½ᛢï®±༣གᛣ༤གྷᛤﯓ༥ངᛥﯔ༦ཅᛦﯕ༧ཆá›§ﯖ༨ཇᛨﯗ༩ᛩﯘ༪ཉᛪﯙ༫ཊ᛫ﯚ༬ཋ᛬ﯛ༭ཌá›­ﯜ༮à½á›®ï¯༯ཎᛯﯞ༰à½á›°ﯟ༱à½ﯠ༲དï°€ﯡ༳དྷ༴ནï°ﯢ༵པï°‚ﯣ༶ཕï°ƒﯤ༷བï°„ﯥ༸བྷï°…ﯦ༹མï°†ﯧ༺ཙï°‡ﯨ༻ཚï°ˆﯩ༼ཛï°‰ﯪ༽ཛྷï°Šﯫ༾à½ï°‹ﯬ༿ཞï°Œﯭཟï°ﯮའï°Žﯯཡྀï°ﯰརà¾ï°ﯱï°‘ﯲལྂï°’ﯳཤྃï°“ﯴཥ྄ï°”ﯵས྅ï°•ﯶཧ྆ï°–ﯷཨ྇ï°—ﯸཀྵྈï°˜ﯹཪྉï°™ﯺྊï°šﯻྋï°›ﯼï°œﯽï°ﯾï°žﯿï°Ÿཱà¾ï° ིྑཱིྒﱀﰡུྒྷï±ï°¢ཱུྔﱂï°£ྲྀྕﱃï°¤ཷྖﱄï°¥ླྀྗï±…ï°¦ཹﱆï°§ེྙﱇï°¨ཻྚﱈï°©ོྛﱉï°ªཽྜﱊï°«ཾà¾ﱋï°¬ཿྞﱌï°­ྟï±ï°®ྠﱎï°¯ྡà¿€កï±ï°°ï±ï°±ྡྷà¿ážﱑï°²ྣ࿂គﱒﰳྤ࿃ឃﱓï°´ྥ࿄ងﱔﰵྦà¿…áž…ﱕï°¶ྦྷ࿆ឆï±–ï°·ྨ࿇ជï±—ï°¸ྩ࿈ឈﱘï°¹ྪ࿉ញﱙﰺྫ࿊ដﱚï°»ྫྷ࿋ឋﱛﰼྭ࿌ឌﱜï°½ྮážï±ï°¾ྯណﱞï°¿ྰà¿ážﱟྱážྲទﱠླáž’ï²€ﱡྴáž“ï²ï±¢ྵáž”ﲂï±£ྶáž•ﲃﱤྷáž–ﲄï±¥ྸáž—ï²…ﱦྐྵមﲆï±§ྺáž™ﲇﱨྻážšﲈﱩྼáž›ﲉﱪážœﲊﱫ྾ážﲋﱬ྿ážžﲌï±­សï²ï±®áž ﲎﱯï²ï±°áž¡ៀï²ï±±អáŸﲑï±²ឣែï²’ï±³ឤៃﲓï±´ឥោﲔﱵឦៅﲕï±¶áž§ំï²–ï±·ឨះï²—ﱸáž©ៈﲘï±¹ឪ៉ï²™ﱺáž«៊ﲚï±»ឬ់ﲛﱼឭ៌ﲜﱽឮáŸï²ï±¾ឯ៎ﲞﱿáž°áŸáž±áŸﲟáž²៑ï² áž³្ï³€ﲡáž´៓ï³ï²¢ážµ។ﳂﲣា៕ﳃﲤáž·៖ﳄï²¥ីៗï³…ﲦáž¹៘ﳆï²§ឺ៙ﳇﲨáž»៚ﳈﲩáž¼៛ﳉﲪáž½ៜﳊﲫáž¾ﳋﲬáž¿ﳌï²­ï³ï²®ﳎﲯ០ï³ï²°១á €ï³ï²±២á ﳑï²²៣á ‚ï³’ï²³៤á ƒﳓï²´៥᠄ﳔﲵ៦á …ﳕï²¶៧᠆ﳖﲷ៨᠇ﳗﲸ៩á ˆﳘﲹ᠉ﳙﲺá Šﳚﲻ᠋ﳛﲼ᠌ﳜï²½á ï³ï²¾á Žﳞﲿá ﳟá ‘ï³ á ’ï´€ﳡá “ï´ï³¢á ”ﴂﳣ᠕ﴃﳤ᠖ﴄﳥ᠗ﴅﳦ᠘ﴆﳧ᠙ﴇﳨï´ˆﳩï´‰ﳪï´Šﳫï´‹ﳬﴌﳭï´ï³®ï´Žﳯá  ï´ï³°á ¡á¡€ ï´ï³±á ¢á¡â€ï´‘ﳲᠣᡂ ﴒﳳᠤᡃ ﴓﳴᠥᡄ ﴔﳵᠦᡅ ï´•ï³¶á §ᡆ ï´–ï³·á ¨ᡇ ï´—ﳸá ©ᡈ ﴘﳹᠪᡉ ï´™ﳺá «ᡊ ﴚﳻᠬᡋ​ﴛﳼᠭᡌ‌ﴜﳽᠮá¡â€á ¯ᡎ‎ï´ï³¾á °á¡â€ï´žﳿá ±á¡â€ï´Ÿá ²á¡‘‑ﴠᠳᡒ‒ï´¡á ´á¡“–ﴢᠵᡔ—ﴣᠶᡕ―ﴤᠷᡖ‖ﴥᠸᡗ‗ﴦᠹᡘ‘ﴧᠺᡙ’ﴨᠻᡚ‚ﴩᠼᡛ‛ﴪᠽᡜ“ï´«á ¾á¡â€ï´¬ï´­á ¿ᡞ„ï´®ᡟ‟ﴯᡠ†ï´°á¡¡ᢀ‡â€ïµï´±á¡¢á¢•âﵑﴲᡣᢂ‣â‚ïµ’ï´³ᡤᢃ․âƒﵓï´´á¡¥ᢄ‥â„ﵔﴵᡦᢅ…â…ﵕï´¶á¡§ᢆ‧â†ïµ–ï´·ᡨᢇ
ﵗﴸᡩᢈ
âˆﵘï´¹ᡪᢉ‪â‰ïµ™ï´ºá¡«ᢊ‫âŠﵚï´»ᡬᢋ‬â‹ïµ›ï´¼á¡­ᢌ‭âŒá¡®á¢‮âﵜï´½ᡯᢎ ïµï´¾á¡°á¢‰ﵞï´¿ᡱá¢‱ﵟᡲᢑ′ïµ ᡳᢒ″ï¶€ﵡá¡´ᢓ‴ï¶ïµ¢ᡵᢔ‵ﶂﵣᡶᢕ‶ﶃﵤá¡·ᢖ‷ï¶„ïµ¥ᢗ‸ï¶…ﵦᢘ‹ﶆïµ§ᢙ›ﶇﵨᢚ※ﶈﵩᢛ‼ﶉﵪᢜ‽ï¶Šﵫï¶‹ﵬá¢‾ﶌﵭᢞ‿ï¶ïµ®ᢟï¶Žﵯᢠï¶ïµ°ᢡ₀ﵱᢢâ‚ïµ²ᢣâ‚‚ï¶’ïµ³ᢤ₃ï¶“ïµ´ᢥ₄ﶔﵵᢦâ‚…ï¶•ïµ¶ᢧ₆ï¶–ïµ·ᢨ₇ï¶—ﵸᢩ₈ﶘïµ¹âª₉ï¶™ﵺâ«₊ï¶šïµ»â¬â‚‹â­₌ﶛﵼâ®â‚ﶜﵽâ¯₎ï¶ïµ¾â°ï¶žﵿﶟﶠﷀﶡâ´ï·ï¶¢âµï·‚ï¶£â¶ï·ƒﶤâ·ï·„ï¶¥â¸ï·…ﶦâ¹ï·†ï¶§âºï·‡ﶨâ»ï¶©â¼ﶪï¶«â½ﶬâ¾ï¶­â¿ï¶®ﶯ₠ﶰ₡ﶱ₢ﶲ₣ﶳ₤ﶴ₥ﶵ₦ï¶¶â‚§ï¶·₨ﶸâ‚©ï¶¹₪ﶺâ‚«€ï¶»â‚­ï¶¼â‚®ï¶½₯ﶾﶿâƒ⃒⃓⃘⃙⃚⃑⃔⃕⃖⃗⃛⃜âƒ⃞⃟⃠ï·°⃡℀ﷱ⃢â„ï·²⃣â„‚ï·³℃ﷴ℄ﷵ℅ﷶ℆ï··ℇï·¸℈ï·¹℉ℊﷺℋﷻℌâ„ℎâ„â„â„‘︠â„’ï¹€︡â„“ï¹︢â„”﹂︣â„•﹃â„–﹄â„—℘â„™ℚ﹉â„›﹊ℜ﹋â„﹌℞ï¹℟﹎â„ ï¹︰â„¡ï¹︱â„¢﹑︲℣﹒︳ℤ︴℥﹔︵Ω﹕︶â„§ï¹–︷ℨï¹—︸â„©K﹘︹â„«ï¹™︺ℬ﹚︻â„­ï¹›︼â„®﹜︽ℯï¹︾â„°﹞︿ℱ﹟Ⅎï¹ ℳﺀ﹡â„´â…“ïºï¹¢ℵâ…”ﺂ﹣ℶ⅕ﺃ﹤â„·â…–ﺄï¹¥ℸâ…—ﺅ﹦ℹâ…˜ﺆﺇ﹨℺â…™ﺈ﹩â…šﺉ﹪â…›ﺊ﹫â…œﺋâ…ﺌâ…žïºâ…Ÿﺎâ… ïºï¹°â…¡ↀïºï¹±â…¢â†ﺑﹲⅣↂﺒâ…¤Ↄﺓï¹´â…¥ﺔâ…¦ﺕï¹¶â…§ﺖﹷⅨⅩﺗﹸâ…ªﺘﹹⅫﺙﹺâ…¬ﺚﹻⅭﺛﹼⅮﺜﹽⅯïºï¹¾â…°ﺞﹿâ…±â†ﺟâ…²↑ﺠâ…³→ﻀﺡâ…´↓ï»ﺢâ…µ↔ﻂﺣâ…¶↕ﻃﺤâ…·↖ﻄﺥâ…¸↗ï»…ﺦﻆﺧâ…¹↘ﻇﺨâ…º↙ﻈﺩâ…»↚ﻉﺪâ…¼↛ﻊﺫâ…½↜ﻋﺬâ…¾â†ﻌﺭâ…¿↞ï»ﺮ↟ﻎﺯ↠ï»ﺰ↡⇀ï»ﺱ↢â‡ﻑﺲ↣⇂ï»’ﺳ↤⇃ﻓﺴ↥⇄ï»”ﺵ↦⇅ﻕﺶ↧⇆↨⇇ï»–ﺷ↩⇈ï»—ﺸ↪⇉ﻘﺹ↫⇊ï»™ﺺ↬⇋ﻚﺻ↭⇌ï»›ﺼ↮â‡ﻜﺽ↯⇎ï»ﺾ↰â‡ﻞﺿ↱â‡ﻟ↲⇑ï» ↳⇒ﻡ↴⇓ï¼ﻢ↵⇔"ﻣ↶⇕#ﻤ↷⇖$ﻥï¼…ﻦ↸⇗&ï»§↹⇘'ﻨ↺⇙(ﻩ↻⇚)ﻪ↼⇛*ﻫ↽⇜+ﻬ↾â‡,ï»­↿⇞ï¼ï»®⇟.ﻯ⇠ï¼ï»°⇡∀ï¼ï»±⇢âˆ1ﻲ⇣∂ï¼’ﻳ⇤∃3ï»´⇥∄ï¼”ﻵ⇦∅⇧∆5ï»¶⇨∇ï¼–ï»·⇩∈ï¼—ﻸ⇪∉8ﻹ⇫∊ï¼™ﻺ⇬∋:ï»»⇭∌ï¼›ﻼ⇮âˆ<⇯∎ï¼⇰âˆ>⇱âˆ?⇲∑ï¼ ⇳−ï½€A∓ï½ï¼¢∔bï¼£∕cDdï¼¥∖ï½…F∗fï¼§∘gH∙hI√iJ∛jK∜kLâˆlï¼­∞ï½ï¼®∟nO∠ï½ï¼°∡≀ï½ï¼±∢â‰qï¼²∣≂ï½’ï¼³∤≃sï¼´∥≄∦≅tU∧≆uï¼¶∨≇ï½–ï¼·∩≈ï½—X∪≉xï¼¹∫≊ï½™Z∬≋zï¼»∭≌{\∮â‰|ï¼½∯≎ï½ï¼¾∰â‰~_∱â‰∲≑∳≒ï¾€。∴≓ï¾ï½¢∵≔ツï½£テ、∶≕トï½¥∷≖ï¾…ヲ∸≗ニï½§∹≘ヌィ∺≙ネゥ∻≚ノェ∼≛ハォ∽≜ヒャ∾â‰フï½­∿≞ï¾ï½®≟ホッ≠ï¾ï½°≡⊀ï¾ï½±≢âŠムï½²≣⊂ï¾’ï½³≤⊃≥⊄モï½´≦⊅ヤオ≧⊆ユï½¶≨⊇ï¾–ï½·≩⊈ï¾—ク≪⊉リï½¹≫⊊ï¾™コ≬⊋レï½»≭⊌ロシ≮âŠワï½½≯⊎ï¾ï½¾≰âŠ゙ソ≱âŠ゚≲⊑ï¾ ≳⊒ᄀ≴⊓깏≵⊔ᅢᄂ≶⊕ï¿„ï¾¥≷⊖ï¿…ᆭ≸⊗ᅥï¾§≹⊘ᅦᄄ≺⊙ᄅ≻⊚ᆰ≼⊛ᅧᆱ≽⊜ï¿‹ᆲ≾âŠᅩï¾­≿⊞ï¿ï¾®⊟ᅫᆵ⊠ï¿ï¾°⊡⋀ᄆ⊢â‹ï¾²⊣â‹‚⊤⋃ï¿’ï¾³⊥â‹„ï¿“ï¾´⊦⋅ᅯᄉ⊧⋆ï¿•ï¾¶⊨⋇ï¿–ï¾·⊩⋈ï¿—ᄌ⊪⋉ï¾¹⊫⋊ᄎ⊬â‹‹ᅳï¾»⊭⋌ᅴᄐ⊮â‹ᅵï¾½⊯⋎ï¾¾⊰â‹⊱â‹⊲â‹‘ï¿ ⊳â‹’ï¿¡ï¿¢⊴â‹“ï¿£⊵â‹”¦⊶â‹•ï¿¥⊷â‹–₩⊸â‹—⊹⋘│⊺⋙←⊻⋚↑⊼⋛→⊽⋜↓⊾â‹ï¿­⊿⋞ï¿®⋟â‹ â‹¡⌀â‹¢âŒâ‹£⌂⋤⌃â‹¥⌄⋦⌅â‹§⌆⋨⌇â‹©⌈⋪⌉â‹«⌊⋬⌋⋭⌌â‹®âŒ�⋯⌎â‹°âŒ⋱âŒ⌑⌒⌓⌔⌕⌖⌗⌘⌙⌚⌛⌜âŒ⌞⌟⌠⌡â€⌢â⌣â‚⌤âƒ⌥â„⌦â…⌧â†⌨â‡〈âˆ〉â‰⌫âŠ⌬â‹⌭âŒ⌮â⌯âŽ⌰â⌱â⌲â‘⌳â’⌴â“⌵â”⌶â•⌷â–⌸â—⌹â˜⌺â™⌻âš⌼â›⌽âœ⌾â⌿âžâŸâ â¡⎀â¢âŽâ£⎂â¤⎃â¥⎄â¦⎅â§⎆â¨⎇â©⎈âª⎉â«⎊â¬⎋â­⎌â®âŽâ¯⎎â°âŽâ±âŽâ²⎑â³⎒â´⎓âµ⎔â¶⎕â·⎖â¸⎗â¹⎘âº⎙â»⎚â½â¾â¿â€ââ‚âƒâ„â…â†â‡âˆâ‰âŠâ‹âŒââŽâââ‘â’â“â”â•â–â—â˜â™âšâ›âœââžâŸâ â¡â‘€â¢â‘â£â‘‚â¤⑃â¥â‘„â¦â‘…⑆⑇⑈⑉⑊①②⒀③â’④⒂⑤⒃⑥⒄⑦â’…â‘§â’†⑨⒇⑩⒈⑪⒉⑫⒊⑬⒋⑭⒌⑮â’⑯â’Žâ‘°â’⑱â’⑲â’‘⑳â’’â‘´â’“⑵⒔⑶⒕⑷⒖⑸â’—⑹â’˜⑺⒙⑻⒚⑼â’›⑽â’œ⑾â’⑿⒞⒟⒠⒡Ⓚ⒢â“⒣Ⓜ⒤Ⓝ⒥Ⓞ⒦Ⓟ⒧Ⓠâ’¨Ⓡâ’©Ⓢâ’ªⓉâ’«Ⓤ⒬Ⓥ⒭Ⓦâ’®â“â’¯Ⓨâ’°â“â’±â“⒲ⓑ⒳ⓒ⒴ⓓ⒵ⓔⒶⓕⒷⓖⒸⓗⒹⓘⒺⓙⒻⓚⒼⓛⒽⓜâ’¾â“â’¿ⓞⓟâ“ â“¡─â“¢â”â“£│ⓤ┃â“¥┄ⓦâ”…â“§┆ⓨ┇â“©┈⓪┉┊┋┌â”┎â”â”┑â”’┓â””┕â”–â”—┘â”™┚â”›├â”┞┟â” ┡â•€┢â•┣â•‚┤╃┥â•„┦â•…â”§╆┨╇┩╈┪╉┫╊┬â•‹â”­╌â”®â•┯╎â”°â•â”±â•┲â•‘┳â•’â”´â•“┵╔┶╕┷╖┸â•—┹╘┺╙┻╚┼â•›┽╜┾â•┿╞╟╠╡▀╢â–╣▂╤▃╥▄╦â–…â•§â–†╨▇╩█╪▉╫▊╬▋╭▌╮â–╯â–Žâ•°â–╱â–╲â–‘╳â–’â•´â–“╵▔╶▕╷╸╹╺â•»╼╽╾â•¿â– Ḁâ–¡â—€á¸â–¢â—Ḃ▣◂ḃ▤◃Ḅ▥◄ḅ▦◅Ḇâ–§â—†ḇ▨◇Ḉâ–©â—ˆḉ▪◉Ḋâ–«â—Šḋ▬○Ḍâ–­â—Œá¸â–®â—Ḏ▯◎á¸â–°â—á¸â–±â—ḑ▲◑Ḓ△◒ḓâ–´â—“Ḕ▵◔ḕâ–¶â—•Ḗâ–·â—–ḗ▸◗Ḙ▹◘ḙ►◙Ḛ▻◚ḛ▼◛Ḝ▽◜á¸â–¾â—Ḟâ–¿â—žḟâ—ŸḠâ— ḡṀ◡☀Ḣá¹â—¢â˜ḣṂâ—£☂Ḥṃâ—¤☃ḥṄâ—¥☄Ḧá¹…â—¦★ḧṆâ—§☆Ḩṇâ—¨☇ḩṈâ—©☈Ḫṉâ—ª☉ḫṊâ—«☊Ḭṋâ—¬☋ḭṌâ—­☌Ḯá¹â—®â˜ḯṎâ—¯☎Ḱá¹â—°â˜ḱá¹â—±â˜Ḳṑâ—²☑ḳá¹’â—³☒Ḵṓâ—´☓ḵṔ◵Ḷṕâ—¶ḷá¹–â—·Ḹá¹—ḹṘḺá¹™☙ḻṚ☚Ḽá¹›☛ḽṜ☜Ḿá¹â˜ḿṞ☞ṟ☟á¹ ☠ṡẀ☡♀á¹¢áº☢â™á¹£Ẃ☣♂Ṥẃ☤♃á¹¥Ẅ☥♄Ṧẅ☦â™…á¹§Ẇ☧♆Ṩẇ☨♇ṩẈ☩♈Ṫẉ☪♉ṫẊ☫♊Ṭẋ☬♋á¹­Ẍ☭♌á¹®áº☮â™ṯẎ☯♎á¹°áº☰â™á¹±áº☱â™á¹²ẑ☲♑á¹³Ẓ☳â™’á¹´ẓ☴♓á¹µẔ☵♔Ṷẕ☶♕á¹·ẖ☷â™–Ṹẗ☸â™—á¹¹ẘ☹♘Ṻẙ☺♙ṻẚ☻♚á¹¼ẛ☼♛ṽ☽♜á¹¾☾â™ṿ☿♞♟Ạâ™ ạỀ♡Ảá»♢ảỂ♣Ấể♤ấỄ♥Ầá»…♦ầỆâ™§Ẩệ♨ẩỈ♩Ẫỉ♪ẫỊ♫Ậị♬ậỌâ™­Ắá»â™®ắỎ♯Ằá»â™°ằá»â™±Ẳốẳá»’Ẵồẵá»”Ặổặá»–Ẹá»—ẹỘẺá»™ẻỚẼá»›ẽỜẾá»ếỞởá» ỡá¼€Ợá¼ợἂỤἃụἄỦá¼…á»§ἆỨἇứἈỪἉừἊỬἋá»­Ἄá»®á¼ữἎá»°á¼á»±á¼Ỳἑỳá¼’á»´ἓỵἔỶἕá»·ỸỹἘá¼™Ἒá¼›Ἔá¼á¼ ἡὀἢá½âœá¼£ὂ✂ἤὃ✃á¼¥ὄ✄ἦá½…á¼§✆Ἠ✇ἩὈ✈ἪὉ✉ἫὊἬὋá¼­Ὄ✌á¼®á½âœἯ✎á¼°âœá¼±á½âœá¼²ὑ✑ἳὒ✒á¼´ὓ✓ἵὔ✔á¼¶ὕ✕á¼·á½–✖Ἰá½—✗á¼¹✘Ἲá½™✙á¼»✚ἼὛ✛á¼½✜á¼¾á½âœἿ✞Ὗ✟á½ ✠ὡá¾€✡â€á½¢á¾✢âá½£ᾂ✣â‚ὤᾃ✤âƒá½¥ᾄ✥â„ὦá¾…✦â…á½§ᾆ✧â†Ὠᾇâ‡Ὡᾈ✩âˆὪᾉ✪â‰Ὣᾊ✫âŠὬᾋ✬â‹á½­ᾌ✭á½®á¾✮âὯᾎ✯á½°á¾✰âá½±á¾✱âá½²ᾑ✲â‘έᾒ✳â’á½´ᾓ✴ήᾔ✵á½¶ᾕ✶á½·á¾–✷â–ὸá¾—✸á½¹ᾘ✹â˜ὺá¾™✺â™á½»ᾚ✻âšá½¼á¾›✼â›á½½ᾜ✽âœá¾✾âᾞ✿âžᾟá¾ ᾡá¿€â¡➀á¾¢á¿â¢âžá¾£á¿‚â£âž‚ᾤῃâ¤➃ᾥῄâ¥âž„ᾦâ¦âž…á¾§ῆâ§➆ᾨῇ➇ᾩῈ➈ᾪΈ➉ᾫῊ➊ᾬΉ➋ᾭῌ➌á¾®á¿âžᾯ῎➎á¾°á¿âžá¾±á¿âžá¾²á¿‘➑ᾳῒ➒ᾴΐ➓➔ᾶâ¶á¾·á¿–â·Ᾰá¿—â¸á¾¹Ῐâ¹➘Ὰá¿™âºâž™á¾»Ὶâ»âžšá¾¼á¿›â¼âž›á¾½â½âžœá¾¾á¿â¾âž᾿῞â¿âžž῟➟ῠ➠ῡ➡ῢ➢á¿£➣ῤ➤á¿¥➥ῦ➦á¿§âž§Ῠ➨á¿©âž©Ὺ➪á¿«âž«Ῥ➬῭➭΅➮`➯âž±ῲâž²ῳ➳ῴ➴➵ῶ➶ῷ➷Ὸ➸Όâž¹Ὼ➺Ώ➻ῼâž¼´âž½῾➾⠀â â ‚⠃⠄⠅⠆⠇⠈⠉⠊⠋⠌â â Žâ â â ‘⠒⠓⠔⠕⠖⠗⠘⠙⠚⠛⠜â â žâ Ÿâ  â ¡â¡€ â ¢â¡ã€â £â¡‚。â ¤⡃〃⠥⡄〄⠦⡅々â §⡆〆â ¨⡇〇â ©⡈〈â ª⡉〉â «⡊《⠬⡋》â ­⡌「â ®â¡ã€â ¯⡎『â °â¡ã€â ±â¡ã€â ²â¡‘】⠳⡒〒â ´â¡“〓⠵⡔〔â ¶â¡•〕â ·â¡–〖⠸⡗〗â ¹⡘〘⠺⡙〙â »⡚〚⠼⡛〛â ½⡜〜â ¾â¡ã€â ¿⡞〞⡟〟â¡ 〠â¡¡⢀〡â¡¢â¢〢ãâ¡£⢂〣ã‚⡤⢃〤ãƒâ¡¥⢄〥ã„⡦⢅〦ã…â¡§⢆〧ã†⡨⢇〨ã‡â¡©⢈〩ãˆ⡪⢉〪ã‰â¡«⢊〫ãŠ⡬⢋〬ã‹â¡­⢌〭ãŒâ¡®â¢〮ã⡯⢎〯ãŽâ¡°â¢〰ã⡱â¢〱ã⡲⢑〲ã‘⡳⢒〳ã’â¡´⢓〴ã“⡵⢔〵ã”â¡¶⢕〶ã•â¡·⢖〷ã–⡸⢗〸ã—⡹⢘〹ã˜⡺⢙〺ã™â¡»⢚ãš⡼⢛ã›⡽⢜ãœ⡾â¢〾ãâ¡¿⢞〿ãž⢟ãŸ⢠ã ⢡⣀ã¡ã‚€⢢â£ã¢ã‚⢣⣂ã£ã‚‚⢤⣃ã¤ゃ⢥⣄ã¥ã‚„⢦⣅ã¦ã‚…⢧⣆ã§ゆ⢨⣇ã¨ょ⢩⣈ã©よ⢪⣉ãªら⢫⣊ã«り⢬⣋ã¬ã‚‹⢭⣌ã­れ⢮â£ã®ã‚⢯⣎ã¯ゎ⢰â£ã°ã‚⢱â£ã±ã‚⢲⣑ã²ã‚‘⢳⣒ã³ã‚’⢴⣓ã´ã‚“⢵⣔ãµã‚”⢶⣕ã¶⢷⣖ã·⢸⣗ã¸⢹⣘ã¹⢺⣙ãºã‚™⢻⣚ã»゚⢼⣛ã¼ã‚›⢽⣜ã½゜⢾â£ã¾ã‚⢿⣞ã¿ゞ⣟⣠⣡ã‚¡ダ⣢ã‚¢ãƒ⣣ã‚£ヂ⣤イッ⣥ã‚¥ツ⣦ウヅ⣧ã‚§テ⣨エデ⣩ã‚©ト⣪オド⣫ã‚«ナ⣬ガニ⣭ã‚­ヌ⣮ã‚®ãƒ⣯クノ⣰ã‚°ãƒ⣱ケãƒ⣲ゲパ⣳コヒ⣴ã‚´ビ⣵サピ⣶ã‚¶フ⣷ã‚·ブ⣸ジプ⣹スヘ⣺ズベ⣻ã‚»ペ⣼ゼホ⣽ソボ⣾ゾãƒ⣿ã‚¿マミムメモャヤュユã„…ョㄆヨㄇラㄈリㄉルㄊレã„‹ロㄌヮã„ワㄎヰã„ヱã„ヲã„‘ンã„’ヴã„“ヵã„”ヶã„•ヷã„–ヸã„—ヹㄘヺã„™・ㄚーã„›ヽㄜヾã„ㄞㄟㄠㄡㅀㄢã…ㄣㅂㄤㅃㄥㅄㄦã……ã„§ã…†ㄨㅇㄩㅈㄪㅉㄫㅊㄬã…‹ã…Œã…ã…Žã…ㄱã…ㄲã…‘ㄳã…’ã„´ã…“ㄵㅔㄶㅕㄷㅖㄸã…—ㄹã…˜ㄺㅙㄻㅚㄼã…›ㄽã…œㄾã…ã„¿ã…žã…Ÿã… ã…¡ㆀã…¢ã†ã…£ㆂã…¤ㆃã…¥ㆄã…¦ㆅã…§ㆆã…¨ㆇã…©ㆈã…ªㆉã…«ㆊã…¬ㆋã…­ㆌã…®ã†ã…¯ㆎã…°ã…±ã†ã…²㆑ã…³㆒ã…´㆓ã…µ㆔ã…¶㆕ã…·㆖ã…¸㆗ã…¹㆘ã…º㆙ã…»㆚ã…¼㆛ã…½㆜ã…¾ã†ã…¿㆞㆟ㆠㆡㆢㆣㆤㆥㆦㆧㆨㆩㆪㆫㆬㆭㆮㆯㆰㆱㆲㆳㆴㆵㆶㆷ㈀ãˆ㈂㈃㈄㈅㈆㈇㈈㈉㈊㈋㈌ãˆ㈎ãˆãˆ㈑㈒㈓㈔㈕㈖㈗㈘㈙㈚㈛㈜㈠㈡㉀㈢ã‰㈣㉂㈤㉃㈥㈦㈧㈨㈩㈪㈫㈬㈭㈮㈯㈰㈱㈲㈳㈴㈵㈶㈷㈸㈹㈺㈻㈼㈽㈾㈿㉠㉡㊀㉢ãŠ㉣㊂㉤㊃㉥㊄㉦㊅㉧㊆㉨㊇㉩㊈㉪㊉㉫㊊㉬㊋㉭㊌㉮ãŠ㉯㊎㉰ãŠ㉱ãŠ㉲㊑㉳㊒㉴㊓㉵㊔㉶㊕㉷㊖㉸㊗㉹㊘㉺㊙㉻㊚㊛㊜ãŠ㉿㊞㊟㊠㊡ã‹€㊢ã‹㊣ã‹‚㊤㋃㊥ã‹„㊦ã‹…㊧㋆㊨㋇㊩㋈㊪㋉㊫㋊㊬ã‹‹㊭㊮㊯㊰ã‹ã‹‘㋒㋓㋔㋕㋖㋗㋘ã‹™㋚ã‹›㋜ã‹㋞㋟ã‹ ã‹¡㌀ã‹¢ãŒã‹£㌂㋤㌃ã‹¥㌄㋦㌅ã‹§㌆㋨㌇ã‹©㌈㋪㌉ã‹«㌊㋬㌋ã‹­㌌ã‹®ãŒ㋯㌎ã‹°ãŒ㋱ãŒ㋲㌑㋳㌒ã‹´㌓㋵㌔ã‹¶㌕ã‹·㌖㋸㌗㋹㌘㋺㌙ã‹»㌚㋼㌛㋽㌜㋾ãŒ㌞㌟㌠㌡ã€㌢ã㌣ã‚㌤ãƒ㌥ã„㌦ã…㌧ã†㌨ã‡㌩ãˆ㌪ã‰㌫ãŠ㌬ã‹㌭ãŒ㌮ã㌯ãŽ㌰ã㌱ã㌲ã‘㌳ã’㌴ã“㌵ã”㌶ã•㌷ã–㌸ã—㌹ã˜㌺ã™㌻ãš㌼ã›㌽ãœ㌾ã㌿ãžãŸã ã¡㎀ã¢ãŽã£㎂ã¤㎃ã¥㎄ã¦㎅ã§㎆ã¨㎇ã©㎈ãª㎉ã«㎊ã¬㎋ã­㎌ã®ãŽã¯㎎ã°ãŽã±ãŽã²㎑ã³㎒ã´㎓ãµ㎔ã¶㎕㎖㎗㎘㎙ã»㎚ã¼㎛ã½㎜ã¾ãŽã¿㎞㎟㎠㎡ã€㎢ã㎣ã‚㎤ãƒ㎥ã„㎦ã…㎧ã†㎨ã‡㎩ãˆ㎪ã‰㎫ãŠ㎬ã‹㎭ãŒ㎮ã㎯ãŽ㎰ã㎱ã㎲ã‘㎳ã’㎴ã“㎵ã”㎶ã•㎷ã–㎸ã—㎹ã˜㎺ã™㎻ãš㎼ã›㎽ãœ㎾ã㎿ã ã¡ã¢ã£ã¤ã¥ã¦ã§ã¨ã©ãªã«ã¬ã­ã®ã¯ã°ã±ã²ã³ã´ãµã¶ã·ã¸ã¹ãºã»ã¼ã½ã¾⺀âº⺂⺃⺄⺅⺆⺇⺈⺉⺊⺋⺌âº⺎âºâº⺑⺒⺓⺔⺕⺖⺗⺘⺙⺛⺜âº⺞⺟⺠⺡⻀⺢â»⺣⻂⺤⻃⺥⻄⺦â»…⺧⻆⺨⻇⺩⻈⺪⻉⺫⻊⺬⻋⺭⻌⺮â»⺯⻎⺰â»⺱â»⺲⻑⺳â»’⺴⻓⺵â»”⺶⻕⺷â»–⺸â»—⺹⻘⺺â»™⺻⻚⺼â»›⺽⻜⺾â»⺿⻞⻟â» ⻡â¼€⻢â¼⻣⼂⻤⼃⻥⼄⻦â¼…â»§⼆⻨⼇⻩⼈⻪⼉⻫⼊⻬⼋â»­⼌â»®â¼⻯⼎â»°â¼â»±â¼⻲⼑⻳â¼’⼓â¼”⼕â¼–â¼—⼘â¼™⼚â¼›⼜â¼⼞⼟â¼ ⼡⽀⼢â½â¼£⽂⼤⽃â¼¥⽄⼦â½…â¼§⽆⼨⽇⼩⽈⼪⽉⼫⽊⼬⽋â¼­⽌â¼®â½⼯⽎â¼°â½â¼±â½â¼²⽑⼳⽒⼴⽓⼵⽔⼶⽕â¼·â½–⼸â½—â¼¹⽘⼺⽙⼻⽚⼼⽛⼽⽜â¼¾â½⼿⽞⽟â½ ⽡⾀⽢â¾â½£⾂⽤⾃â½¥⾄⽦â¾…â½§⾆⽨⾇⽩⾈⽪⾉⽫⾊⽬⾋â½­⾌â½®â¾⽯⾎â½°â¾â½±â¾â½²⾑⽳⾒⽴⾓⽵⾔⽶⾕â½·â¾–⽸â¾—â½¹⾘⽺⾙⽻⾚⽼⾛⽽⾜â½¾â¾⽿⾞⾟â¾ ⾡⿀⾢â¿â¾£â¿‚⾤⿃⾥⿄⾦â¿…â¾§⿆⾨⿇⾩⿈⾪⿉⾫⿊⾬â¿‹â¾­⿌â¾®â¿⾯⿎â¾°â¿â¾±â¿â¾²â¿‘⾳⿒⾴⿓⾵⿔⾶⿕⾷⾸â¾¹⾺⾻⾼⾽⾾⾿â¿°⿱⿲⿳â¿´⿵â¿¶â¿·⿸⿹⿺â¿»€Â‚ƒ„Â…†‡ˆ‰Š‹ÂŒÂŽ‘’“”•–—˜™š›œÂžŸ ¡À¢Ã£Â¤Ã¥ĦŧƨǩȪɫʬ˭̮ïΰñòѳҴӵԶշָ׹غٻڼ۽ܾÿÞßàÄ€áÄâÄ‚ãăäĄåąæĆçćèĈéĉêÄŠëÄ‹ìÄŒíÄîÄŽïÄðÄñÄ‘òÄ’óÄ“ôÄ”õÄ•öÄ–÷Ä—øĘùÄ™úÄšûÄ›üÄœýÄþÄžÿğĠŀġÅĢłģŃĤńĥŅĦņħŇĨňÄ©ʼnĪŊīŋĬŌĭÅĮŎįÅİÅıÅ‘IJÅ’ijœĴŔĵÅ•ĶÅ–Ä·Å—ĸŘĹÅ™ĺŚĻśļÅœĽÅľÅžÄ¿ÅŸÅ Æ€Å¡ÆÅ¢Æ‚Å£ƃŤÆ„ťƅŦƆŧƇŨƈÅ©ƉŪÆŠÅ«Æ‹ŬƌŭÆÅ®ÆŽůÆŰÆűÆ‘ŲÆ’ųƓŴƔŵÆ•ŶÆ–Å·Æ—ŸƘŹÆ™źÆšÅ»Æ›żÆœŽÆžÆžÅ¿ÆŸÆ Ç€Æ¡ÇƢǂƣǃƤDŽƥDžƦdžƧLJƨLjÆ©ljƪNJƫNjƬÇŒÆ­ÇÆ®ÇŽƯÇưÇƱÇ‘ƲÇ’ƳǓƴǔƵÇ•ƶÇ–Æ·Ç—ƸƹǘƺǙƻǚƼÇ›ƽÇœƾÇÆ¿ÇžÇŸÇ Ç¡È€Ç¢ÈǣȂǤȃǥȄǦÈ…ǧȆǨȇÇ©ȈǪȉǫȊǬȋǭȌǮÈǯÈŽǰÈDZÈDzÈ‘dzÈ’Ç´È“ǵÈ”ǶȕǷȖǸÈ—ǹȘǺșǻȚǼÈ›ǽÈœǾÈǿȞȟȢȣȤÈ¥ȦȧȨÈ©ȪÈ«ȬÈ­È®ȯȰȱÉȲÉ‘ȳɒɓɔɕɖɗɘəɚɛɜÉɞɟɠɡʀɢÊɣʂɤʃɥʄɦÊ…ɧʆɨʇÉ©ʈɪʉɫʊɬʋɭʌɮÊɯÊŽɰÊɱÊɲÊ‘ɳÊ’É´Ê“ɵÊ”ɶʕɷʖɸÊ—ɹʘɺʙɻʚɼÊ›ɽÊœɾÊɿʞʟʠʡˀʢËʣ˂ʤ˃ʥ˄ʦË…ʧˆʨˇÊ©ˈʪˉʫˊʬˋʭˌËËŽʰËʱËʲË‘ʳË’Ê´Ë“ʵË”ʶ˕ʷ˖ʸË—ʹ˘ʺ˙ʻ˚ʼË›ʽËœʾËʿ˞˟ˠˡ̀ˢÌˣ̂ˤ̃˥̄˦Ì…˧̆˨̇Ë©̈˪̉˫̊ˬ̋˭̌ˮÌÌŽÌÌ̛̖̗̘̙̜̑̒̓̔̕̚Ì̡̢̞̟̠̀Ị̤̥̦́͂̓̈́Í…̧̨͇͆Ì©͈̪͉̫̬̭̮͊͋͌Í̯ÍŽ̰̱̲̳Ì´̵̶Ì·̸̹̺Ì»̼̽̾̿͢͠͡΄Î…Ά·ΈΉΊÎŒÎŽÎÎΑÎ’Í´Γ͵ΔΕΖΗΘͺΙΚΛΜ;ÎΞΟΠΡÏ€ÏΣÏ‚ΤσΥτΦÏ…ΧφΨχΩψΪωΫÏŠάÏ‹έÏŒήÏίÏŽΰαÏβÏ‘γÏ’δÏ“εÏ”ζÏ•ηÏ–θÏ—ικλÏšμÏ›νÏœξÏοϞϟϠϡЀÏ¢ÐÏ£ЂϤЃÏ¥ЄϦÐ…ϧІϨЇÏ©ЈϪЉÏ«ЊϬЋÏ­ÐŒÏ®ÐϯÐŽϰÐϱÐϲБϳÐ’ГДЕЖЗИЙКЛМÐОПРСÑ€ТÑУÑ‚ФуХфЦÑ…ЧцШчЩшЪщЫÑŠЬÑ‹ЭÑŒЮÑЯÑŽаÑбÑвÑ‘гÑ’дÑ“еÑ”жÑ•зÑ–иÑ—йјкÑ™лÑšмÑ›нÑœоÑпўџѠѡҀѢÒÑ£Ò‚Ѥ҃ѥ҄ѦÒ…ѧÒ†Ѩѩ҈Ѫ҉ѫѬѭҌѮÒѯÒŽѰÒѱÒѲÒ‘ѳÒ’Ñ´Ò“ѵÒ”ѶÒ•Ñ·Ò–ѸÒ—ѹÒ˜ѺҙѻҚѼÒ›ѽÒœѾÒѿҞҟҠҡӀҢÓңӂҤӃҥӄҦҧҨӇҩӈҪҫҬӋҭӌҮүҰұÓҲӑҳӒҴӓҵӔҶӕҷӖҸӗҹӘҺәһӚҼӛҽӜҾÓÒ¿ÓžÓŸÓ Ó¡Ó¢Ó£Ó¤Ó¥Ó¦Ó§Ó¨Ó©ÓªÓ«Ó¬Ó­Ó®Ó¯Ó°Ó±Ó²Ó³Ó´ÓµÓ¸Ó¹Õ€ÕÕ‚ÕƒÕ„Õ…Õ†Õ‡ÕˆÕ‰ÕŠÕ‹ÕŒÕÕŽÕÔ±ÕԲՑԳՒԴՓԵՔԶՕԷՖԸԹԺՙԻ՚Լ՛Խ՜ԾÕÔ¿ÕžÕŸÕ¡Ö€Õ¢Öգւդփեքզօէֆըևթժ։ի֊լխծկհձղ֑ճ֒մ֓յ֔ն֕շ֖ո֗չ֘պ֙ջ֚ռ֛ս֜վÖÕ¿ÖžÖŸÖ Ö¡×€×Ö£ׂÖ¤׃Ö¥ׄÖ¦Ö§Ö¨Ö©ÖªÖ«Ö¬Ö­Ö®Ö¯Ö°Ö±×Ö²בÖ³×’Ö´דÖµ×”Ö¶וַזָחֹט×™Ö»ךÖ¼×›Ö½לÖ¾×Ö¿מן× ס×¢×£פ×¥צ×§רשת،װױײ׳×´Ø›ØŸØ¡Ù€Ø¢ÙØ£Ù‚ؤكإلئÙ…اÙ†بهةوتىثيجًحٌخÙدÙŽذÙرÙزÙ‘سْشٓصÙ”ضٕطظعغ٠١ڀ٢ÚÙ£Ú‚Ù¤ÚƒÙ¥Ú„Ù¦Ú…Ù§Ú†Ù¨Ú‡Ù©ÚˆÙªÚ‰Ù«ÚŠÙ¬Ú‹Ù­ÚŒÚÚŽÙ°ÚÙ±ÚٲڑٳڒٴړٵڔٶڕٷږٸڗٹژٺڙٻښټڛٽڜپÚÙ¿ÚžÚŸÚ Ú¡Û€Ú¢ÛڣۂڤۃڥۄڦۅڧۆڨۇکۈڪۉګۊڬۋڭیڮÛÚ¯ÛŽÚ°ÛÚ±Ûڲۑڳےڴۓڵ۔ڶەڷۖڸۗڹۘںۙڻۚڼۛڽۜھÛÚ¿ÛžÛŸÛ Û¡Ü€Û¢Üۣ܂ۤ܃ۥ܄ۦ܅ۧ܆Û¨܇Û©܈Ûª܉۫܊۬܋ۭ܌ÜÛ°ÜÛ±Ü۲ܑ۳ܒ۴ܓ۵ܔ۶ܕ۷ܖ۸ܗ۹ܘۺܙۻܚۼܛ۽ܜ۾Üܞܟܠܡ݀ܢÝܣ݂ܤ݃ܥ݄ܦÝ…ܧ݆ܨ݇Ü©݈ܪ݉ܫ݊ܬܱܰܲܳÜ´ܵܶÜ·ܸܹܺÜ»ܼܾܽܿހÞÞ‚ÞƒÞ„Þ…Þ†Þ‡ÞˆÞ‰ÞŠÞ‹ÞŒÞÞŽÞÞÞ‘Þ’Þ“Þ”Þ•Þ–Þ—Þ˜Þ™ÞšÞ›ÞœÞÞžÞŸÞ Þ¡Þ¢Þ£Þ¤Þ¥Þ¦Þ§Þ¨Þ©ÞªÞ«Þ¬Þ­Þ®Þ¯Þ°existsopensrs-client-3.0.0/lib/RACE/MapData-01.txt0000644017777601777760000010545010770014205021307 0ustar nobodynogroup000000000000000041; 0061; Case map 0042; 0062; Case map 0043; 0063; Case map 0044; 0064; Case map 0045; 0065; Case map 0046; 0066; Case map 0047; 0067; Case map 0048; 0068; Case map 0049; 0069; Case map 004A; 006A; Case map 004B; 006B; Case map 004C; 006C; Case map 004D; 006D; Case map 004E; 006E; Case map 004F; 006F; Case map 0050; 0070; Case map 0051; 0071; Case map 0052; 0072; Case map 0053; 0073; Case map 0054; 0074; Case map 0055; 0075; Case map 0056; 0076; Case map 0057; 0077; Case map 0058; 0078; Case map 0059; 0079; Case map 005A; 007A; Case map 00B5; 03BC; Case map 00C0; 00E0; Case map 00C1; 00E1; Case map 00C2; 00E2; Case map 00C3; 00E3; Case map 00C4; 00E4; Case map 00C5; 00E5; Case map 00C6; 00E6; Case map 00C7; 00E7; Case map 00C8; 00E8; Case map 00C9; 00E9; Case map 00CA; 00EA; Case map 00CB; 00EB; Case map 00CC; 00EC; Case map 00CD; 00ED; Case map 00CE; 00EE; Case map 00CF; 00EF; Case map 00D0; 00F0; Case map 00D1; 00F1; Case map 00D2; 00F2; Case map 00D3; 00F3; Case map 00D4; 00F4; Case map 00D5; 00F5; Case map 00D6; 00F6; Case map 00D8; 00F8; Case map 00D9; 00F9; Case map 00DA; 00FA; Case map 00DB; 00FB; Case map 00DC; 00FC; Case map 00DD; 00FD; Case map 00DE; 00FE; Case map 00DF; 0073 0073; Case map 0100; 0101; Case map 0102; 0103; Case map 0104; 0105; Case map 0106; 0107; Case map 0108; 0109; Case map 010A; 010B; Case map 010C; 010D; Case map 010E; 010F; Case map 0110; 0111; Case map 0112; 0113; Case map 0114; 0115; Case map 0116; 0117; Case map 0118; 0119; Case map 011A; 011B; Case map 011C; 011D; Case map 011E; 011F; Case map 0120; 0121; Case map 0122; 0123; Case map 0124; 0125; Case map 0126; 0127; Case map 0128; 0129; Case map 012A; 012B; Case map 012C; 012D; Case map 012E; 012F; Case map 0130; 0069 0307; Case map 0132; 0133; Case map 0134; 0135; Case map 0136; 0137; Case map 0139; 013A; Case map 013B; 013C; Case map 013D; 013E; Case map 013F; 0140; Case map 0141; 0142; Case map 0143; 0144; Case map 0145; 0146; Case map 0147; 0148; Case map 0149; 02BC 006E; Case map 014A; 014B; Case map 014C; 014D; Case map 014E; 014F; Case map 0150; 0151; Case map 0152; 0153; Case map 0154; 0155; Case map 0156; 0157; Case map 0158; 0159; Case map 015A; 015B; Case map 015C; 015D; Case map 015E; 015F; Case map 0160; 0161; Case map 0162; 0163; Case map 0164; 0165; Case map 0166; 0167; Case map 0168; 0169; Case map 016A; 016B; Case map 016C; 016D; Case map 016E; 016F; Case map 0170; 0171; Case map 0172; 0173; Case map 0174; 0175; Case map 0176; 0177; Case map 0178; 00FF; Case map 0179; 017A; Case map 017B; 017C; Case map 017D; 017E; Case map 017F; 0073; Case map 0181; 0253; Case map 0182; 0183; Case map 0184; 0185; Case map 0186; 0254; Case map 0187; 0188; Case map 0189; 0256; Case map 018A; 0257; Case map 018B; 018C; Case map 018E; 01DD; Case map 018F; 0259; Case map 0190; 025B; Case map 0191; 0192; Case map 0193; 0260; Case map 0194; 0263; Case map 0196; 0269; Case map 0197; 0268; Case map 0198; 0199; Case map 019C; 026F; Case map 019D; 0272; Case map 019F; 0275; Case map 01A0; 01A1; Case map 01A2; 01A3; Case map 01A4; 01A5; Case map 01A6; 0280; Case map 01A7; 01A8; Case map 01A9; 0283; Case map 01AC; 01AD; Case map 01AE; 0288; Case map 01AF; 01B0; Case map 01B1; 028A; Case map 01B2; 028B; Case map 01B3; 01B4; Case map 01B5; 01B6; Case map 01B7; 0292; Case map 01B8; 01B9; Case map 01BC; 01BD; Case map 01C4; 01C6; Case map 01C5; 01C6; Case map 01C7; 01C9; Case map 01C8; 01C9; Case map 01CA; 01CC; Case map 01CB; 01CC; Case map 01CD; 01CE; Case map 01CF; 01D0; Case map 01D1; 01D2; Case map 01D3; 01D4; Case map 01D5; 01D6; Case map 01D7; 01D8; Case map 01D9; 01DA; Case map 01DB; 01DC; Case map 01DE; 01DF; Case map 01E0; 01E1; Case map 01E2; 01E3; Case map 01E4; 01E5; Case map 01E6; 01E7; Case map 01E8; 01E9; Case map 01EA; 01EB; Case map 01EC; 01ED; Case map 01EE; 01EF; Case map 01F0; 006A 030C; Case map 01F1; 01F3; Case map 01F2; 01F3; Case map 01F4; 01F5; Case map 01F6; 0195; Case map 01F7; 01BF; Case map 01F8; 01F9; Case map 01FA; 01FB; Case map 01FC; 01FD; Case map 01FE; 01FF; Case map 0200; 0201; Case map 0202; 0203; Case map 0204; 0205; Case map 0206; 0207; Case map 0208; 0209; Case map 020A; 020B; Case map 020C; 020D; Case map 020E; 020F; Case map 0210; 0211; Case map 0212; 0213; Case map 0214; 0215; Case map 0216; 0217; Case map 0218; 0219; Case map 021A; 021B; Case map 021C; 021D; Case map 021E; 021F; Case map 0220; 019E; Case map 0222; 0223; Case map 0224; 0225; Case map 0226; 0227; Case map 0228; 0229; Case map 022A; 022B; Case map 022C; 022D; Case map 022E; 022F; Case map 0230; 0231; Case map 0232; 0233; Case map 0345; 03B9; Case map 037A; 0020 03B9; Additional folding 0386; 03AC; Case map 0388; 03AD; Case map 0389; 03AE; Case map 038A; 03AF; Case map 038C; 03CC; Case map 038E; 03CD; Case map 038F; 03CE; Case map 0390; 03B9 0308 0301; Case map 0391; 03B1; Case map 0392; 03B2; Case map 0393; 03B3; Case map 0394; 03B4; Case map 0395; 03B5; Case map 0396; 03B6; Case map 0397; 03B7; Case map 0398; 03B8; Case map 0399; 03B9; Case map 039A; 03BA; Case map 039B; 03BB; Case map 039C; 03BC; Case map 039D; 03BD; Case map 039E; 03BE; Case map 039F; 03BF; Case map 03A0; 03C0; Case map 03A1; 03C1; Case map 03A3; 03C3; Case map 03A4; 03C4; Case map 03A5; 03C5; Case map 03A6; 03C6; Case map 03A7; 03C7; Case map 03A8; 03C8; Case map 03A9; 03C9; Case map 03AA; 03CA; Case map 03AB; 03CB; Case map 03B0; 03C5 0308 0301; Case map 03C2; 03C3; Case map 03D0; 03B2; Case map 03D1; 03B8; Case map 03D2; 03C5; Additional folding 03D3; 03CD; Additional folding 03D4; 03CB; Additional folding 03D5; 03C6; Case map 03D6; 03C0; Case map 03D8; 03D9; Case map 03DA; 03DB; Case map 03DC; 03DD; Case map 03DE; 03DF; Case map 03E0; 03E1; Case map 03E2; 03E3; Case map 03E4; 03E5; Case map 03E6; 03E7; Case map 03E8; 03E9; Case map 03EA; 03EB; Case map 03EC; 03ED; Case map 03EE; 03EF; Case map 03F0; 03BA; Case map 03F1; 03C1; Case map 03F2; 03C3; Case map 03F4; 03B8; Case map 03F5; 03B5; Case map 0400; 0450; Case map 0401; 0451; Case map 0402; 0452; Case map 0403; 0453; Case map 0404; 0454; Case map 0405; 0455; Case map 0406; 0456; Case map 0407; 0457; Case map 0408; 0458; Case map 0409; 0459; Case map 040A; 045A; Case map 040B; 045B; Case map 040C; 045C; Case map 040D; 045D; Case map 040E; 045E; Case map 040F; 045F; Case map 0410; 0430; Case map 0411; 0431; Case map 0412; 0432; Case map 0413; 0433; Case map 0414; 0434; Case map 0415; 0435; Case map 0416; 0436; Case map 0417; 0437; Case map 0418; 0438; Case map 0419; 0439; Case map 041A; 043A; Case map 041B; 043B; Case map 041C; 043C; Case map 041D; 043D; Case map 041E; 043E; Case map 041F; 043F; Case map 0420; 0440; Case map 0421; 0441; Case map 0422; 0442; Case map 0423; 0443; Case map 0424; 0444; Case map 0425; 0445; Case map 0426; 0446; Case map 0427; 0447; Case map 0428; 0448; Case map 0429; 0449; Case map 042A; 044A; Case map 042B; 044B; Case map 042C; 044C; Case map 042D; 044D; Case map 042E; 044E; Case map 042F; 044F; Case map 0460; 0461; Case map 0462; 0463; Case map 0464; 0465; Case map 0466; 0467; Case map 0468; 0469; Case map 046A; 046B; Case map 046C; 046D; Case map 046E; 046F; Case map 0470; 0471; Case map 0472; 0473; Case map 0474; 0475; Case map 0476; 0477; Case map 0478; 0479; Case map 047A; 047B; Case map 047C; 047D; Case map 047E; 047F; Case map 0480; 0481; Case map 048A; 048B; Case map 048C; 048D; Case map 048E; 048F; Case map 0490; 0491; Case map 0492; 0493; Case map 0494; 0495; Case map 0496; 0497; Case map 0498; 0499; Case map 049A; 049B; Case map 049C; 049D; Case map 049E; 049F; Case map 04A0; 04A1; Case map 04A2; 04A3; Case map 04A4; 04A5; Case map 04A6; 04A7; Case map 04A8; 04A9; Case map 04AA; 04AB; Case map 04AC; 04AD; Case map 04AE; 04AF; Case map 04B0; 04B1; Case map 04B2; 04B3; Case map 04B4; 04B5; Case map 04B6; 04B7; Case map 04B8; 04B9; Case map 04BA; 04BB; Case map 04BC; 04BD; Case map 04BE; 04BF; Case map 04C1; 04C2; Case map 04C3; 04C4; Case map 04C5; 04C6; Case map 04C7; 04C8; Case map 04C9; 04CA; Case map 04CB; 04CC; Case map 04CD; 04CE; Case map 04D0; 04D1; Case map 04D2; 04D3; Case map 04D4; 04D5; Case map 04D6; 04D7; Case map 04D8; 04D9; Case map 04DA; 04DB; Case map 04DC; 04DD; Case map 04DE; 04DF; Case map 04E0; 04E1; Case map 04E2; 04E3; Case map 04E4; 04E5; Case map 04E6; 04E7; Case map 04E8; 04E9; Case map 04EA; 04EB; Case map 04EC; 04ED; Case map 04EE; 04EF; Case map 04F0; 04F1; Case map 04F2; 04F3; Case map 04F4; 04F5; Case map 04F8; 04F9; Case map 0500; 0501; Case map 0502; 0503; Case map 0504; 0505; Case map 0506; 0507; Case map 0508; 0509; Case map 050A; 050B; Case map 050C; 050D; Case map 050E; 050F; Case map 0531; 0561; Case map 0532; 0562; Case map 0533; 0563; Case map 0534; 0564; Case map 0535; 0565; Case map 0536; 0566; Case map 0537; 0567; Case map 0538; 0568; Case map 0539; 0569; Case map 053A; 056A; Case map 053B; 056B; Case map 053C; 056C; Case map 053D; 056D; Case map 053E; 056E; Case map 053F; 056F; Case map 0540; 0570; Case map 0541; 0571; Case map 0542; 0572; Case map 0543; 0573; Case map 0544; 0574; Case map 0545; 0575; Case map 0546; 0576; Case map 0547; 0577; Case map 0548; 0578; Case map 0549; 0579; Case map 054A; 057A; Case map 054B; 057B; Case map 054C; 057C; Case map 054D; 057D; Case map 054E; 057E; Case map 054F; 057F; Case map 0550; 0580; Case map 0551; 0581; Case map 0552; 0582; Case map 0553; 0583; Case map 0554; 0584; Case map 0555; 0585; Case map 0556; 0586; Case map 0587; 0565 0582; Case map 1E00; 1E01; Case map 1E02; 1E03; Case map 1E04; 1E05; Case map 1E06; 1E07; Case map 1E08; 1E09; Case map 1E0A; 1E0B; Case map 1E0C; 1E0D; Case map 1E0E; 1E0F; Case map 1E10; 1E11; Case map 1E12; 1E13; Case map 1E14; 1E15; Case map 1E16; 1E17; Case map 1E18; 1E19; Case map 1E1A; 1E1B; Case map 1E1C; 1E1D; Case map 1E1E; 1E1F; Case map 1E20; 1E21; Case map 1E22; 1E23; Case map 1E24; 1E25; Case map 1E26; 1E27; Case map 1E28; 1E29; Case map 1E2A; 1E2B; Case map 1E2C; 1E2D; Case map 1E2E; 1E2F; Case map 1E30; 1E31; Case map 1E32; 1E33; Case map 1E34; 1E35; Case map 1E36; 1E37; Case map 1E38; 1E39; Case map 1E3A; 1E3B; Case map 1E3C; 1E3D; Case map 1E3E; 1E3F; Case map 1E40; 1E41; Case map 1E42; 1E43; Case map 1E44; 1E45; Case map 1E46; 1E47; Case map 1E48; 1E49; Case map 1E4A; 1E4B; Case map 1E4C; 1E4D; Case map 1E4E; 1E4F; Case map 1E50; 1E51; Case map 1E52; 1E53; Case map 1E54; 1E55; Case map 1E56; 1E57; Case map 1E58; 1E59; Case map 1E5A; 1E5B; Case map 1E5C; 1E5D; Case map 1E5E; 1E5F; Case map 1E60; 1E61; Case map 1E62; 1E63; Case map 1E64; 1E65; Case map 1E66; 1E67; Case map 1E68; 1E69; Case map 1E6A; 1E6B; Case map 1E6C; 1E6D; Case map 1E6E; 1E6F; Case map 1E70; 1E71; Case map 1E72; 1E73; Case map 1E74; 1E75; Case map 1E76; 1E77; Case map 1E78; 1E79; Case map 1E7A; 1E7B; Case map 1E7C; 1E7D; Case map 1E7E; 1E7F; Case map 1E80; 1E81; Case map 1E82; 1E83; Case map 1E84; 1E85; Case map 1E86; 1E87; Case map 1E88; 1E89; Case map 1E8A; 1E8B; Case map 1E8C; 1E8D; Case map 1E8E; 1E8F; Case map 1E90; 1E91; Case map 1E92; 1E93; Case map 1E94; 1E95; Case map 1E96; 0068 0331; Case map 1E97; 0074 0308; Case map 1E98; 0077 030A; Case map 1E99; 0079 030A; Case map 1E9A; 0061 02BE; Case map 1E9B; 1E61; Case map 1EA0; 1EA1; Case map 1EA2; 1EA3; Case map 1EA4; 1EA5; Case map 1EA6; 1EA7; Case map 1EA8; 1EA9; Case map 1EAA; 1EAB; Case map 1EAC; 1EAD; Case map 1EAE; 1EAF; Case map 1EB0; 1EB1; Case map 1EB2; 1EB3; Case map 1EB4; 1EB5; Case map 1EB6; 1EB7; Case map 1EB8; 1EB9; Case map 1EBA; 1EBB; Case map 1EBC; 1EBD; Case map 1EBE; 1EBF; Case map 1EC0; 1EC1; Case map 1EC2; 1EC3; Case map 1EC4; 1EC5; Case map 1EC6; 1EC7; Case map 1EC8; 1EC9; Case map 1ECA; 1ECB; Case map 1ECC; 1ECD; Case map 1ECE; 1ECF; Case map 1ED0; 1ED1; Case map 1ED2; 1ED3; Case map 1ED4; 1ED5; Case map 1ED6; 1ED7; Case map 1ED8; 1ED9; Case map 1EDA; 1EDB; Case map 1EDC; 1EDD; Case map 1EDE; 1EDF; Case map 1EE0; 1EE1; Case map 1EE2; 1EE3; Case map 1EE4; 1EE5; Case map 1EE6; 1EE7; Case map 1EE8; 1EE9; Case map 1EEA; 1EEB; Case map 1EEC; 1EED; Case map 1EEE; 1EEF; Case map 1EF0; 1EF1; Case map 1EF2; 1EF3; Case map 1EF4; 1EF5; Case map 1EF6; 1EF7; Case map 1EF8; 1EF9; Case map 1F08; 1F00; Case map 1F09; 1F01; Case map 1F0A; 1F02; Case map 1F0B; 1F03; Case map 1F0C; 1F04; Case map 1F0D; 1F05; Case map 1F0E; 1F06; Case map 1F0F; 1F07; Case map 1F18; 1F10; Case map 1F19; 1F11; Case map 1F1A; 1F12; Case map 1F1B; 1F13; Case map 1F1C; 1F14; Case map 1F1D; 1F15; Case map 1F28; 1F20; Case map 1F29; 1F21; Case map 1F2A; 1F22; Case map 1F2B; 1F23; Case map 1F2C; 1F24; Case map 1F2D; 1F25; Case map 1F2E; 1F26; Case map 1F2F; 1F27; Case map 1F38; 1F30; Case map 1F39; 1F31; Case map 1F3A; 1F32; Case map 1F3B; 1F33; Case map 1F3C; 1F34; Case map 1F3D; 1F35; Case map 1F3E; 1F36; Case map 1F3F; 1F37; Case map 1F48; 1F40; Case map 1F49; 1F41; Case map 1F4A; 1F42; Case map 1F4B; 1F43; Case map 1F4C; 1F44; Case map 1F4D; 1F45; Case map 1F50; 03C5 0313; Case map 1F52; 03C5 0313 0300; Case map 1F54; 03C5 0313 0301; Case map 1F56; 03C5 0313 0342; Case map 1F59; 1F51; Case map 1F5B; 1F53; Case map 1F5D; 1F55; Case map 1F5F; 1F57; Case map 1F68; 1F60; Case map 1F69; 1F61; Case map 1F6A; 1F62; Case map 1F6B; 1F63; Case map 1F6C; 1F64; Case map 1F6D; 1F65; Case map 1F6E; 1F66; Case map 1F6F; 1F67; Case map 1F80; 1F00 03B9; Case map 1F81; 1F01 03B9; Case map 1F82; 1F02 03B9; Case map 1F83; 1F03 03B9; Case map 1F84; 1F04 03B9; Case map 1F85; 1F05 03B9; Case map 1F86; 1F06 03B9; Case map 1F87; 1F07 03B9; Case map 1F88; 1F00 03B9; Case map 1F89; 1F01 03B9; Case map 1F8A; 1F02 03B9; Case map 1F8B; 1F03 03B9; Case map 1F8C; 1F04 03B9; Case map 1F8D; 1F05 03B9; Case map 1F8E; 1F06 03B9; Case map 1F8F; 1F07 03B9; Case map 1F90; 1F20 03B9; Case map 1F91; 1F21 03B9; Case map 1F92; 1F22 03B9; Case map 1F93; 1F23 03B9; Case map 1F94; 1F24 03B9; Case map 1F95; 1F25 03B9; Case map 1F96; 1F26 03B9; Case map 1F97; 1F27 03B9; Case map 1F98; 1F20 03B9; Case map 1F99; 1F21 03B9; Case map 1F9A; 1F22 03B9; Case map 1F9B; 1F23 03B9; Case map 1F9C; 1F24 03B9; Case map 1F9D; 1F25 03B9; Case map 1F9E; 1F26 03B9; Case map 1F9F; 1F27 03B9; Case map 1FA0; 1F60 03B9; Case map 1FA1; 1F61 03B9; Case map 1FA2; 1F62 03B9; Case map 1FA3; 1F63 03B9; Case map 1FA4; 1F64 03B9; Case map 1FA5; 1F65 03B9; Case map 1FA6; 1F66 03B9; Case map 1FA7; 1F67 03B9; Case map 1FA8; 1F60 03B9; Case map 1FA9; 1F61 03B9; Case map 1FAA; 1F62 03B9; Case map 1FAB; 1F63 03B9; Case map 1FAC; 1F64 03B9; Case map 1FAD; 1F65 03B9; Case map 1FAE; 1F66 03B9; Case map 1FAF; 1F67 03B9; Case map 1FB2; 1F70 03B9; Case map 1FB3; 03B1 03B9; Case map 1FB4; 03AC 03B9; Case map 1FB6; 03B1 0342; Case map 1FB7; 03B1 0342 03B9; Case map 1FB8; 1FB0; Case map 1FB9; 1FB1; Case map 1FBA; 1F70; Case map 1FBB; 1F71; Case map 1FBC; 03B1 03B9; Case map 1FBE; 03B9; Case map 1FC2; 1F74 03B9; Case map 1FC3; 03B7 03B9; Case map 1FC4; 03AE 03B9; Case map 1FC6; 03B7 0342; Case map 1FC7; 03B7 0342 03B9; Case map 1FC8; 1F72; Case map 1FC9; 1F73; Case map 1FCA; 1F74; Case map 1FCB; 1F75; Case map 1FCC; 03B7 03B9; Case map 1FD2; 03B9 0308 0300; Case map 1FD3; 03B9 0308 0301; Case map 1FD6; 03B9 0342; Case map 1FD7; 03B9 0308 0342; Case map 1FD8; 1FD0; Case map 1FD9; 1FD1; Case map 1FDA; 1F76; Case map 1FDB; 1F77; Case map 1FE2; 03C5 0308 0300; Case map 1FE3; 03C5 0308 0301; Case map 1FE4; 03C1 0313; Case map 1FE6; 03C5 0342; Case map 1FE7; 03C5 0308 0342; Case map 1FE8; 1FE0; Case map 1FE9; 1FE1; Case map 1FEA; 1F7A; Case map 1FEB; 1F7B; Case map 1FEC; 1FE5; Case map 1FF2; 1F7C 03B9; Case map 1FF3; 03C9 03B9; Case map 1FF4; 03CE 03B9; Case map 1FF6; 03C9 0342; Case map 1FF7; 03C9 0342 03B9; Case map 1FF8; 1F78; Case map 1FF9; 1F79; Case map 1FFA; 1F7C; Case map 1FFB; 1F7D; Case map 1FFC; 03C9 03B9; Case map 20A8; 0072 0073; Additional folding 2102; 0063; Additional folding 2103; 00B0 0063; Additional folding 2107; 025B; Additional folding 2109; 00B0 0066; Additional folding 210B; 0068; Additional folding 210C; 0068; Additional folding 210D; 0068; Additional folding 2110; 0069; Additional folding 2111; 0069; Additional folding 2112; 006C; Additional folding 2115; 006E; Additional folding 2116; 006E 006F; Additional folding 2119; 0070; Additional folding 211A; 0071; Additional folding 211B; 0072; Additional folding 211C; 0072; Additional folding 211D; 0072; Additional folding 2120; 0073 006D; Additional folding 2121; 0074 0065 006C; Additional folding 2122; 0074 006D; Additional folding 2124; 007A; Additional folding 2126; 03C9; Case map 2128; 007A; Additional folding 212A; 006B; Case map 212B; 00E5; Case map 212C; 0062; Additional folding 212D; 0063; Additional folding 2130; 0065; Additional folding 2131; 0066; Additional folding 2133; 006D; Additional folding 213E; 03B3; Additional folding 213F; 03C0; Additional folding 2145; 0064; Additional folding 2160; 2170; Case map 2161; 2171; Case map 2162; 2172; Case map 2163; 2173; Case map 2164; 2174; Case map 2165; 2175; Case map 2166; 2176; Case map 2167; 2177; Case map 2168; 2178; Case map 2169; 2179; Case map 216A; 217A; Case map 216B; 217B; Case map 216C; 217C; Case map 216D; 217D; Case map 216E; 217E; Case map 216F; 217F; Case map 24B6; 24D0; Case map 24B7; 24D1; Case map 24B8; 24D2; Case map 24B9; 24D3; Case map 24BA; 24D4; Case map 24BB; 24D5; Case map 24BC; 24D6; Case map 24BD; 24D7; Case map 24BE; 24D8; Case map 24BF; 24D9; Case map 24C0; 24DA; Case map 24C1; 24DB; Case map 24C2; 24DC; Case map 24C3; 24DD; Case map 24C4; 24DE; Case map 24C5; 24DF; Case map 24C6; 24E0; Case map 24C7; 24E1; Case map 24C8; 24E2; Case map 24C9; 24E3; Case map 24CA; 24E4; Case map 24CB; 24E5; Case map 24CC; 24E6; Case map 24CD; 24E7; Case map 24CE; 24E8; Case map 24CF; 24E9; Case map 3371; 0068 0070 0061; Additional folding 3373; 0061 0075; Additional folding 3375; 006F 0076; Additional folding 3380; 0070 0061; Additional folding 3381; 006E 0061; Additional folding 3382; 03BC 0061; Additional folding 3383; 006D 0061; Additional folding 3384; 006B 0061; Additional folding 3385; 006B 0062; Additional folding 3386; 006D 0062; Additional folding 3387; 0067 0062; Additional folding 338A; 0070 0066; Additional folding 338B; 006E 0066; Additional folding 338C; 03BC 0066; Additional folding 3390; 0068 007A; Additional folding 3391; 006B 0068 007A; Additional folding 3392; 006D 0068 007A; Additional folding 3393; 0067 0068 007A; Additional folding 3394; 0074 0068 007A; Additional folding 33A9; 0070 0061; Additional folding 33AA; 006B 0070 0061; Additional folding 33AB; 006D 0070 0061; Additional folding 33AC; 0067 0070 0061; Additional folding 33B4; 0070 0076; Additional folding 33B5; 006E 0076; Additional folding 33B6; 03BC 0076; Additional folding 33B7; 006D 0076; Additional folding 33B8; 006B 0076; Additional folding 33B9; 006D 0076; Additional folding 33BA; 0070 0077; Additional folding 33BB; 006E 0077; Additional folding 33BC; 03BC 0077; Additional folding 33BD; 006D 0077; Additional folding 33BE; 006B 0077; Additional folding 33BF; 006D 0077; Additional folding 33C0; 006B 03C9; Additional folding 33C1; 006D 03C9; Additional folding 33C3; 0062 0071; Additional folding 33C6; 0063 2215 006B 0067; Additional folding 33C7; 0063 006F 002E; Additional folding 33C8; 0064 0062; Additional folding 33C9; 0067 0079; Additional folding 33CB; 0068 0070; Additional folding 33CD; 006B 006B; Additional folding 33CE; 006B 006D; Additional folding 33D7; 0070 0068; Additional folding 33D9; 0070 0070 006D; Additional folding 33DA; 0070 0072; Additional folding 33DC; 0073 0076; Additional folding 33DD; 0077 0062; Additional folding FB00; 0066 0066; Case map FB01; 0066 0069; Case map FB02; 0066 006C; Case map FB03; 0066 0066 0069; Case map FB04; 0066 0066 006C; Case map FB05; 0073 0074; Case map FB06; 0073 0074; Case map FB13; 0574 0576; Case map FB14; 0574 0565; Case map FB15; 0574 056B; Case map FB16; 057E 0576; Case map FB17; 0574 056D; Case map FF21; FF41; Case map FF22; FF42; Case map FF23; FF43; Case map FF24; FF44; Case map FF25; FF45; Case map FF26; FF46; Case map FF27; FF47; Case map FF28; FF48; Case map FF29; FF49; Case map FF2A; FF4A; Case map FF2B; FF4B; Case map FF2C; FF4C; Case map FF2D; FF4D; Case map FF2E; FF4E; Case map FF2F; FF4F; Case map FF30; FF50; Case map FF31; FF51; Case map FF32; FF52; Case map FF33; FF53; Case map FF34; FF54; Case map FF35; FF55; Case map FF36; FF56; Case map FF37; FF57; Case map FF38; FF58; Case map FF39; FF59; Case map FF3A; FF5A; Case map 10400; 10428; Case map 10401; 10429; Case map 10402; 1042A; Case map 10403; 1042B; Case map 10404; 1042C; Case map 10405; 1042D; Case map 10406; 1042E; Case map 10407; 1042F; Case map 10408; 10430; Case map 10409; 10431; Case map 1040A; 10432; Case map 1040B; 10433; Case map 1040C; 10434; Case map 1040D; 10435; Case map 1040E; 10436; Case map 1040F; 10437; Case map 10410; 10438; Case map 10411; 10439; Case map 10412; 1043A; Case map 10413; 1043B; Case map 10414; 1043C; Case map 10415; 1043D; Case map 10416; 1043E; Case map 10417; 1043F; Case map 10418; 10440; Case map 10419; 10441; Case map 1041A; 10442; Case map 1041B; 10443; Case map 1041C; 10444; Case map 1041D; 10445; Case map 1041E; 10446; Case map 1041F; 10447; Case map 10420; 10448; Case map 10421; 10449; Case map 10422; 1044A; Case map 10423; 1044B; Case map 10424; 1044C; Case map 10425; 1044D; Case map 1D400; 0061; Additional folding 1D401; 0062; Additional folding 1D402; 0063; Additional folding 1D403; 0064; Additional folding 1D404; 0065; Additional folding 1D405; 0066; Additional folding 1D406; 0067; Additional folding 1D407; 0068; Additional folding 1D408; 0069; Additional folding 1D409; 006A; Additional folding 1D40A; 006B; Additional folding 1D40B; 006C; Additional folding 1D40C; 006D; Additional folding 1D40D; 006E; Additional folding 1D40E; 006F; Additional folding 1D40F; 0070; Additional folding 1D410; 0071; Additional folding 1D411; 0072; Additional folding 1D412; 0073; Additional folding 1D413; 0074; Additional folding 1D414; 0075; Additional folding 1D415; 0076; Additional folding 1D416; 0077; Additional folding 1D417; 0078; Additional folding 1D418; 0079; Additional folding 1D419; 007A; Additional folding 1D434; 0061; Additional folding 1D435; 0062; Additional folding 1D436; 0063; Additional folding 1D437; 0064; Additional folding 1D438; 0065; Additional folding 1D439; 0066; Additional folding 1D43A; 0067; Additional folding 1D43B; 0068; Additional folding 1D43C; 0069; Additional folding 1D43D; 006A; Additional folding 1D43E; 006B; Additional folding 1D43F; 006C; Additional folding 1D440; 006D; Additional folding 1D441; 006E; Additional folding 1D442; 006F; Additional folding 1D443; 0070; Additional folding 1D444; 0071; Additional folding 1D445; 0072; Additional folding 1D446; 0073; Additional folding 1D447; 0074; Additional folding 1D448; 0075; Additional folding 1D449; 0076; Additional folding 1D44A; 0077; Additional folding 1D44B; 0078; Additional folding 1D44C; 0079; Additional folding 1D44D; 007A; Additional folding 1D468; 0061; Additional folding 1D469; 0062; Additional folding 1D46A; 0063; Additional folding 1D46B; 0064; Additional folding 1D46C; 0065; Additional folding 1D46D; 0066; Additional folding 1D46E; 0067; Additional folding 1D46F; 0068; Additional folding 1D470; 0069; Additional folding 1D471; 006A; Additional folding 1D472; 006B; Additional folding 1D473; 006C; Additional folding 1D474; 006D; Additional folding 1D475; 006E; Additional folding 1D476; 006F; Additional folding 1D477; 0070; Additional folding 1D478; 0071; Additional folding 1D479; 0072; Additional folding 1D47A; 0073; Additional folding 1D47B; 0074; Additional folding 1D47C; 0075; Additional folding 1D47D; 0076; Additional folding 1D47E; 0077; Additional folding 1D47F; 0078; Additional folding 1D480; 0079; Additional folding 1D481; 007A; Additional folding 1D49C; 0061; Additional folding 1D49E; 0063; Additional folding 1D49F; 0064; Additional folding 1D4A2; 0067; Additional folding 1D4A5; 006A; Additional folding 1D4A6; 006B; Additional folding 1D4A9; 006E; Additional folding 1D4AA; 006F; Additional folding 1D4AB; 0070; Additional folding 1D4AC; 0071; Additional folding 1D4AE; 0073; Additional folding 1D4AF; 0074; Additional folding 1D4B0; 0075; Additional folding 1D4B1; 0076; Additional folding 1D4B2; 0077; Additional folding 1D4B3; 0078; Additional folding 1D4B4; 0079; Additional folding 1D4B5; 007A; Additional folding 1D4D0; 0061; Additional folding 1D4D1; 0062; Additional folding 1D4D2; 0063; Additional folding 1D4D3; 0064; Additional folding 1D4D4; 0065; Additional folding 1D4D5; 0066; Additional folding 1D4D6; 0067; Additional folding 1D4D7; 0068; Additional folding 1D4D8; 0069; Additional folding 1D4D9; 006A; Additional folding 1D4DA; 006B; Additional folding 1D4DB; 006C; Additional folding 1D4DC; 006D; Additional folding 1D4DD; 006E; Additional folding 1D4DE; 006F; Additional folding 1D4DF; 0070; Additional folding 1D4E0; 0071; Additional folding 1D4E1; 0072; Additional folding 1D4E2; 0073; Additional folding 1D4E3; 0074; Additional folding 1D4E4; 0075; Additional folding 1D4E5; 0076; Additional folding 1D4E6; 0077; Additional folding 1D4E7; 0078; Additional folding 1D4E8; 0079; Additional folding 1D4E9; 007A; Additional folding 1D504; 0061; Additional folding 1D505; 0062; Additional folding 1D507; 0064; Additional folding 1D508; 0065; Additional folding 1D509; 0066; Additional folding 1D50A; 0067; Additional folding 1D50D; 006A; Additional folding 1D50E; 006B; Additional folding 1D50F; 006C; Additional folding 1D510; 006D; Additional folding 1D511; 006E; Additional folding 1D512; 006F; Additional folding 1D513; 0070; Additional folding 1D514; 0071; Additional folding 1D516; 0073; Additional folding 1D517; 0074; Additional folding 1D518; 0075; Additional folding 1D519; 0076; Additional folding 1D51A; 0077; Additional folding 1D51B; 0078; Additional folding 1D51C; 0079; Additional folding 1D538; 0061; Additional folding 1D539; 0062; Additional folding 1D53B; 0064; Additional folding 1D53C; 0065; Additional folding 1D53D; 0066; Additional folding 1D53E; 0067; Additional folding 1D540; 0069; Additional folding 1D541; 006A; Additional folding 1D542; 006B; Additional folding 1D543; 006C; Additional folding 1D544; 006D; Additional folding 1D546; 006F; Additional folding 1D54A; 0073; Additional folding 1D54B; 0074; Additional folding 1D54C; 0075; Additional folding 1D54D; 0076; Additional folding 1D54E; 0077; Additional folding 1D54F; 0078; Additional folding 1D550; 0079; Additional folding 1D56C; 0061; Additional folding 1D56D; 0062; Additional folding 1D56E; 0063; Additional folding 1D56F; 0064; Additional folding 1D570; 0065; Additional folding 1D571; 0066; Additional folding 1D572; 0067; Additional folding 1D573; 0068; Additional folding 1D574; 0069; Additional folding 1D575; 006A; Additional folding 1D576; 006B; Additional folding 1D577; 006C; Additional folding 1D578; 006D; Additional folding 1D579; 006E; Additional folding 1D57A; 006F; Additional folding 1D57B; 0070; Additional folding 1D57C; 0071; Additional folding 1D57D; 0072; Additional folding 1D57E; 0073; Additional folding 1D57F; 0074; Additional folding 1D580; 0075; Additional folding 1D581; 0076; Additional folding 1D582; 0077; Additional folding 1D583; 0078; Additional folding 1D584; 0079; Additional folding 1D585; 007A; Additional folding 1D5A0; 0061; Additional folding 1D5A1; 0062; Additional folding 1D5A2; 0063; Additional folding 1D5A3; 0064; Additional folding 1D5A4; 0065; Additional folding 1D5A5; 0066; Additional folding 1D5A6; 0067; Additional folding 1D5A7; 0068; Additional folding 1D5A8; 0069; Additional folding 1D5A9; 006A; Additional folding 1D5AA; 006B; Additional folding 1D5AB; 006C; Additional folding 1D5AC; 006D; Additional folding 1D5AD; 006E; Additional folding 1D5AE; 006F; Additional folding 1D5AF; 0070; Additional folding 1D5B0; 0071; Additional folding 1D5B1; 0072; Additional folding 1D5B2; 0073; Additional folding 1D5B3; 0074; Additional folding 1D5B4; 0075; Additional folding 1D5B5; 0076; Additional folding 1D5B6; 0077; Additional folding 1D5B7; 0078; Additional folding 1D5B8; 0079; Additional folding 1D5B9; 007A; Additional folding 1D5D4; 0061; Additional folding 1D5D5; 0062; Additional folding 1D5D6; 0063; Additional folding 1D5D7; 0064; Additional folding 1D5D8; 0065; Additional folding 1D5D9; 0066; Additional folding 1D5DA; 0067; Additional folding 1D5DB; 0068; Additional folding 1D5DC; 0069; Additional folding 1D5DD; 006A; Additional folding 1D5DE; 006B; Additional folding 1D5DF; 006C; Additional folding 1D5E0; 006D; Additional folding 1D5E1; 006E; Additional folding 1D5E2; 006F; Additional folding 1D5E3; 0070; Additional folding 1D5E4; 0071; Additional folding 1D5E5; 0072; Additional folding 1D5E6; 0073; Additional folding 1D5E7; 0074; Additional folding 1D5E8; 0075; Additional folding 1D5E9; 0076; Additional folding 1D5EA; 0077; Additional folding 1D5EB; 0078; Additional folding 1D5EC; 0079; Additional folding 1D5ED; 007A; Additional folding 1D608; 0061; Additional folding 1D609; 0062; Additional folding 1D60A; 0063; Additional folding 1D60B; 0064; Additional folding 1D60C; 0065; Additional folding 1D60D; 0066; Additional folding 1D60E; 0067; Additional folding 1D60F; 0068; Additional folding 1D610; 0069; Additional folding 1D611; 006A; Additional folding 1D612; 006B; Additional folding 1D613; 006C; Additional folding 1D614; 006D; Additional folding 1D615; 006E; Additional folding 1D616; 006F; Additional folding 1D617; 0070; Additional folding 1D618; 0071; Additional folding 1D619; 0072; Additional folding 1D61A; 0073; Additional folding 1D61B; 0074; Additional folding 1D61C; 0075; Additional folding 1D61D; 0076; Additional folding 1D61E; 0077; Additional folding 1D61F; 0078; Additional folding 1D620; 0079; Additional folding 1D621; 007A; Additional folding 1D63C; 0061; Additional folding 1D63D; 0062; Additional folding 1D63E; 0063; Additional folding 1D63F; 0064; Additional folding 1D640; 0065; Additional folding 1D641; 0066; Additional folding 1D642; 0067; Additional folding 1D643; 0068; Additional folding 1D644; 0069; Additional folding 1D645; 006A; Additional folding 1D646; 006B; Additional folding 1D647; 006C; Additional folding 1D648; 006D; Additional folding 1D649; 006E; Additional folding 1D64A; 006F; Additional folding 1D64B; 0070; Additional folding 1D64C; 0071; Additional folding 1D64D; 0072; Additional folding 1D64E; 0073; Additional folding 1D64F; 0074; Additional folding 1D650; 0075; Additional folding 1D651; 0076; Additional folding 1D652; 0077; Additional folding 1D653; 0078; Additional folding 1D654; 0079; Additional folding 1D655; 007A; Additional folding 1D670; 0061; Additional folding 1D671; 0062; Additional folding 1D672; 0063; Additional folding 1D673; 0064; Additional folding 1D674; 0065; Additional folding 1D675; 0066; Additional folding 1D676; 0067; Additional folding 1D677; 0068; Additional folding 1D678; 0069; Additional folding 1D679; 006A; Additional folding 1D67A; 006B; Additional folding 1D67B; 006C; Additional folding 1D67C; 006D; Additional folding 1D67D; 006E; Additional folding 1D67E; 006F; Additional folding 1D67F; 0070; Additional folding 1D680; 0071; Additional folding 1D681; 0072; Additional folding 1D682; 0073; Additional folding 1D683; 0074; Additional folding 1D684; 0075; Additional folding 1D685; 0076; Additional folding 1D686; 0077; Additional folding 1D687; 0078; Additional folding 1D688; 0079; Additional folding 1D689; 007A; Additional folding 1D6A8; 03B1; Additional folding 1D6A9; 03B2; Additional folding 1D6AA; 03B3; Additional folding 1D6AB; 03B4; Additional folding 1D6AC; 03B5; Additional folding 1D6AD; 03B6; Additional folding 1D6AE; 03B7; Additional folding 1D6AF; 03B8; Additional folding 1D6B0; 03B9; Additional folding 1D6B1; 03BA; Additional folding 1D6B2; 03BB; Additional folding 1D6B3; 03BC; Additional folding 1D6B4; 03BD; Additional folding 1D6B5; 03BE; Additional folding 1D6B6; 03BF; Additional folding 1D6B7; 03C0; Additional folding 1D6B8; 03C1; Additional folding 1D6B9; 03B8; Additional folding 1D6BA; 03C3; Additional folding 1D6BB; 03C4; Additional folding 1D6BC; 03C5; Additional folding 1D6BD; 03C6; Additional folding 1D6BE; 03C7; Additional folding 1D6BF; 03C8; Additional folding 1D6C0; 03C9; Additional folding 1D6D3; 03C3; Additional folding 1D6E2; 03B1; Additional folding 1D6E3; 03B2; Additional folding 1D6E4; 03B3; Additional folding 1D6E5; 03B4; Additional folding 1D6E6; 03B5; Additional folding 1D6E7; 03B6; Additional folding 1D6E8; 03B7; Additional folding 1D6E9; 03B8; Additional folding 1D6EA; 03B9; Additional folding 1D6EB; 03BA; Additional folding 1D6EC; 03BB; Additional folding 1D6ED; 03BC; Additional folding 1D6EE; 03BD; Additional folding 1D6EF; 03BE; Additional folding 1D6F0; 03BF; Additional folding 1D6F1; 03C0; Additional folding 1D6F2; 03C1; Additional folding 1D6F3; 03B8; Additional folding 1D6F4; 03C3; Additional folding 1D6F5; 03C4; Additional folding 1D6F6; 03C5; Additional folding 1D6F7; 03C6; Additional folding 1D6F8; 03C7; Additional folding 1D6F9; 03C8; Additional folding 1D6FA; 03C9; Additional folding 1D70D; 03C3; Additional folding 1D71C; 03B1; Additional folding 1D71D; 03B2; Additional folding 1D71E; 03B3; Additional folding 1D71F; 03B4; Additional folding 1D720; 03B5; Additional folding 1D721; 03B6; Additional folding 1D722; 03B7; Additional folding 1D723; 03B8; Additional folding 1D724; 03B9; Additional folding 1D725; 03BA; Additional folding 1D726; 03BB; Additional folding 1D727; 03BC; Additional folding 1D728; 03BD; Additional folding 1D729; 03BE; Additional folding 1D72A; 03BF; Additional folding 1D72B; 03C0; Additional folding 1D72C; 03C1; Additional folding 1D72D; 03B8; Additional folding 1D72E; 03C3; Additional folding 1D72F; 03C4; Additional folding 1D730; 03C5; Additional folding 1D731; 03C6; Additional folding 1D732; 03C7; Additional folding 1D733; 03C8; Additional folding 1D734; 03C9; Additional folding 1D747; 03C3; Additional folding 1D756; 03B1; Additional folding 1D757; 03B2; Additional folding 1D758; 03B3; Additional folding 1D759; 03B4; Additional folding 1D75A; 03B5; Additional folding 1D75B; 03B6; Additional folding 1D75C; 03B7; Additional folding 1D75D; 03B8; Additional folding 1D75E; 03B9; Additional folding 1D75F; 03BA; Additional folding 1D760; 03BB; Additional folding 1D761; 03BC; Additional folding 1D762; 03BD; Additional folding 1D763; 03BE; Additional folding 1D764; 03BF; Additional folding 1D765; 03C0; Additional folding 1D766; 03C1; Additional folding 1D767; 03B8; Additional folding 1D768; 03C3; Additional folding 1D769; 03C4; Additional folding 1D76A; 03C5; Additional folding 1D76B; 03C6; Additional folding 1D76C; 03C7; Additional folding 1D76D; 03C8; Additional folding 1D76E; 03C9; Additional folding 1D781; 03C3; Additional folding 1D790; 03B1; Additional folding 1D791; 03B2; Additional folding 1D792; 03B3; Additional folding 1D793; 03B4; Additional folding 1D794; 03B5; Additional folding 1D795; 03B6; Additional folding 1D796; 03B7; Additional folding 1D797; 03B8; Additional folding 1D798; 03B9; Additional folding 1D799; 03BA; Additional folding 1D79A; 03BB; Additional folding 1D79B; 03BC; Additional folding 1D79C; 03BD; Additional folding 1D79D; 03BE; Additional folding 1D79E; 03BF; Additional folding 1D79F; 03C0; Additional folding 1D7A0; 03C1; Additional folding 1D7A1; 03B8; Additional folding 1D7A2; 03C3; Additional folding 1D7A3; 03C4; Additional folding 1D7A4; 03C5; Additional folding 1D7A5; 03C6; Additional folding 1D7A6; 03C7; Additional folding 1D7A7; 03C8; Additional folding 1D7A8; 03C9; Additional folding 1D7BB; 03C3; Additional folding opensrs-client-3.0.0/lib/RACE/MapData-03.txt0000644017777601777760000010545010770014205021311 0ustar nobodynogroup000000000000000041; 0061; Case map 0042; 0062; Case map 0043; 0063; Case map 0044; 0064; Case map 0045; 0065; Case map 0046; 0066; Case map 0047; 0067; Case map 0048; 0068; Case map 0049; 0069; Case map 004A; 006A; Case map 004B; 006B; Case map 004C; 006C; Case map 004D; 006D; Case map 004E; 006E; Case map 004F; 006F; Case map 0050; 0070; Case map 0051; 0071; Case map 0052; 0072; Case map 0053; 0073; Case map 0054; 0074; Case map 0055; 0075; Case map 0056; 0076; Case map 0057; 0077; Case map 0058; 0078; Case map 0059; 0079; Case map 005A; 007A; Case map 00B5; 03BC; Case map 00C0; 00E0; Case map 00C1; 00E1; Case map 00C2; 00E2; Case map 00C3; 00E3; Case map 00C4; 00E4; Case map 00C5; 00E5; Case map 00C6; 00E6; Case map 00C7; 00E7; Case map 00C8; 00E8; Case map 00C9; 00E9; Case map 00CA; 00EA; Case map 00CB; 00EB; Case map 00CC; 00EC; Case map 00CD; 00ED; Case map 00CE; 00EE; Case map 00CF; 00EF; Case map 00D0; 00F0; Case map 00D1; 00F1; Case map 00D2; 00F2; Case map 00D3; 00F3; Case map 00D4; 00F4; Case map 00D5; 00F5; Case map 00D6; 00F6; Case map 00D8; 00F8; Case map 00D9; 00F9; Case map 00DA; 00FA; Case map 00DB; 00FB; Case map 00DC; 00FC; Case map 00DD; 00FD; Case map 00DE; 00FE; Case map 00DF; 0073 0073; Case map 0100; 0101; Case map 0102; 0103; Case map 0104; 0105; Case map 0106; 0107; Case map 0108; 0109; Case map 010A; 010B; Case map 010C; 010D; Case map 010E; 010F; Case map 0110; 0111; Case map 0112; 0113; Case map 0114; 0115; Case map 0116; 0117; Case map 0118; 0119; Case map 011A; 011B; Case map 011C; 011D; Case map 011E; 011F; Case map 0120; 0121; Case map 0122; 0123; Case map 0124; 0125; Case map 0126; 0127; Case map 0128; 0129; Case map 012A; 012B; Case map 012C; 012D; Case map 012E; 012F; Case map 0130; 0069 0307; Case map 0132; 0133; Case map 0134; 0135; Case map 0136; 0137; Case map 0139; 013A; Case map 013B; 013C; Case map 013D; 013E; Case map 013F; 0140; Case map 0141; 0142; Case map 0143; 0144; Case map 0145; 0146; Case map 0147; 0148; Case map 0149; 02BC 006E; Case map 014A; 014B; Case map 014C; 014D; Case map 014E; 014F; Case map 0150; 0151; Case map 0152; 0153; Case map 0154; 0155; Case map 0156; 0157; Case map 0158; 0159; Case map 015A; 015B; Case map 015C; 015D; Case map 015E; 015F; Case map 0160; 0161; Case map 0162; 0163; Case map 0164; 0165; Case map 0166; 0167; Case map 0168; 0169; Case map 016A; 016B; Case map 016C; 016D; Case map 016E; 016F; Case map 0170; 0171; Case map 0172; 0173; Case map 0174; 0175; Case map 0176; 0177; Case map 0178; 00FF; Case map 0179; 017A; Case map 017B; 017C; Case map 017D; 017E; Case map 017F; 0073; Case map 0181; 0253; Case map 0182; 0183; Case map 0184; 0185; Case map 0186; 0254; Case map 0187; 0188; Case map 0189; 0256; Case map 018A; 0257; Case map 018B; 018C; Case map 018E; 01DD; Case map 018F; 0259; Case map 0190; 025B; Case map 0191; 0192; Case map 0193; 0260; Case map 0194; 0263; Case map 0196; 0269; Case map 0197; 0268; Case map 0198; 0199; Case map 019C; 026F; Case map 019D; 0272; Case map 019F; 0275; Case map 01A0; 01A1; Case map 01A2; 01A3; Case map 01A4; 01A5; Case map 01A6; 0280; Case map 01A7; 01A8; Case map 01A9; 0283; Case map 01AC; 01AD; Case map 01AE; 0288; Case map 01AF; 01B0; Case map 01B1; 028A; Case map 01B2; 028B; Case map 01B3; 01B4; Case map 01B5; 01B6; Case map 01B7; 0292; Case map 01B8; 01B9; Case map 01BC; 01BD; Case map 01C4; 01C6; Case map 01C5; 01C6; Case map 01C7; 01C9; Case map 01C8; 01C9; Case map 01CA; 01CC; Case map 01CB; 01CC; Case map 01CD; 01CE; Case map 01CF; 01D0; Case map 01D1; 01D2; Case map 01D3; 01D4; Case map 01D5; 01D6; Case map 01D7; 01D8; Case map 01D9; 01DA; Case map 01DB; 01DC; Case map 01DE; 01DF; Case map 01E0; 01E1; Case map 01E2; 01E3; Case map 01E4; 01E5; Case map 01E6; 01E7; Case map 01E8; 01E9; Case map 01EA; 01EB; Case map 01EC; 01ED; Case map 01EE; 01EF; Case map 01F0; 006A 030C; Case map 01F1; 01F3; Case map 01F2; 01F3; Case map 01F4; 01F5; Case map 01F6; 0195; Case map 01F7; 01BF; Case map 01F8; 01F9; Case map 01FA; 01FB; Case map 01FC; 01FD; Case map 01FE; 01FF; Case map 0200; 0201; Case map 0202; 0203; Case map 0204; 0205; Case map 0206; 0207; Case map 0208; 0209; Case map 020A; 020B; Case map 020C; 020D; Case map 020E; 020F; Case map 0210; 0211; Case map 0212; 0213; Case map 0214; 0215; Case map 0216; 0217; Case map 0218; 0219; Case map 021A; 021B; Case map 021C; 021D; Case map 021E; 021F; Case map 0220; 019E; Case map 0222; 0223; Case map 0224; 0225; Case map 0226; 0227; Case map 0228; 0229; Case map 022A; 022B; Case map 022C; 022D; Case map 022E; 022F; Case map 0230; 0231; Case map 0232; 0233; Case map 0345; 03B9; Case map 037A; 0020 03B9; Additional folding 0386; 03AC; Case map 0388; 03AD; Case map 0389; 03AE; Case map 038A; 03AF; Case map 038C; 03CC; Case map 038E; 03CD; Case map 038F; 03CE; Case map 0390; 03B9 0308 0301; Case map 0391; 03B1; Case map 0392; 03B2; Case map 0393; 03B3; Case map 0394; 03B4; Case map 0395; 03B5; Case map 0396; 03B6; Case map 0397; 03B7; Case map 0398; 03B8; Case map 0399; 03B9; Case map 039A; 03BA; Case map 039B; 03BB; Case map 039C; 03BC; Case map 039D; 03BD; Case map 039E; 03BE; Case map 039F; 03BF; Case map 03A0; 03C0; Case map 03A1; 03C1; Case map 03A3; 03C3; Case map 03A4; 03C4; Case map 03A5; 03C5; Case map 03A6; 03C6; Case map 03A7; 03C7; Case map 03A8; 03C8; Case map 03A9; 03C9; Case map 03AA; 03CA; Case map 03AB; 03CB; Case map 03B0; 03C5 0308 0301; Case map 03C2; 03C3; Case map 03D0; 03B2; Case map 03D1; 03B8; Case map 03D2; 03C5; Additional folding 03D3; 03CD; Additional folding 03D4; 03CB; Additional folding 03D5; 03C6; Case map 03D6; 03C0; Case map 03D8; 03D9; Case map 03DA; 03DB; Case map 03DC; 03DD; Case map 03DE; 03DF; Case map 03E0; 03E1; Case map 03E2; 03E3; Case map 03E4; 03E5; Case map 03E6; 03E7; Case map 03E8; 03E9; Case map 03EA; 03EB; Case map 03EC; 03ED; Case map 03EE; 03EF; Case map 03F0; 03BA; Case map 03F1; 03C1; Case map 03F2; 03C3; Case map 03F4; 03B8; Case map 03F5; 03B5; Case map 0400; 0450; Case map 0401; 0451; Case map 0402; 0452; Case map 0403; 0453; Case map 0404; 0454; Case map 0405; 0455; Case map 0406; 0456; Case map 0407; 0457; Case map 0408; 0458; Case map 0409; 0459; Case map 040A; 045A; Case map 040B; 045B; Case map 040C; 045C; Case map 040D; 045D; Case map 040E; 045E; Case map 040F; 045F; Case map 0410; 0430; Case map 0411; 0431; Case map 0412; 0432; Case map 0413; 0433; Case map 0414; 0434; Case map 0415; 0435; Case map 0416; 0436; Case map 0417; 0437; Case map 0418; 0438; Case map 0419; 0439; Case map 041A; 043A; Case map 041B; 043B; Case map 041C; 043C; Case map 041D; 043D; Case map 041E; 043E; Case map 041F; 043F; Case map 0420; 0440; Case map 0421; 0441; Case map 0422; 0442; Case map 0423; 0443; Case map 0424; 0444; Case map 0425; 0445; Case map 0426; 0446; Case map 0427; 0447; Case map 0428; 0448; Case map 0429; 0449; Case map 042A; 044A; Case map 042B; 044B; Case map 042C; 044C; Case map 042D; 044D; Case map 042E; 044E; Case map 042F; 044F; Case map 0460; 0461; Case map 0462; 0463; Case map 0464; 0465; Case map 0466; 0467; Case map 0468; 0469; Case map 046A; 046B; Case map 046C; 046D; Case map 046E; 046F; Case map 0470; 0471; Case map 0472; 0473; Case map 0474; 0475; Case map 0476; 0477; Case map 0478; 0479; Case map 047A; 047B; Case map 047C; 047D; Case map 047E; 047F; Case map 0480; 0481; Case map 048A; 048B; Case map 048C; 048D; Case map 048E; 048F; Case map 0490; 0491; Case map 0492; 0493; Case map 0494; 0495; Case map 0496; 0497; Case map 0498; 0499; Case map 049A; 049B; Case map 049C; 049D; Case map 049E; 049F; Case map 04A0; 04A1; Case map 04A2; 04A3; Case map 04A4; 04A5; Case map 04A6; 04A7; Case map 04A8; 04A9; Case map 04AA; 04AB; Case map 04AC; 04AD; Case map 04AE; 04AF; Case map 04B0; 04B1; Case map 04B2; 04B3; Case map 04B4; 04B5; Case map 04B6; 04B7; Case map 04B8; 04B9; Case map 04BA; 04BB; Case map 04BC; 04BD; Case map 04BE; 04BF; Case map 04C1; 04C2; Case map 04C3; 04C4; Case map 04C5; 04C6; Case map 04C7; 04C8; Case map 04C9; 04CA; Case map 04CB; 04CC; Case map 04CD; 04CE; Case map 04D0; 04D1; Case map 04D2; 04D3; Case map 04D4; 04D5; Case map 04D6; 04D7; Case map 04D8; 04D9; Case map 04DA; 04DB; Case map 04DC; 04DD; Case map 04DE; 04DF; Case map 04E0; 04E1; Case map 04E2; 04E3; Case map 04E4; 04E5; Case map 04E6; 04E7; Case map 04E8; 04E9; Case map 04EA; 04EB; Case map 04EC; 04ED; Case map 04EE; 04EF; Case map 04F0; 04F1; Case map 04F2; 04F3; Case map 04F4; 04F5; Case map 04F8; 04F9; Case map 0500; 0501; Case map 0502; 0503; Case map 0504; 0505; Case map 0506; 0507; Case map 0508; 0509; Case map 050A; 050B; Case map 050C; 050D; Case map 050E; 050F; Case map 0531; 0561; Case map 0532; 0562; Case map 0533; 0563; Case map 0534; 0564; Case map 0535; 0565; Case map 0536; 0566; Case map 0537; 0567; Case map 0538; 0568; Case map 0539; 0569; Case map 053A; 056A; Case map 053B; 056B; Case map 053C; 056C; Case map 053D; 056D; Case map 053E; 056E; Case map 053F; 056F; Case map 0540; 0570; Case map 0541; 0571; Case map 0542; 0572; Case map 0543; 0573; Case map 0544; 0574; Case map 0545; 0575; Case map 0546; 0576; Case map 0547; 0577; Case map 0548; 0578; Case map 0549; 0579; Case map 054A; 057A; Case map 054B; 057B; Case map 054C; 057C; Case map 054D; 057D; Case map 054E; 057E; Case map 054F; 057F; Case map 0550; 0580; Case map 0551; 0581; Case map 0552; 0582; Case map 0553; 0583; Case map 0554; 0584; Case map 0555; 0585; Case map 0556; 0586; Case map 0587; 0565 0582; Case map 1E00; 1E01; Case map 1E02; 1E03; Case map 1E04; 1E05; Case map 1E06; 1E07; Case map 1E08; 1E09; Case map 1E0A; 1E0B; Case map 1E0C; 1E0D; Case map 1E0E; 1E0F; Case map 1E10; 1E11; Case map 1E12; 1E13; Case map 1E14; 1E15; Case map 1E16; 1E17; Case map 1E18; 1E19; Case map 1E1A; 1E1B; Case map 1E1C; 1E1D; Case map 1E1E; 1E1F; Case map 1E20; 1E21; Case map 1E22; 1E23; Case map 1E24; 1E25; Case map 1E26; 1E27; Case map 1E28; 1E29; Case map 1E2A; 1E2B; Case map 1E2C; 1E2D; Case map 1E2E; 1E2F; Case map 1E30; 1E31; Case map 1E32; 1E33; Case map 1E34; 1E35; Case map 1E36; 1E37; Case map 1E38; 1E39; Case map 1E3A; 1E3B; Case map 1E3C; 1E3D; Case map 1E3E; 1E3F; Case map 1E40; 1E41; Case map 1E42; 1E43; Case map 1E44; 1E45; Case map 1E46; 1E47; Case map 1E48; 1E49; Case map 1E4A; 1E4B; Case map 1E4C; 1E4D; Case map 1E4E; 1E4F; Case map 1E50; 1E51; Case map 1E52; 1E53; Case map 1E54; 1E55; Case map 1E56; 1E57; Case map 1E58; 1E59; Case map 1E5A; 1E5B; Case map 1E5C; 1E5D; Case map 1E5E; 1E5F; Case map 1E60; 1E61; Case map 1E62; 1E63; Case map 1E64; 1E65; Case map 1E66; 1E67; Case map 1E68; 1E69; Case map 1E6A; 1E6B; Case map 1E6C; 1E6D; Case map 1E6E; 1E6F; Case map 1E70; 1E71; Case map 1E72; 1E73; Case map 1E74; 1E75; Case map 1E76; 1E77; Case map 1E78; 1E79; Case map 1E7A; 1E7B; Case map 1E7C; 1E7D; Case map 1E7E; 1E7F; Case map 1E80; 1E81; Case map 1E82; 1E83; Case map 1E84; 1E85; Case map 1E86; 1E87; Case map 1E88; 1E89; Case map 1E8A; 1E8B; Case map 1E8C; 1E8D; Case map 1E8E; 1E8F; Case map 1E90; 1E91; Case map 1E92; 1E93; Case map 1E94; 1E95; Case map 1E96; 0068 0331; Case map 1E97; 0074 0308; Case map 1E98; 0077 030A; Case map 1E99; 0079 030A; Case map 1E9A; 0061 02BE; Case map 1E9B; 1E61; Case map 1EA0; 1EA1; Case map 1EA2; 1EA3; Case map 1EA4; 1EA5; Case map 1EA6; 1EA7; Case map 1EA8; 1EA9; Case map 1EAA; 1EAB; Case map 1EAC; 1EAD; Case map 1EAE; 1EAF; Case map 1EB0; 1EB1; Case map 1EB2; 1EB3; Case map 1EB4; 1EB5; Case map 1EB6; 1EB7; Case map 1EB8; 1EB9; Case map 1EBA; 1EBB; Case map 1EBC; 1EBD; Case map 1EBE; 1EBF; Case map 1EC0; 1EC1; Case map 1EC2; 1EC3; Case map 1EC4; 1EC5; Case map 1EC6; 1EC7; Case map 1EC8; 1EC9; Case map 1ECA; 1ECB; Case map 1ECC; 1ECD; Case map 1ECE; 1ECF; Case map 1ED0; 1ED1; Case map 1ED2; 1ED3; Case map 1ED4; 1ED5; Case map 1ED6; 1ED7; Case map 1ED8; 1ED9; Case map 1EDA; 1EDB; Case map 1EDC; 1EDD; Case map 1EDE; 1EDF; Case map 1EE0; 1EE1; Case map 1EE2; 1EE3; Case map 1EE4; 1EE5; Case map 1EE6; 1EE7; Case map 1EE8; 1EE9; Case map 1EEA; 1EEB; Case map 1EEC; 1EED; Case map 1EEE; 1EEF; Case map 1EF0; 1EF1; Case map 1EF2; 1EF3; Case map 1EF4; 1EF5; Case map 1EF6; 1EF7; Case map 1EF8; 1EF9; Case map 1F08; 1F00; Case map 1F09; 1F01; Case map 1F0A; 1F02; Case map 1F0B; 1F03; Case map 1F0C; 1F04; Case map 1F0D; 1F05; Case map 1F0E; 1F06; Case map 1F0F; 1F07; Case map 1F18; 1F10; Case map 1F19; 1F11; Case map 1F1A; 1F12; Case map 1F1B; 1F13; Case map 1F1C; 1F14; Case map 1F1D; 1F15; Case map 1F28; 1F20; Case map 1F29; 1F21; Case map 1F2A; 1F22; Case map 1F2B; 1F23; Case map 1F2C; 1F24; Case map 1F2D; 1F25; Case map 1F2E; 1F26; Case map 1F2F; 1F27; Case map 1F38; 1F30; Case map 1F39; 1F31; Case map 1F3A; 1F32; Case map 1F3B; 1F33; Case map 1F3C; 1F34; Case map 1F3D; 1F35; Case map 1F3E; 1F36; Case map 1F3F; 1F37; Case map 1F48; 1F40; Case map 1F49; 1F41; Case map 1F4A; 1F42; Case map 1F4B; 1F43; Case map 1F4C; 1F44; Case map 1F4D; 1F45; Case map 1F50; 03C5 0313; Case map 1F52; 03C5 0313 0300; Case map 1F54; 03C5 0313 0301; Case map 1F56; 03C5 0313 0342; Case map 1F59; 1F51; Case map 1F5B; 1F53; Case map 1F5D; 1F55; Case map 1F5F; 1F57; Case map 1F68; 1F60; Case map 1F69; 1F61; Case map 1F6A; 1F62; Case map 1F6B; 1F63; Case map 1F6C; 1F64; Case map 1F6D; 1F65; Case map 1F6E; 1F66; Case map 1F6F; 1F67; Case map 1F80; 1F00 03B9; Case map 1F81; 1F01 03B9; Case map 1F82; 1F02 03B9; Case map 1F83; 1F03 03B9; Case map 1F84; 1F04 03B9; Case map 1F85; 1F05 03B9; Case map 1F86; 1F06 03B9; Case map 1F87; 1F07 03B9; Case map 1F88; 1F00 03B9; Case map 1F89; 1F01 03B9; Case map 1F8A; 1F02 03B9; Case map 1F8B; 1F03 03B9; Case map 1F8C; 1F04 03B9; Case map 1F8D; 1F05 03B9; Case map 1F8E; 1F06 03B9; Case map 1F8F; 1F07 03B9; Case map 1F90; 1F20 03B9; Case map 1F91; 1F21 03B9; Case map 1F92; 1F22 03B9; Case map 1F93; 1F23 03B9; Case map 1F94; 1F24 03B9; Case map 1F95; 1F25 03B9; Case map 1F96; 1F26 03B9; Case map 1F97; 1F27 03B9; Case map 1F98; 1F20 03B9; Case map 1F99; 1F21 03B9; Case map 1F9A; 1F22 03B9; Case map 1F9B; 1F23 03B9; Case map 1F9C; 1F24 03B9; Case map 1F9D; 1F25 03B9; Case map 1F9E; 1F26 03B9; Case map 1F9F; 1F27 03B9; Case map 1FA0; 1F60 03B9; Case map 1FA1; 1F61 03B9; Case map 1FA2; 1F62 03B9; Case map 1FA3; 1F63 03B9; Case map 1FA4; 1F64 03B9; Case map 1FA5; 1F65 03B9; Case map 1FA6; 1F66 03B9; Case map 1FA7; 1F67 03B9; Case map 1FA8; 1F60 03B9; Case map 1FA9; 1F61 03B9; Case map 1FAA; 1F62 03B9; Case map 1FAB; 1F63 03B9; Case map 1FAC; 1F64 03B9; Case map 1FAD; 1F65 03B9; Case map 1FAE; 1F66 03B9; Case map 1FAF; 1F67 03B9; Case map 1FB2; 1F70 03B9; Case map 1FB3; 03B1 03B9; Case map 1FB4; 03AC 03B9; Case map 1FB6; 03B1 0342; Case map 1FB7; 03B1 0342 03B9; Case map 1FB8; 1FB0; Case map 1FB9; 1FB1; Case map 1FBA; 1F70; Case map 1FBB; 1F71; Case map 1FBC; 03B1 03B9; Case map 1FBE; 03B9; Case map 1FC2; 1F74 03B9; Case map 1FC3; 03B7 03B9; Case map 1FC4; 03AE 03B9; Case map 1FC6; 03B7 0342; Case map 1FC7; 03B7 0342 03B9; Case map 1FC8; 1F72; Case map 1FC9; 1F73; Case map 1FCA; 1F74; Case map 1FCB; 1F75; Case map 1FCC; 03B7 03B9; Case map 1FD2; 03B9 0308 0300; Case map 1FD3; 03B9 0308 0301; Case map 1FD6; 03B9 0342; Case map 1FD7; 03B9 0308 0342; Case map 1FD8; 1FD0; Case map 1FD9; 1FD1; Case map 1FDA; 1F76; Case map 1FDB; 1F77; Case map 1FE2; 03C5 0308 0300; Case map 1FE3; 03C5 0308 0301; Case map 1FE4; 03C1 0313; Case map 1FE6; 03C5 0342; Case map 1FE7; 03C5 0308 0342; Case map 1FE8; 1FE0; Case map 1FE9; 1FE1; Case map 1FEA; 1F7A; Case map 1FEB; 1F7B; Case map 1FEC; 1FE5; Case map 1FF2; 1F7C 03B9; Case map 1FF3; 03C9 03B9; Case map 1FF4; 03CE 03B9; Case map 1FF6; 03C9 0342; Case map 1FF7; 03C9 0342 03B9; Case map 1FF8; 1F78; Case map 1FF9; 1F79; Case map 1FFA; 1F7C; Case map 1FFB; 1F7D; Case map 1FFC; 03C9 03B9; Case map 20A8; 0072 0073; Additional folding 2102; 0063; Additional folding 2103; 00B0 0063; Additional folding 2107; 025B; Additional folding 2109; 00B0 0066; Additional folding 210B; 0068; Additional folding 210C; 0068; Additional folding 210D; 0068; Additional folding 2110; 0069; Additional folding 2111; 0069; Additional folding 2112; 006C; Additional folding 2115; 006E; Additional folding 2116; 006E 006F; Additional folding 2119; 0070; Additional folding 211A; 0071; Additional folding 211B; 0072; Additional folding 211C; 0072; Additional folding 211D; 0072; Additional folding 2120; 0073 006D; Additional folding 2121; 0074 0065 006C; Additional folding 2122; 0074 006D; Additional folding 2124; 007A; Additional folding 2126; 03C9; Case map 2128; 007A; Additional folding 212A; 006B; Case map 212B; 00E5; Case map 212C; 0062; Additional folding 212D; 0063; Additional folding 2130; 0065; Additional folding 2131; 0066; Additional folding 2133; 006D; Additional folding 213E; 03B3; Additional folding 213F; 03C0; Additional folding 2145; 0064; Additional folding 2160; 2170; Case map 2161; 2171; Case map 2162; 2172; Case map 2163; 2173; Case map 2164; 2174; Case map 2165; 2175; Case map 2166; 2176; Case map 2167; 2177; Case map 2168; 2178; Case map 2169; 2179; Case map 216A; 217A; Case map 216B; 217B; Case map 216C; 217C; Case map 216D; 217D; Case map 216E; 217E; Case map 216F; 217F; Case map 24B6; 24D0; Case map 24B7; 24D1; Case map 24B8; 24D2; Case map 24B9; 24D3; Case map 24BA; 24D4; Case map 24BB; 24D5; Case map 24BC; 24D6; Case map 24BD; 24D7; Case map 24BE; 24D8; Case map 24BF; 24D9; Case map 24C0; 24DA; Case map 24C1; 24DB; Case map 24C2; 24DC; Case map 24C3; 24DD; Case map 24C4; 24DE; Case map 24C5; 24DF; Case map 24C6; 24E0; Case map 24C7; 24E1; Case map 24C8; 24E2; Case map 24C9; 24E3; Case map 24CA; 24E4; Case map 24CB; 24E5; Case map 24CC; 24E6; Case map 24CD; 24E7; Case map 24CE; 24E8; Case map 24CF; 24E9; Case map 3371; 0068 0070 0061; Additional folding 3373; 0061 0075; Additional folding 3375; 006F 0076; Additional folding 3380; 0070 0061; Additional folding 3381; 006E 0061; Additional folding 3382; 03BC 0061; Additional folding 3383; 006D 0061; Additional folding 3384; 006B 0061; Additional folding 3385; 006B 0062; Additional folding 3386; 006D 0062; Additional folding 3387; 0067 0062; Additional folding 338A; 0070 0066; Additional folding 338B; 006E 0066; Additional folding 338C; 03BC 0066; Additional folding 3390; 0068 007A; Additional folding 3391; 006B 0068 007A; Additional folding 3392; 006D 0068 007A; Additional folding 3393; 0067 0068 007A; Additional folding 3394; 0074 0068 007A; Additional folding 33A9; 0070 0061; Additional folding 33AA; 006B 0070 0061; Additional folding 33AB; 006D 0070 0061; Additional folding 33AC; 0067 0070 0061; Additional folding 33B4; 0070 0076; Additional folding 33B5; 006E 0076; Additional folding 33B6; 03BC 0076; Additional folding 33B7; 006D 0076; Additional folding 33B8; 006B 0076; Additional folding 33B9; 006D 0076; Additional folding 33BA; 0070 0077; Additional folding 33BB; 006E 0077; Additional folding 33BC; 03BC 0077; Additional folding 33BD; 006D 0077; Additional folding 33BE; 006B 0077; Additional folding 33BF; 006D 0077; Additional folding 33C0; 006B 03C9; Additional folding 33C1; 006D 03C9; Additional folding 33C3; 0062 0071; Additional folding 33C6; 0063 2215 006B 0067; Additional folding 33C7; 0063 006F 002E; Additional folding 33C8; 0064 0062; Additional folding 33C9; 0067 0079; Additional folding 33CB; 0068 0070; Additional folding 33CD; 006B 006B; Additional folding 33CE; 006B 006D; Additional folding 33D7; 0070 0068; Additional folding 33D9; 0070 0070 006D; Additional folding 33DA; 0070 0072; Additional folding 33DC; 0073 0076; Additional folding 33DD; 0077 0062; Additional folding FB00; 0066 0066; Case map FB01; 0066 0069; Case map FB02; 0066 006C; Case map FB03; 0066 0066 0069; Case map FB04; 0066 0066 006C; Case map FB05; 0073 0074; Case map FB06; 0073 0074; Case map FB13; 0574 0576; Case map FB14; 0574 0565; Case map FB15; 0574 056B; Case map FB16; 057E 0576; Case map FB17; 0574 056D; Case map FF21; FF41; Case map FF22; FF42; Case map FF23; FF43; Case map FF24; FF44; Case map FF25; FF45; Case map FF26; FF46; Case map FF27; FF47; Case map FF28; FF48; Case map FF29; FF49; Case map FF2A; FF4A; Case map FF2B; FF4B; Case map FF2C; FF4C; Case map FF2D; FF4D; Case map FF2E; FF4E; Case map FF2F; FF4F; Case map FF30; FF50; Case map FF31; FF51; Case map FF32; FF52; Case map FF33; FF53; Case map FF34; FF54; Case map FF35; FF55; Case map FF36; FF56; Case map FF37; FF57; Case map FF38; FF58; Case map FF39; FF59; Case map FF3A; FF5A; Case map 10400; 10428; Case map 10401; 10429; Case map 10402; 1042A; Case map 10403; 1042B; Case map 10404; 1042C; Case map 10405; 1042D; Case map 10406; 1042E; Case map 10407; 1042F; Case map 10408; 10430; Case map 10409; 10431; Case map 1040A; 10432; Case map 1040B; 10433; Case map 1040C; 10434; Case map 1040D; 10435; Case map 1040E; 10436; Case map 1040F; 10437; Case map 10410; 10438; Case map 10411; 10439; Case map 10412; 1043A; Case map 10413; 1043B; Case map 10414; 1043C; Case map 10415; 1043D; Case map 10416; 1043E; Case map 10417; 1043F; Case map 10418; 10440; Case map 10419; 10441; Case map 1041A; 10442; Case map 1041B; 10443; Case map 1041C; 10444; Case map 1041D; 10445; Case map 1041E; 10446; Case map 1041F; 10447; Case map 10420; 10448; Case map 10421; 10449; Case map 10422; 1044A; Case map 10423; 1044B; Case map 10424; 1044C; Case map 10425; 1044D; Case map 1D400; 0061; Additional folding 1D401; 0062; Additional folding 1D402; 0063; Additional folding 1D403; 0064; Additional folding 1D404; 0065; Additional folding 1D405; 0066; Additional folding 1D406; 0067; Additional folding 1D407; 0068; Additional folding 1D408; 0069; Additional folding 1D409; 006A; Additional folding 1D40A; 006B; Additional folding 1D40B; 006C; Additional folding 1D40C; 006D; Additional folding 1D40D; 006E; Additional folding 1D40E; 006F; Additional folding 1D40F; 0070; Additional folding 1D410; 0071; Additional folding 1D411; 0072; Additional folding 1D412; 0073; Additional folding 1D413; 0074; Additional folding 1D414; 0075; Additional folding 1D415; 0076; Additional folding 1D416; 0077; Additional folding 1D417; 0078; Additional folding 1D418; 0079; Additional folding 1D419; 007A; Additional folding 1D434; 0061; Additional folding 1D435; 0062; Additional folding 1D436; 0063; Additional folding 1D437; 0064; Additional folding 1D438; 0065; Additional folding 1D439; 0066; Additional folding 1D43A; 0067; Additional folding 1D43B; 0068; Additional folding 1D43C; 0069; Additional folding 1D43D; 006A; Additional folding 1D43E; 006B; Additional folding 1D43F; 006C; Additional folding 1D440; 006D; Additional folding 1D441; 006E; Additional folding 1D442; 006F; Additional folding 1D443; 0070; Additional folding 1D444; 0071; Additional folding 1D445; 0072; Additional folding 1D446; 0073; Additional folding 1D447; 0074; Additional folding 1D448; 0075; Additional folding 1D449; 0076; Additional folding 1D44A; 0077; Additional folding 1D44B; 0078; Additional folding 1D44C; 0079; Additional folding 1D44D; 007A; Additional folding 1D468; 0061; Additional folding 1D469; 0062; Additional folding 1D46A; 0063; Additional folding 1D46B; 0064; Additional folding 1D46C; 0065; Additional folding 1D46D; 0066; Additional folding 1D46E; 0067; Additional folding 1D46F; 0068; Additional folding 1D470; 0069; Additional folding 1D471; 006A; Additional folding 1D472; 006B; Additional folding 1D473; 006C; Additional folding 1D474; 006D; Additional folding 1D475; 006E; Additional folding 1D476; 006F; Additional folding 1D477; 0070; Additional folding 1D478; 0071; Additional folding 1D479; 0072; Additional folding 1D47A; 0073; Additional folding 1D47B; 0074; Additional folding 1D47C; 0075; Additional folding 1D47D; 0076; Additional folding 1D47E; 0077; Additional folding 1D47F; 0078; Additional folding 1D480; 0079; Additional folding 1D481; 007A; Additional folding 1D49C; 0061; Additional folding 1D49E; 0063; Additional folding 1D49F; 0064; Additional folding 1D4A2; 0067; Additional folding 1D4A5; 006A; Additional folding 1D4A6; 006B; Additional folding 1D4A9; 006E; Additional folding 1D4AA; 006F; Additional folding 1D4AB; 0070; Additional folding 1D4AC; 0071; Additional folding 1D4AE; 0073; Additional folding 1D4AF; 0074; Additional folding 1D4B0; 0075; Additional folding 1D4B1; 0076; Additional folding 1D4B2; 0077; Additional folding 1D4B3; 0078; Additional folding 1D4B4; 0079; Additional folding 1D4B5; 007A; Additional folding 1D4D0; 0061; Additional folding 1D4D1; 0062; Additional folding 1D4D2; 0063; Additional folding 1D4D3; 0064; Additional folding 1D4D4; 0065; Additional folding 1D4D5; 0066; Additional folding 1D4D6; 0067; Additional folding 1D4D7; 0068; Additional folding 1D4D8; 0069; Additional folding 1D4D9; 006A; Additional folding 1D4DA; 006B; Additional folding 1D4DB; 006C; Additional folding 1D4DC; 006D; Additional folding 1D4DD; 006E; Additional folding 1D4DE; 006F; Additional folding 1D4DF; 0070; Additional folding 1D4E0; 0071; Additional folding 1D4E1; 0072; Additional folding 1D4E2; 0073; Additional folding 1D4E3; 0074; Additional folding 1D4E4; 0075; Additional folding 1D4E5; 0076; Additional folding 1D4E6; 0077; Additional folding 1D4E7; 0078; Additional folding 1D4E8; 0079; Additional folding 1D4E9; 007A; Additional folding 1D504; 0061; Additional folding 1D505; 0062; Additional folding 1D507; 0064; Additional folding 1D508; 0065; Additional folding 1D509; 0066; Additional folding 1D50A; 0067; Additional folding 1D50D; 006A; Additional folding 1D50E; 006B; Additional folding 1D50F; 006C; Additional folding 1D510; 006D; Additional folding 1D511; 006E; Additional folding 1D512; 006F; Additional folding 1D513; 0070; Additional folding 1D514; 0071; Additional folding 1D516; 0073; Additional folding 1D517; 0074; Additional folding 1D518; 0075; Additional folding 1D519; 0076; Additional folding 1D51A; 0077; Additional folding 1D51B; 0078; Additional folding 1D51C; 0079; Additional folding 1D538; 0061; Additional folding 1D539; 0062; Additional folding 1D53B; 0064; Additional folding 1D53C; 0065; Additional folding 1D53D; 0066; Additional folding 1D53E; 0067; Additional folding 1D540; 0069; Additional folding 1D541; 006A; Additional folding 1D542; 006B; Additional folding 1D543; 006C; Additional folding 1D544; 006D; Additional folding 1D546; 006F; Additional folding 1D54A; 0073; Additional folding 1D54B; 0074; Additional folding 1D54C; 0075; Additional folding 1D54D; 0076; Additional folding 1D54E; 0077; Additional folding 1D54F; 0078; Additional folding 1D550; 0079; Additional folding 1D56C; 0061; Additional folding 1D56D; 0062; Additional folding 1D56E; 0063; Additional folding 1D56F; 0064; Additional folding 1D570; 0065; Additional folding 1D571; 0066; Additional folding 1D572; 0067; Additional folding 1D573; 0068; Additional folding 1D574; 0069; Additional folding 1D575; 006A; Additional folding 1D576; 006B; Additional folding 1D577; 006C; Additional folding 1D578; 006D; Additional folding 1D579; 006E; Additional folding 1D57A; 006F; Additional folding 1D57B; 0070; Additional folding 1D57C; 0071; Additional folding 1D57D; 0072; Additional folding 1D57E; 0073; Additional folding 1D57F; 0074; Additional folding 1D580; 0075; Additional folding 1D581; 0076; Additional folding 1D582; 0077; Additional folding 1D583; 0078; Additional folding 1D584; 0079; Additional folding 1D585; 007A; Additional folding 1D5A0; 0061; Additional folding 1D5A1; 0062; Additional folding 1D5A2; 0063; Additional folding 1D5A3; 0064; Additional folding 1D5A4; 0065; Additional folding 1D5A5; 0066; Additional folding 1D5A6; 0067; Additional folding 1D5A7; 0068; Additional folding 1D5A8; 0069; Additional folding 1D5A9; 006A; Additional folding 1D5AA; 006B; Additional folding 1D5AB; 006C; Additional folding 1D5AC; 006D; Additional folding 1D5AD; 006E; Additional folding 1D5AE; 006F; Additional folding 1D5AF; 0070; Additional folding 1D5B0; 0071; Additional folding 1D5B1; 0072; Additional folding 1D5B2; 0073; Additional folding 1D5B3; 0074; Additional folding 1D5B4; 0075; Additional folding 1D5B5; 0076; Additional folding 1D5B6; 0077; Additional folding 1D5B7; 0078; Additional folding 1D5B8; 0079; Additional folding 1D5B9; 007A; Additional folding 1D5D4; 0061; Additional folding 1D5D5; 0062; Additional folding 1D5D6; 0063; Additional folding 1D5D7; 0064; Additional folding 1D5D8; 0065; Additional folding 1D5D9; 0066; Additional folding 1D5DA; 0067; Additional folding 1D5DB; 0068; Additional folding 1D5DC; 0069; Additional folding 1D5DD; 006A; Additional folding 1D5DE; 006B; Additional folding 1D5DF; 006C; Additional folding 1D5E0; 006D; Additional folding 1D5E1; 006E; Additional folding 1D5E2; 006F; Additional folding 1D5E3; 0070; Additional folding 1D5E4; 0071; Additional folding 1D5E5; 0072; Additional folding 1D5E6; 0073; Additional folding 1D5E7; 0074; Additional folding 1D5E8; 0075; Additional folding 1D5E9; 0076; Additional folding 1D5EA; 0077; Additional folding 1D5EB; 0078; Additional folding 1D5EC; 0079; Additional folding 1D5ED; 007A; Additional folding 1D608; 0061; Additional folding 1D609; 0062; Additional folding 1D60A; 0063; Additional folding 1D60B; 0064; Additional folding 1D60C; 0065; Additional folding 1D60D; 0066; Additional folding 1D60E; 0067; Additional folding 1D60F; 0068; Additional folding 1D610; 0069; Additional folding 1D611; 006A; Additional folding 1D612; 006B; Additional folding 1D613; 006C; Additional folding 1D614; 006D; Additional folding 1D615; 006E; Additional folding 1D616; 006F; Additional folding 1D617; 0070; Additional folding 1D618; 0071; Additional folding 1D619; 0072; Additional folding 1D61A; 0073; Additional folding 1D61B; 0074; Additional folding 1D61C; 0075; Additional folding 1D61D; 0076; Additional folding 1D61E; 0077; Additional folding 1D61F; 0078; Additional folding 1D620; 0079; Additional folding 1D621; 007A; Additional folding 1D63C; 0061; Additional folding 1D63D; 0062; Additional folding 1D63E; 0063; Additional folding 1D63F; 0064; Additional folding 1D640; 0065; Additional folding 1D641; 0066; Additional folding 1D642; 0067; Additional folding 1D643; 0068; Additional folding 1D644; 0069; Additional folding 1D645; 006A; Additional folding 1D646; 006B; Additional folding 1D647; 006C; Additional folding 1D648; 006D; Additional folding 1D649; 006E; Additional folding 1D64A; 006F; Additional folding 1D64B; 0070; Additional folding 1D64C; 0071; Additional folding 1D64D; 0072; Additional folding 1D64E; 0073; Additional folding 1D64F; 0074; Additional folding 1D650; 0075; Additional folding 1D651; 0076; Additional folding 1D652; 0077; Additional folding 1D653; 0078; Additional folding 1D654; 0079; Additional folding 1D655; 007A; Additional folding 1D670; 0061; Additional folding 1D671; 0062; Additional folding 1D672; 0063; Additional folding 1D673; 0064; Additional folding 1D674; 0065; Additional folding 1D675; 0066; Additional folding 1D676; 0067; Additional folding 1D677; 0068; Additional folding 1D678; 0069; Additional folding 1D679; 006A; Additional folding 1D67A; 006B; Additional folding 1D67B; 006C; Additional folding 1D67C; 006D; Additional folding 1D67D; 006E; Additional folding 1D67E; 006F; Additional folding 1D67F; 0070; Additional folding 1D680; 0071; Additional folding 1D681; 0072; Additional folding 1D682; 0073; Additional folding 1D683; 0074; Additional folding 1D684; 0075; Additional folding 1D685; 0076; Additional folding 1D686; 0077; Additional folding 1D687; 0078; Additional folding 1D688; 0079; Additional folding 1D689; 007A; Additional folding 1D6A8; 03B1; Additional folding 1D6A9; 03B2; Additional folding 1D6AA; 03B3; Additional folding 1D6AB; 03B4; Additional folding 1D6AC; 03B5; Additional folding 1D6AD; 03B6; Additional folding 1D6AE; 03B7; Additional folding 1D6AF; 03B8; Additional folding 1D6B0; 03B9; Additional folding 1D6B1; 03BA; Additional folding 1D6B2; 03BB; Additional folding 1D6B3; 03BC; Additional folding 1D6B4; 03BD; Additional folding 1D6B5; 03BE; Additional folding 1D6B6; 03BF; Additional folding 1D6B7; 03C0; Additional folding 1D6B8; 03C1; Additional folding 1D6B9; 03B8; Additional folding 1D6BA; 03C3; Additional folding 1D6BB; 03C4; Additional folding 1D6BC; 03C5; Additional folding 1D6BD; 03C6; Additional folding 1D6BE; 03C7; Additional folding 1D6BF; 03C8; Additional folding 1D6C0; 03C9; Additional folding 1D6D3; 03C3; Additional folding 1D6E2; 03B1; Additional folding 1D6E3; 03B2; Additional folding 1D6E4; 03B3; Additional folding 1D6E5; 03B4; Additional folding 1D6E6; 03B5; Additional folding 1D6E7; 03B6; Additional folding 1D6E8; 03B7; Additional folding 1D6E9; 03B8; Additional folding 1D6EA; 03B9; Additional folding 1D6EB; 03BA; Additional folding 1D6EC; 03BB; Additional folding 1D6ED; 03BC; Additional folding 1D6EE; 03BD; Additional folding 1D6EF; 03BE; Additional folding 1D6F0; 03BF; Additional folding 1D6F1; 03C0; Additional folding 1D6F2; 03C1; Additional folding 1D6F3; 03B8; Additional folding 1D6F4; 03C3; Additional folding 1D6F5; 03C4; Additional folding 1D6F6; 03C5; Additional folding 1D6F7; 03C6; Additional folding 1D6F8; 03C7; Additional folding 1D6F9; 03C8; Additional folding 1D6FA; 03C9; Additional folding 1D70D; 03C3; Additional folding 1D71C; 03B1; Additional folding 1D71D; 03B2; Additional folding 1D71E; 03B3; Additional folding 1D71F; 03B4; Additional folding 1D720; 03B5; Additional folding 1D721; 03B6; Additional folding 1D722; 03B7; Additional folding 1D723; 03B8; Additional folding 1D724; 03B9; Additional folding 1D725; 03BA; Additional folding 1D726; 03BB; Additional folding 1D727; 03BC; Additional folding 1D728; 03BD; Additional folding 1D729; 03BE; Additional folding 1D72A; 03BF; Additional folding 1D72B; 03C0; Additional folding 1D72C; 03C1; Additional folding 1D72D; 03B8; Additional folding 1D72E; 03C3; Additional folding 1D72F; 03C4; Additional folding 1D730; 03C5; Additional folding 1D731; 03C6; Additional folding 1D732; 03C7; Additional folding 1D733; 03C8; Additional folding 1D734; 03C9; Additional folding 1D747; 03C3; Additional folding 1D756; 03B1; Additional folding 1D757; 03B2; Additional folding 1D758; 03B3; Additional folding 1D759; 03B4; Additional folding 1D75A; 03B5; Additional folding 1D75B; 03B6; Additional folding 1D75C; 03B7; Additional folding 1D75D; 03B8; Additional folding 1D75E; 03B9; Additional folding 1D75F; 03BA; Additional folding 1D760; 03BB; Additional folding 1D761; 03BC; Additional folding 1D762; 03BD; Additional folding 1D763; 03BE; Additional folding 1D764; 03BF; Additional folding 1D765; 03C0; Additional folding 1D766; 03C1; Additional folding 1D767; 03B8; Additional folding 1D768; 03C3; Additional folding 1D769; 03C4; Additional folding 1D76A; 03C5; Additional folding 1D76B; 03C6; Additional folding 1D76C; 03C7; Additional folding 1D76D; 03C8; Additional folding 1D76E; 03C9; Additional folding 1D781; 03C3; Additional folding 1D790; 03B1; Additional folding 1D791; 03B2; Additional folding 1D792; 03B3; Additional folding 1D793; 03B4; Additional folding 1D794; 03B5; Additional folding 1D795; 03B6; Additional folding 1D796; 03B7; Additional folding 1D797; 03B8; Additional folding 1D798; 03B9; Additional folding 1D799; 03BA; Additional folding 1D79A; 03BB; Additional folding 1D79B; 03BC; Additional folding 1D79C; 03BD; Additional folding 1D79D; 03BE; Additional folding 1D79E; 03BF; Additional folding 1D79F; 03C0; Additional folding 1D7A0; 03C1; Additional folding 1D7A1; 03B8; Additional folding 1D7A2; 03C3; Additional folding 1D7A3; 03C4; Additional folding 1D7A4; 03C5; Additional folding 1D7A5; 03C6; Additional folding 1D7A6; 03C7; Additional folding 1D7A7; 03C8; Additional folding 1D7A8; 03C9; Additional folding 1D7BB; 03C3; Additional folding opensrs-client-3.0.0/lib/RACE/ProhibitedCharacters-01.txt0000644017777601777760000000076410770014205024073 0ustar nobodynogroup000000000000000000-002C 002E-002F 003A-0040 005B-0060 007B-007F 0080-009F 00A0 1680 2000 2001 2002 2003 2004 2005 2006 2007 2008 2009 200A 200B 200E 200F 2028 2029 202A 202B 202C 202D 202E 202F 206A 206B 206C 206D 206E 206F 2FF0-2FFF 3000 D800-DFFF E000-F8FF FFF9 FFFA FFFB FFFC FFFD FFFE-FFFF 1FFFE-1FFFF 2FFFE-2FFFF 3FFFE-3FFFF 4FFFE-4FFFF 5FFFE-5FFFF 6FFFE-6FFFF 7FFFE-7FFFF 8FFFE-8FFFF 9FFFE-9FFFF AFFFE-AFFFF BFFFE-BFFFF CFFFE-CFFFF DFFFE-DFFFF EFFFE-EFFFF F0000-FFFFD FFFFE-FFFFF 100000-10FFFD 10FFFE-10FFFF opensrs-client-3.0.0/lib/RACE/ProhibitedCharacters-03.txt0000644017777601777760000000077110770014205024073 0ustar nobodynogroup000000000000000000-002C 002E-002F 003A-0040 005B-0060 007B-007F 0080-009F 00A0 1680 2000 2001 2002 2003 2004 2005 2006 2007 2008 2009 200A 200B 200E 200F 2028 2029 202A 202B 202C 202D 202E 202F 206A 206B 206C 206D 206E 206F 2FF0-2FFF 3000 3002 D800-DFFF E000-F8FF FFF9 FFFA FFFB FFFC FFFD FFFE-FFFF 1FFFE-1FFFF 2FFFE-2FFFF 3FFFE-3FFFF 4FFFE-4FFFF 5FFFE-5FFFF 6FFFE-6FFFF 7FFFE-7FFFF 8FFFE-8FFFF 9FFFE-9FFFF AFFFE-AFFFF BFFFE-BFFFF CFFFE-CFFFF DFFFE-DFFFF EFFFE-EFFFF F0000-FFFFD FFFFE-FFFFF 100000-10FFFD 10FFFE-10FFFF opensrs-client-3.0.0/lib/RACE/UnassignedCharacters-01.txt0000644017777601777760000000570510770014205024102 0ustar nobodynogroup000000000000000220-0221 0234-024F 02AE-02AF 02EF-02FF 034F-035F 0363-0373 0376-0379 037B-037D 037F-0383 038B 038D 03A2 03CF 03D8-03D9 03F4-03FF 0487 048A-048B 04C5-04C6 04C9-04CA 04CD-04CF 04F6-04F7 04FA-0530 0557-0558 0560 0588 058B-0590 05A2 05BA 05C5-05CF 05EB-05EF 05F5-060B 060D-061A 061C-061E 0620 063B-063F 0656-065F 066E-066F 06EE-06EF 06FF 070E 072D-072F 074B-077F 07B1-0900 0904 093A-093B 094E-094F 0955-0957 0971-0980 0984 098D-098E 0991-0992 09A9 09B1 09B3-09B5 09BA-09BB 09BD 09C5-09C6 09C9-09CA 09CE-09D6 09D8-09DB 09DE 09E4-09E5 09FB-0A01 0A03-0A04 0A0B-0A0E 0A11-0A12 0A29 0A31 0A34 0A37 0A3A-0A3B 0A3D 0A43-0A46 0A49-0A4A 0A4E-0A58 0A5D 0A5F-0A65 0A75-0A80 0A84 0A8C 0A8E 0A92 0AA9 0AB1 0AB4 0ABA-0ABB 0AC6 0ACA 0ACE-0ACF 0AD1-0ADF 0AE1-0AE5 0AF0-0B00 0B04 0B0D-0B0E 0B11-0B12 0B29 0B31 0B34-0B35 0B3A-0B3B 0B44-0B46 0B49-0B4A 0B4E-0B55 0B58-0B5B 0B5E 0B62-0B65 0B71-0B81 0B84 0B8B-0B8D 0B91 0B96-0B98 0B9B 0B9D 0BA0-0BA2 0BA5-0BA7 0BAB-0BAD 0BB6 0BBA-0BBD 0BC3-0BC5 0BC9 0BCE-0BD6 0BD8-0BE6 0BF3-0C00 0C04 0C0D 0C11 0C29 0C34 0C3A-0C3D 0C45 0C49 0C4E-0C54 0C57-0C5F 0C62-0C65 0C70-0C81 0C84 0C8D 0C91 0CA9 0CB4 0CBA-0CBD 0CC5 0CC9 0CCE-0CD4 0CD7-0CDD 0CDF 0CE2-0CE5 0CF0-0D01 0D04 0D0D 0D11 0D29 0D3A-0D3D 0D44-0D45 0D49 0D4E-0D56 0D58-0D5F 0D62-0D65 0D70-0D81 0D84 0D97-0D99 0DB2 0DBC 0DBE-0DBF 0DC7-0DC9 0DCB-0DCE 0DD5 0DD7 0DE0-0DF1 0DF5-0E00 0E3B-0E3E 0E5C-0E80 0E83 0E85-0E86 0E89 0E8B-0E8C 0E8E-0E93 0E98 0EA0 0EA4 0EA6 0EA8-0EA9 0EAC 0EBA 0EBE-0EBF 0EC5 0EC7 0ECE-0ECF 0EDA-0EDB 0EDE-0EFF 0F48 0F6B-0F70 0F8C-0F8F 0F98 0FBD 0FCD-0FCE 0FD0-0FFF 1022 1028 102B 1033-1035 103A-103F 105A-109F 10C6-10CF 10F7-10FA 10FC-10FF 115A-115E 11A3-11A7 11FA-11FF 1207 1247 1249 124E-124F 1257 1259 125E-125F 1287 1289 128E-128F 12AF 12B1 12B6-12B7 12BF 12C1 12C6-12C7 12CF 12D7 12EF 130F 1311 1316-1317 131F 1347 135B-1360 137D-139F 13F5-1400 1677-167F 169D-169F 16F1-177F 17DD-17DF 17EA-17FF 180F 181A-181F 1878-187F 18AA-1DFF 1E9C-1E9F 1EFA-1EFF 1F16-1F17 1F1E-1F1F 1F46-1F47 1F4E-1F4F 1F58 1F5A 1F5C 1F5E 1F7E-1F7F 1FB5 1FC5 1FD4-1FD5 1FDC 1FF0-1FF1 1FF5 1FFF 2047 204E-2069 2071-2073 208F-209F 20B0-20CF 20E4-20FF 213B-2152 2184-218F 21F4-21FF 22F2-22FF 237C 239B-23FF 2427-243F 244B-245F 24EB-24FF 2596-259F 25F8-25FF 2614-2618 2672-2700 2705 270A-270B 2728 274C 274E 2753-2755 2757 275F-2760 2768-2775 2795-2797 27B0 27BF-27FF 2900-2E7F 2E9A 2EF4-2EFF 2FD6-2FEF 2FFC-2FFF 303B-303D 3040 3095-3098 309F-30A0 30FF-3104 312D-3130 318F 31B8-31FF 321D-321F 3244-325F 327C-327E 32B1-32BF 32CC-32CF 32FF 3377-337A 33DE-33DF 33FF 4DB6-4DFF 9FA6-9FFF A48D-A48F A4A2-A4A3 A4B4 A4C1 A4C5 A4C7-ABFF D7A4-D7FF FA2E-FAFF FB07-FB12 FB18-FB1C FB37 FB3D FB3F FB42 FB45 FBB2-FBD2 FD40-FD4F FD90-FD91 FDC8-FDCF FDFC-FE1F FE24-FE2F FE45-FE48 FE53 FE67 FE6C-FE6F FE73 FE75 FEFD-FEFE FF00 FF5F-FF60 FFBF-FFC1 FFC8-FFC9 FFD0-FFD1 FFD8-FFD9 FFDD-FFDF FFE7 FFEF-FFF8 10000-1FFFD 20000-2FFFD 30000-3FFFD 40000-4FFFD 50000-5FFFD 60000-6FFFD 70000-7FFFD 80000-8FFFD 90000-9FFFD A0000-AFFFD B0000-BFFFD C0000-CFFFD D0000-DFFFD E0000-EFFFD opensrs-client-3.0.0/lib/RACE/UnassignedCharacters-03.txt0000644017777601777760000000570510770014205024104 0ustar nobodynogroup000000000000000220-0221 0234-024F 02AE-02AF 02EF-02FF 034F-035F 0363-0373 0376-0379 037B-037D 037F-0383 038B 038D 03A2 03CF 03D8-03D9 03F4-03FF 0487 048A-048B 04C5-04C6 04C9-04CA 04CD-04CF 04F6-04F7 04FA-0530 0557-0558 0560 0588 058B-0590 05A2 05BA 05C5-05CF 05EB-05EF 05F5-060B 060D-061A 061C-061E 0620 063B-063F 0656-065F 066E-066F 06EE-06EF 06FF 070E 072D-072F 074B-077F 07B1-0900 0904 093A-093B 094E-094F 0955-0957 0971-0980 0984 098D-098E 0991-0992 09A9 09B1 09B3-09B5 09BA-09BB 09BD 09C5-09C6 09C9-09CA 09CE-09D6 09D8-09DB 09DE 09E4-09E5 09FB-0A01 0A03-0A04 0A0B-0A0E 0A11-0A12 0A29 0A31 0A34 0A37 0A3A-0A3B 0A3D 0A43-0A46 0A49-0A4A 0A4E-0A58 0A5D 0A5F-0A65 0A75-0A80 0A84 0A8C 0A8E 0A92 0AA9 0AB1 0AB4 0ABA-0ABB 0AC6 0ACA 0ACE-0ACF 0AD1-0ADF 0AE1-0AE5 0AF0-0B00 0B04 0B0D-0B0E 0B11-0B12 0B29 0B31 0B34-0B35 0B3A-0B3B 0B44-0B46 0B49-0B4A 0B4E-0B55 0B58-0B5B 0B5E 0B62-0B65 0B71-0B81 0B84 0B8B-0B8D 0B91 0B96-0B98 0B9B 0B9D 0BA0-0BA2 0BA5-0BA7 0BAB-0BAD 0BB6 0BBA-0BBD 0BC3-0BC5 0BC9 0BCE-0BD6 0BD8-0BE6 0BF3-0C00 0C04 0C0D 0C11 0C29 0C34 0C3A-0C3D 0C45 0C49 0C4E-0C54 0C57-0C5F 0C62-0C65 0C70-0C81 0C84 0C8D 0C91 0CA9 0CB4 0CBA-0CBD 0CC5 0CC9 0CCE-0CD4 0CD7-0CDD 0CDF 0CE2-0CE5 0CF0-0D01 0D04 0D0D 0D11 0D29 0D3A-0D3D 0D44-0D45 0D49 0D4E-0D56 0D58-0D5F 0D62-0D65 0D70-0D81 0D84 0D97-0D99 0DB2 0DBC 0DBE-0DBF 0DC7-0DC9 0DCB-0DCE 0DD5 0DD7 0DE0-0DF1 0DF5-0E00 0E3B-0E3E 0E5C-0E80 0E83 0E85-0E86 0E89 0E8B-0E8C 0E8E-0E93 0E98 0EA0 0EA4 0EA6 0EA8-0EA9 0EAC 0EBA 0EBE-0EBF 0EC5 0EC7 0ECE-0ECF 0EDA-0EDB 0EDE-0EFF 0F48 0F6B-0F70 0F8C-0F8F 0F98 0FBD 0FCD-0FCE 0FD0-0FFF 1022 1028 102B 1033-1035 103A-103F 105A-109F 10C6-10CF 10F7-10FA 10FC-10FF 115A-115E 11A3-11A7 11FA-11FF 1207 1247 1249 124E-124F 1257 1259 125E-125F 1287 1289 128E-128F 12AF 12B1 12B6-12B7 12BF 12C1 12C6-12C7 12CF 12D7 12EF 130F 1311 1316-1317 131F 1347 135B-1360 137D-139F 13F5-1400 1677-167F 169D-169F 16F1-177F 17DD-17DF 17EA-17FF 180F 181A-181F 1878-187F 18AA-1DFF 1E9C-1E9F 1EFA-1EFF 1F16-1F17 1F1E-1F1F 1F46-1F47 1F4E-1F4F 1F58 1F5A 1F5C 1F5E 1F7E-1F7F 1FB5 1FC5 1FD4-1FD5 1FDC 1FF0-1FF1 1FF5 1FFF 2047 204E-2069 2071-2073 208F-209F 20B0-20CF 20E4-20FF 213B-2152 2184-218F 21F4-21FF 22F2-22FF 237C 239B-23FF 2427-243F 244B-245F 24EB-24FF 2596-259F 25F8-25FF 2614-2618 2672-2700 2705 270A-270B 2728 274C 274E 2753-2755 2757 275F-2760 2768-2775 2795-2797 27B0 27BF-27FF 2900-2E7F 2E9A 2EF4-2EFF 2FD6-2FEF 2FFC-2FFF 303B-303D 3040 3095-3098 309F-30A0 30FF-3104 312D-3130 318F 31B8-31FF 321D-321F 3244-325F 327C-327E 32B1-32BF 32CC-32CF 32FF 3377-337A 33DE-33DF 33FF 4DB6-4DFF 9FA6-9FFF A48D-A48F A4A2-A4A3 A4B4 A4C1 A4C5 A4C7-ABFF D7A4-D7FF FA2E-FAFF FB07-FB12 FB18-FB1C FB37 FB3D FB3F FB42 FB45 FBB2-FBD2 FD40-FD4F FD90-FD91 FDC8-FDEF FDFC-FE1F FE24-FE2F FE45-FE48 FE53 FE67 FE6C-FE6F FE73 FE75 FEFD-FEFE FF00 FF5F-FF60 FFBF-FFC1 FFC8-FFC9 FFD0-FFD1 FFD8-FFD9 FFDD-FFDF FFE7 FFEF-FFF8 10000-1FFFD 20000-2FFFD 30000-3FFFD 40000-4FFFD 50000-5FFFD 60000-6FFFD 70000-7FFFD 80000-8FFFD 90000-9FFFD A0000-AFFFD B0000-BFFFD C0000-CFFFD D0000-DFFFD E0000-EFFFD opensrs-client-3.0.0/lib/RACE/UnicodeData-Latest.txt0000644017777601777760000233263210770014205023202 0ustar nobodynogroup000000000000000000;;Cc;0;BN;;;;;N;NULL;;;; 0001;;Cc;0;BN;;;;;N;START OF HEADING;;;; 0002;;Cc;0;BN;;;;;N;START OF TEXT;;;; 0003;;Cc;0;BN;;;;;N;END OF TEXT;;;; 0004;;Cc;0;BN;;;;;N;END OF TRANSMISSION;;;; 0005;;Cc;0;BN;;;;;N;ENQUIRY;;;; 0006;;Cc;0;BN;;;;;N;ACKNOWLEDGE;;;; 0007;;Cc;0;BN;;;;;N;BELL;;;; 0008;;Cc;0;BN;;;;;N;BACKSPACE;;;; 0009;;Cc;0;S;;;;;N;HORIZONTAL TABULATION;;;; 000A;;Cc;0;B;;;;;N;LINE FEED;;;; 000B;;Cc;0;S;;;;;N;VERTICAL TABULATION;;;; 000C;;Cc;0;WS;;;;;N;FORM FEED;;;; 000D;;Cc;0;B;;;;;N;CARRIAGE RETURN;;;; 000E;;Cc;0;BN;;;;;N;SHIFT OUT;;;; 000F;;Cc;0;BN;;;;;N;SHIFT IN;;;; 0010;;Cc;0;BN;;;;;N;DATA LINK ESCAPE;;;; 0011;;Cc;0;BN;;;;;N;DEVICE CONTROL ONE;;;; 0012;;Cc;0;BN;;;;;N;DEVICE CONTROL TWO;;;; 0013;;Cc;0;BN;;;;;N;DEVICE CONTROL THREE;;;; 0014;;Cc;0;BN;;;;;N;DEVICE CONTROL FOUR;;;; 0015;;Cc;0;BN;;;;;N;NEGATIVE ACKNOWLEDGE;;;; 0016;;Cc;0;BN;;;;;N;SYNCHRONOUS IDLE;;;; 0017;;Cc;0;BN;;;;;N;END OF TRANSMISSION BLOCK;;;; 0018;;Cc;0;BN;;;;;N;CANCEL;;;; 0019;;Cc;0;BN;;;;;N;END OF MEDIUM;;;; 001A;;Cc;0;BN;;;;;N;SUBSTITUTE;;;; 001B;;Cc;0;BN;;;;;N;ESCAPE;;;; 001C;;Cc;0;B;;;;;N;FILE SEPARATOR;;;; 001D;;Cc;0;B;;;;;N;GROUP SEPARATOR;;;; 001E;;Cc;0;B;;;;;N;RECORD SEPARATOR;;;; 001F;;Cc;0;S;;;;;N;UNIT SEPARATOR;;;; 0020;SPACE;Zs;0;WS;;;;;N;;;;; 0021;EXCLAMATION MARK;Po;0;ON;;;;;N;;;;; 0022;QUOTATION MARK;Po;0;ON;;;;;N;;;;; 0023;NUMBER SIGN;Po;0;ET;;;;;N;;;;; 0024;DOLLAR SIGN;Sc;0;ET;;;;;N;;;;; 0025;PERCENT SIGN;Po;0;ET;;;;;N;;;;; 0026;AMPERSAND;Po;0;ON;;;;;N;;;;; 0027;APOSTROPHE;Po;0;ON;;;;;N;APOSTROPHE-QUOTE;;;; 0028;LEFT PARENTHESIS;Ps;0;ON;;;;;Y;OPENING PARENTHESIS;;;; 0029;RIGHT PARENTHESIS;Pe;0;ON;;;;;Y;CLOSING PARENTHESIS;;;; 002A;ASTERISK;Po;0;ON;;;;;N;;;;; 002B;PLUS SIGN;Sm;0;ET;;;;;N;;;;; 002C;COMMA;Po;0;CS;;;;;N;;;;; 002D;HYPHEN-MINUS;Pd;0;ET;;;;;N;;;;; 002E;FULL STOP;Po;0;CS;;;;;N;PERIOD;;;; 002F;SOLIDUS;Po;0;ES;;;;;N;SLASH;;;; 0030;DIGIT ZERO;Nd;0;EN;;0;0;0;N;;;;; 0031;DIGIT ONE;Nd;0;EN;;1;1;1;N;;;;; 0032;DIGIT TWO;Nd;0;EN;;2;2;2;N;;;;; 0033;DIGIT THREE;Nd;0;EN;;3;3;3;N;;;;; 0034;DIGIT FOUR;Nd;0;EN;;4;4;4;N;;;;; 0035;DIGIT FIVE;Nd;0;EN;;5;5;5;N;;;;; 0036;DIGIT SIX;Nd;0;EN;;6;6;6;N;;;;; 0037;DIGIT SEVEN;Nd;0;EN;;7;7;7;N;;;;; 0038;DIGIT EIGHT;Nd;0;EN;;8;8;8;N;;;;; 0039;DIGIT NINE;Nd;0;EN;;9;9;9;N;;;;; 003A;COLON;Po;0;CS;;;;;N;;;;; 003B;SEMICOLON;Po;0;ON;;;;;N;;;;; 003C;LESS-THAN SIGN;Sm;0;ON;;;;;Y;;;;; 003D;EQUALS SIGN;Sm;0;ON;;;;;N;;;;; 003E;GREATER-THAN SIGN;Sm;0;ON;;;;;Y;;;;; 003F;QUESTION MARK;Po;0;ON;;;;;N;;;;; 0040;COMMERCIAL AT;Po;0;ON;;;;;N;;;;; 0041;LATIN CAPITAL LETTER A;Lu;0;L;;;;;N;;;;0061; 0042;LATIN CAPITAL LETTER B;Lu;0;L;;;;;N;;;;0062; 0043;LATIN CAPITAL LETTER C;Lu;0;L;;;;;N;;;;0063; 0044;LATIN CAPITAL LETTER D;Lu;0;L;;;;;N;;;;0064; 0045;LATIN CAPITAL LETTER E;Lu;0;L;;;;;N;;;;0065; 0046;LATIN CAPITAL LETTER F;Lu;0;L;;;;;N;;;;0066; 0047;LATIN CAPITAL LETTER G;Lu;0;L;;;;;N;;;;0067; 0048;LATIN CAPITAL LETTER H;Lu;0;L;;;;;N;;;;0068; 0049;LATIN CAPITAL LETTER I;Lu;0;L;;;;;N;;;;0069; 004A;LATIN CAPITAL LETTER J;Lu;0;L;;;;;N;;;;006A; 004B;LATIN CAPITAL LETTER K;Lu;0;L;;;;;N;;;;006B; 004C;LATIN CAPITAL LETTER L;Lu;0;L;;;;;N;;;;006C; 004D;LATIN CAPITAL LETTER M;Lu;0;L;;;;;N;;;;006D; 004E;LATIN CAPITAL LETTER N;Lu;0;L;;;;;N;;;;006E; 004F;LATIN CAPITAL LETTER O;Lu;0;L;;;;;N;;;;006F; 0050;LATIN CAPITAL LETTER P;Lu;0;L;;;;;N;;;;0070; 0051;LATIN CAPITAL LETTER Q;Lu;0;L;;;;;N;;;;0071; 0052;LATIN CAPITAL LETTER R;Lu;0;L;;;;;N;;;;0072; 0053;LATIN CAPITAL LETTER S;Lu;0;L;;;;;N;;;;0073; 0054;LATIN CAPITAL LETTER T;Lu;0;L;;;;;N;;;;0074; 0055;LATIN CAPITAL LETTER U;Lu;0;L;;;;;N;;;;0075; 0056;LATIN CAPITAL LETTER V;Lu;0;L;;;;;N;;;;0076; 0057;LATIN CAPITAL LETTER W;Lu;0;L;;;;;N;;;;0077; 0058;LATIN CAPITAL LETTER X;Lu;0;L;;;;;N;;;;0078; 0059;LATIN CAPITAL LETTER Y;Lu;0;L;;;;;N;;;;0079; 005A;LATIN CAPITAL LETTER Z;Lu;0;L;;;;;N;;;;007A; 005B;LEFT SQUARE BRACKET;Ps;0;ON;;;;;Y;OPENING SQUARE BRACKET;;;; 005C;REVERSE SOLIDUS;Po;0;ON;;;;;N;BACKSLASH;;;; 005D;RIGHT SQUARE BRACKET;Pe;0;ON;;;;;Y;CLOSING SQUARE BRACKET;;;; 005E;CIRCUMFLEX ACCENT;Sk;0;ON;;;;;N;SPACING CIRCUMFLEX;;;; 005F;LOW LINE;Pc;0;ON;;;;;N;SPACING UNDERSCORE;;;; 0060;GRAVE ACCENT;Sk;0;ON;;;;;N;SPACING GRAVE;;;; 0061;LATIN SMALL LETTER A;Ll;0;L;;;;;N;;;0041;;0041 0062;LATIN SMALL LETTER B;Ll;0;L;;;;;N;;;0042;;0042 0063;LATIN SMALL LETTER C;Ll;0;L;;;;;N;;;0043;;0043 0064;LATIN SMALL LETTER D;Ll;0;L;;;;;N;;;0044;;0044 0065;LATIN SMALL LETTER E;Ll;0;L;;;;;N;;;0045;;0045 0066;LATIN SMALL LETTER F;Ll;0;L;;;;;N;;;0046;;0046 0067;LATIN SMALL LETTER G;Ll;0;L;;;;;N;;;0047;;0047 0068;LATIN SMALL LETTER H;Ll;0;L;;;;;N;;;0048;;0048 0069;LATIN SMALL LETTER I;Ll;0;L;;;;;N;;;0049;;0049 006A;LATIN SMALL LETTER J;Ll;0;L;;;;;N;;;004A;;004A 006B;LATIN SMALL LETTER K;Ll;0;L;;;;;N;;;004B;;004B 006C;LATIN SMALL LETTER L;Ll;0;L;;;;;N;;;004C;;004C 006D;LATIN SMALL LETTER M;Ll;0;L;;;;;N;;;004D;;004D 006E;LATIN SMALL LETTER N;Ll;0;L;;;;;N;;;004E;;004E 006F;LATIN SMALL LETTER O;Ll;0;L;;;;;N;;;004F;;004F 0070;LATIN SMALL LETTER P;Ll;0;L;;;;;N;;;0050;;0050 0071;LATIN SMALL LETTER Q;Ll;0;L;;;;;N;;;0051;;0051 0072;LATIN SMALL LETTER R;Ll;0;L;;;;;N;;;0052;;0052 0073;LATIN SMALL LETTER S;Ll;0;L;;;;;N;;;0053;;0053 0074;LATIN SMALL LETTER T;Ll;0;L;;;;;N;;;0054;;0054 0075;LATIN SMALL LETTER U;Ll;0;L;;;;;N;;;0055;;0055 0076;LATIN SMALL LETTER V;Ll;0;L;;;;;N;;;0056;;0056 0077;LATIN SMALL LETTER W;Ll;0;L;;;;;N;;;0057;;0057 0078;LATIN SMALL LETTER X;Ll;0;L;;;;;N;;;0058;;0058 0079;LATIN SMALL LETTER Y;Ll;0;L;;;;;N;;;0059;;0059 007A;LATIN SMALL LETTER Z;Ll;0;L;;;;;N;;;005A;;005A 007B;LEFT CURLY BRACKET;Ps;0;ON;;;;;Y;OPENING CURLY BRACKET;;;; 007C;VERTICAL LINE;Sm;0;ON;;;;;N;VERTICAL BAR;;;; 007D;RIGHT CURLY BRACKET;Pe;0;ON;;;;;Y;CLOSING CURLY BRACKET;;;; 007E;TILDE;Sm;0;ON;;;;;N;;;;; 007F;;Cc;0;BN;;;;;N;DELETE;;;; 0080;;Cc;0;BN;;;;;N;;;;; 0081;;Cc;0;BN;;;;;N;;;;; 0082;;Cc;0;BN;;;;;N;BREAK PERMITTED HERE;;;; 0083;;Cc;0;BN;;;;;N;NO BREAK HERE;;;; 0084;;Cc;0;BN;;;;;N;;;;; 0085;;Cc;0;B;;;;;N;NEXT LINE;;;; 0086;;Cc;0;BN;;;;;N;START OF SELECTED AREA;;;; 0087;;Cc;0;BN;;;;;N;END OF SELECTED AREA;;;; 0088;;Cc;0;BN;;;;;N;CHARACTER TABULATION SET;;;; 0089;;Cc;0;BN;;;;;N;CHARACTER TABULATION WITH JUSTIFICATION;;;; 008A;;Cc;0;BN;;;;;N;LINE TABULATION SET;;;; 008B;;Cc;0;BN;;;;;N;PARTIAL LINE DOWN;;;; 008C;;Cc;0;BN;;;;;N;PARTIAL LINE UP;;;; 008D;;Cc;0;BN;;;;;N;REVERSE LINE FEED;;;; 008E;;Cc;0;BN;;;;;N;SINGLE SHIFT TWO;;;; 008F;;Cc;0;BN;;;;;N;SINGLE SHIFT THREE;;;; 0090;;Cc;0;BN;;;;;N;DEVICE CONTROL STRING;;;; 0091;;Cc;0;BN;;;;;N;PRIVATE USE ONE;;;; 0092;;Cc;0;BN;;;;;N;PRIVATE USE TWO;;;; 0093;;Cc;0;BN;;;;;N;SET TRANSMIT STATE;;;; 0094;;Cc;0;BN;;;;;N;CANCEL CHARACTER;;;; 0095;;Cc;0;BN;;;;;N;MESSAGE WAITING;;;; 0096;;Cc;0;BN;;;;;N;START OF GUARDED AREA;;;; 0097;;Cc;0;BN;;;;;N;END OF GUARDED AREA;;;; 0098;;Cc;0;BN;;;;;N;START OF STRING;;;; 0099;;Cc;0;BN;;;;;N;;;;; 009A;;Cc;0;BN;;;;;N;SINGLE CHARACTER INTRODUCER;;;; 009B;;Cc;0;BN;;;;;N;CONTROL SEQUENCE INTRODUCER;;;; 009C;;Cc;0;BN;;;;;N;STRING TERMINATOR;;;; 009D;;Cc;0;BN;;;;;N;OPERATING SYSTEM COMMAND;;;; 009E;;Cc;0;BN;;;;;N;PRIVACY MESSAGE;;;; 009F;;Cc;0;BN;;;;;N;APPLICATION PROGRAM COMMAND;;;; 00A0;NO-BREAK SPACE;Zs;0;CS; 0020;;;;N;NON-BREAKING SPACE;;;; 00A1;INVERTED EXCLAMATION MARK;Po;0;ON;;;;;N;;;;; 00A2;CENT SIGN;Sc;0;ET;;;;;N;;;;; 00A3;POUND SIGN;Sc;0;ET;;;;;N;;;;; 00A4;CURRENCY SIGN;Sc;0;ET;;;;;N;;;;; 00A5;YEN SIGN;Sc;0;ET;;;;;N;;;;; 00A6;BROKEN BAR;So;0;ON;;;;;N;BROKEN VERTICAL BAR;;;; 00A7;SECTION SIGN;So;0;ON;;;;;N;;;;; 00A8;DIAERESIS;Sk;0;ON; 0020 0308;;;;N;SPACING DIAERESIS;;;; 00A9;COPYRIGHT SIGN;So;0;ON;;;;;N;;;;; 00AA;FEMININE ORDINAL INDICATOR;Ll;0;L; 0061;;;;N;;;;; 00AB;LEFT-POINTING DOUBLE ANGLE QUOTATION MARK;Pi;0;ON;;;;;Y;LEFT POINTING GUILLEMET;*;;; 00AC;NOT SIGN;Sm;0;ON;;;;;N;;;;; 00AD;SOFT HYPHEN;Pd;0;ON;;;;;N;;;;; 00AE;REGISTERED SIGN;So;0;ON;;;;;N;REGISTERED TRADE MARK SIGN;;;; 00AF;MACRON;Sk;0;ON; 0020 0304;;;;N;SPACING MACRON;;;; 00B0;DEGREE SIGN;So;0;ET;;;;;N;;;;; 00B1;PLUS-MINUS SIGN;Sm;0;ET;;;;;N;PLUS-OR-MINUS SIGN;;;; 00B2;SUPERSCRIPT TWO;No;0;EN; 0032;2;2;2;N;SUPERSCRIPT DIGIT TWO;;;; 00B3;SUPERSCRIPT THREE;No;0;EN; 0033;3;3;3;N;SUPERSCRIPT DIGIT THREE;;;; 00B4;ACUTE ACCENT;Sk;0;ON; 0020 0301;;;;N;SPACING ACUTE;;;; 00B5;MICRO SIGN;Ll;0;L; 03BC;;;;N;;;039C;;039C 00B6;PILCROW SIGN;So;0;ON;;;;;N;PARAGRAPH SIGN;;;; 00B7;MIDDLE DOT;Po;0;ON;;;;;N;;;;; 00B8;CEDILLA;Sk;0;ON; 0020 0327;;;;N;SPACING CEDILLA;;;; 00B9;SUPERSCRIPT ONE;No;0;EN; 0031;1;1;1;N;SUPERSCRIPT DIGIT ONE;;;; 00BA;MASCULINE ORDINAL INDICATOR;Ll;0;L; 006F;;;;N;;;;; 00BB;RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK;Pf;0;ON;;;;;Y;RIGHT POINTING GUILLEMET;*;;; 00BC;VULGAR FRACTION ONE QUARTER;No;0;ON; 0031 2044 0034;;;1/4;N;FRACTION ONE QUARTER;;;; 00BD;VULGAR FRACTION ONE HALF;No;0;ON; 0031 2044 0032;;;1/2;N;FRACTION ONE HALF;;;; 00BE;VULGAR FRACTION THREE QUARTERS;No;0;ON; 0033 2044 0034;;;3/4;N;FRACTION THREE QUARTERS;;;; 00BF;INVERTED QUESTION MARK;Po;0;ON;;;;;N;;;;; 00C0;LATIN CAPITAL LETTER A WITH GRAVE;Lu;0;L;0041 0300;;;;N;LATIN CAPITAL LETTER A GRAVE;;;00E0; 00C1;LATIN CAPITAL LETTER A WITH ACUTE;Lu;0;L;0041 0301;;;;N;LATIN CAPITAL LETTER A ACUTE;;;00E1; 00C2;LATIN CAPITAL LETTER A WITH CIRCUMFLEX;Lu;0;L;0041 0302;;;;N;LATIN CAPITAL LETTER A CIRCUMFLEX;;;00E2; 00C3;LATIN CAPITAL LETTER A WITH TILDE;Lu;0;L;0041 0303;;;;N;LATIN CAPITAL LETTER A TILDE;;;00E3; 00C4;LATIN CAPITAL LETTER A WITH DIAERESIS;Lu;0;L;0041 0308;;;;N;LATIN CAPITAL LETTER A DIAERESIS;;;00E4; 00C5;LATIN CAPITAL LETTER A WITH RING ABOVE;Lu;0;L;0041 030A;;;;N;LATIN CAPITAL LETTER A RING;;;00E5; 00C6;LATIN CAPITAL LETTER AE;Lu;0;L;;;;;N;LATIN CAPITAL LETTER A E;ash *;;00E6; 00C7;LATIN CAPITAL LETTER C WITH CEDILLA;Lu;0;L;0043 0327;;;;N;LATIN CAPITAL LETTER C CEDILLA;;;00E7; 00C8;LATIN CAPITAL LETTER E WITH GRAVE;Lu;0;L;0045 0300;;;;N;LATIN CAPITAL LETTER E GRAVE;;;00E8; 00C9;LATIN CAPITAL LETTER E WITH ACUTE;Lu;0;L;0045 0301;;;;N;LATIN CAPITAL LETTER E ACUTE;;;00E9; 00CA;LATIN CAPITAL LETTER E WITH CIRCUMFLEX;Lu;0;L;0045 0302;;;;N;LATIN CAPITAL LETTER E CIRCUMFLEX;;;00EA; 00CB;LATIN CAPITAL LETTER E WITH DIAERESIS;Lu;0;L;0045 0308;;;;N;LATIN CAPITAL LETTER E DIAERESIS;;;00EB; 00CC;LATIN CAPITAL LETTER I WITH GRAVE;Lu;0;L;0049 0300;;;;N;LATIN CAPITAL LETTER I GRAVE;;;00EC; 00CD;LATIN CAPITAL LETTER I WITH ACUTE;Lu;0;L;0049 0301;;;;N;LATIN CAPITAL LETTER I ACUTE;;;00ED; 00CE;LATIN CAPITAL LETTER I WITH CIRCUMFLEX;Lu;0;L;0049 0302;;;;N;LATIN CAPITAL LETTER I CIRCUMFLEX;;;00EE; 00CF;LATIN CAPITAL LETTER I WITH DIAERESIS;Lu;0;L;0049 0308;;;;N;LATIN CAPITAL LETTER I DIAERESIS;;;00EF; 00D0;LATIN CAPITAL LETTER ETH;Lu;0;L;;;;;N;;Icelandic;;00F0; 00D1;LATIN CAPITAL LETTER N WITH TILDE;Lu;0;L;004E 0303;;;;N;LATIN CAPITAL LETTER N TILDE;;;00F1; 00D2;LATIN CAPITAL LETTER O WITH GRAVE;Lu;0;L;004F 0300;;;;N;LATIN CAPITAL LETTER O GRAVE;;;00F2; 00D3;LATIN CAPITAL LETTER O WITH ACUTE;Lu;0;L;004F 0301;;;;N;LATIN CAPITAL LETTER O ACUTE;;;00F3; 00D4;LATIN CAPITAL LETTER O WITH CIRCUMFLEX;Lu;0;L;004F 0302;;;;N;LATIN CAPITAL LETTER O CIRCUMFLEX;;;00F4; 00D5;LATIN CAPITAL LETTER O WITH TILDE;Lu;0;L;004F 0303;;;;N;LATIN CAPITAL LETTER O TILDE;;;00F5; 00D6;LATIN CAPITAL LETTER O WITH DIAERESIS;Lu;0;L;004F 0308;;;;N;LATIN CAPITAL LETTER O DIAERESIS;;;00F6; 00D7;MULTIPLICATION SIGN;Sm;0;ON;;;;;N;;;;; 00D8;LATIN CAPITAL LETTER O WITH STROKE;Lu;0;L;;;;;N;LATIN CAPITAL LETTER O SLASH;;;00F8; 00D9;LATIN CAPITAL LETTER U WITH GRAVE;Lu;0;L;0055 0300;;;;N;LATIN CAPITAL LETTER U GRAVE;;;00F9; 00DA;LATIN CAPITAL LETTER U WITH ACUTE;Lu;0;L;0055 0301;;;;N;LATIN CAPITAL LETTER U ACUTE;;;00FA; 00DB;LATIN CAPITAL LETTER U WITH CIRCUMFLEX;Lu;0;L;0055 0302;;;;N;LATIN CAPITAL LETTER U CIRCUMFLEX;;;00FB; 00DC;LATIN CAPITAL LETTER U WITH DIAERESIS;Lu;0;L;0055 0308;;;;N;LATIN CAPITAL LETTER U DIAERESIS;;;00FC; 00DD;LATIN CAPITAL LETTER Y WITH ACUTE;Lu;0;L;0059 0301;;;;N;LATIN CAPITAL LETTER Y ACUTE;;;00FD; 00DE;LATIN CAPITAL LETTER THORN;Lu;0;L;;;;;N;;Icelandic;;00FE; 00DF;LATIN SMALL LETTER SHARP S;Ll;0;L;;;;;N;;German;;; 00E0;LATIN SMALL LETTER A WITH GRAVE;Ll;0;L;0061 0300;;;;N;LATIN SMALL LETTER A GRAVE;;00C0;;00C0 00E1;LATIN SMALL LETTER A WITH ACUTE;Ll;0;L;0061 0301;;;;N;LATIN SMALL LETTER A ACUTE;;00C1;;00C1 00E2;LATIN SMALL LETTER A WITH CIRCUMFLEX;Ll;0;L;0061 0302;;;;N;LATIN SMALL LETTER A CIRCUMFLEX;;00C2;;00C2 00E3;LATIN SMALL LETTER A WITH TILDE;Ll;0;L;0061 0303;;;;N;LATIN SMALL LETTER A TILDE;;00C3;;00C3 00E4;LATIN SMALL LETTER A WITH DIAERESIS;Ll;0;L;0061 0308;;;;N;LATIN SMALL LETTER A DIAERESIS;;00C4;;00C4 00E5;LATIN SMALL LETTER A WITH RING ABOVE;Ll;0;L;0061 030A;;;;N;LATIN SMALL LETTER A RING;;00C5;;00C5 00E6;LATIN SMALL LETTER AE;Ll;0;L;;;;;N;LATIN SMALL LETTER A E;ash *;00C6;;00C6 00E7;LATIN SMALL LETTER C WITH CEDILLA;Ll;0;L;0063 0327;;;;N;LATIN SMALL LETTER C CEDILLA;;00C7;;00C7 00E8;LATIN SMALL LETTER E WITH GRAVE;Ll;0;L;0065 0300;;;;N;LATIN SMALL LETTER E GRAVE;;00C8;;00C8 00E9;LATIN SMALL LETTER E WITH ACUTE;Ll;0;L;0065 0301;;;;N;LATIN SMALL LETTER E ACUTE;;00C9;;00C9 00EA;LATIN SMALL LETTER E WITH CIRCUMFLEX;Ll;0;L;0065 0302;;;;N;LATIN SMALL LETTER E CIRCUMFLEX;;00CA;;00CA 00EB;LATIN SMALL LETTER E WITH DIAERESIS;Ll;0;L;0065 0308;;;;N;LATIN SMALL LETTER E DIAERESIS;;00CB;;00CB 00EC;LATIN SMALL LETTER I WITH GRAVE;Ll;0;L;0069 0300;;;;N;LATIN SMALL LETTER I GRAVE;;00CC;;00CC 00ED;LATIN SMALL LETTER I WITH ACUTE;Ll;0;L;0069 0301;;;;N;LATIN SMALL LETTER I ACUTE;;00CD;;00CD 00EE;LATIN SMALL LETTER I WITH CIRCUMFLEX;Ll;0;L;0069 0302;;;;N;LATIN SMALL LETTER I CIRCUMFLEX;;00CE;;00CE 00EF;LATIN SMALL LETTER I WITH DIAERESIS;Ll;0;L;0069 0308;;;;N;LATIN SMALL LETTER I DIAERESIS;;00CF;;00CF 00F0;LATIN SMALL LETTER ETH;Ll;0;L;;;;;N;;Icelandic;00D0;;00D0 00F1;LATIN SMALL LETTER N WITH TILDE;Ll;0;L;006E 0303;;;;N;LATIN SMALL LETTER N TILDE;;00D1;;00D1 00F2;LATIN SMALL LETTER O WITH GRAVE;Ll;0;L;006F 0300;;;;N;LATIN SMALL LETTER O GRAVE;;00D2;;00D2 00F3;LATIN SMALL LETTER O WITH ACUTE;Ll;0;L;006F 0301;;;;N;LATIN SMALL LETTER O ACUTE;;00D3;;00D3 00F4;LATIN SMALL LETTER O WITH CIRCUMFLEX;Ll;0;L;006F 0302;;;;N;LATIN SMALL LETTER O CIRCUMFLEX;;00D4;;00D4 00F5;LATIN SMALL LETTER O WITH TILDE;Ll;0;L;006F 0303;;;;N;LATIN SMALL LETTER O TILDE;;00D5;;00D5 00F6;LATIN SMALL LETTER O WITH DIAERESIS;Ll;0;L;006F 0308;;;;N;LATIN SMALL LETTER O DIAERESIS;;00D6;;00D6 00F7;DIVISION SIGN;Sm;0;ON;;;;;N;;;;; 00F8;LATIN SMALL LETTER O WITH STROKE;Ll;0;L;;;;;N;LATIN SMALL LETTER O SLASH;;00D8;;00D8 00F9;LATIN SMALL LETTER U WITH GRAVE;Ll;0;L;0075 0300;;;;N;LATIN SMALL LETTER U GRAVE;;00D9;;00D9 00FA;LATIN SMALL LETTER U WITH ACUTE;Ll;0;L;0075 0301;;;;N;LATIN SMALL LETTER U ACUTE;;00DA;;00DA 00FB;LATIN SMALL LETTER U WITH CIRCUMFLEX;Ll;0;L;0075 0302;;;;N;LATIN SMALL LETTER U CIRCUMFLEX;;00DB;;00DB 00FC;LATIN SMALL LETTER U WITH DIAERESIS;Ll;0;L;0075 0308;;;;N;LATIN SMALL LETTER U DIAERESIS;;00DC;;00DC 00FD;LATIN SMALL LETTER Y WITH ACUTE;Ll;0;L;0079 0301;;;;N;LATIN SMALL LETTER Y ACUTE;;00DD;;00DD 00FE;LATIN SMALL LETTER THORN;Ll;0;L;;;;;N;;Icelandic;00DE;;00DE 00FF;LATIN SMALL LETTER Y WITH DIAERESIS;Ll;0;L;0079 0308;;;;N;LATIN SMALL LETTER Y DIAERESIS;;0178;;0178 0100;LATIN CAPITAL LETTER A WITH MACRON;Lu;0;L;0041 0304;;;;N;LATIN CAPITAL LETTER A MACRON;;;0101; 0101;LATIN SMALL LETTER A WITH MACRON;Ll;0;L;0061 0304;;;;N;LATIN SMALL LETTER A MACRON;;0100;;0100 0102;LATIN CAPITAL LETTER A WITH BREVE;Lu;0;L;0041 0306;;;;N;LATIN CAPITAL LETTER A BREVE;;;0103; 0103;LATIN SMALL LETTER A WITH BREVE;Ll;0;L;0061 0306;;;;N;LATIN SMALL LETTER A BREVE;;0102;;0102 0104;LATIN CAPITAL LETTER A WITH OGONEK;Lu;0;L;0041 0328;;;;N;LATIN CAPITAL LETTER A OGONEK;;;0105; 0105;LATIN SMALL LETTER A WITH OGONEK;Ll;0;L;0061 0328;;;;N;LATIN SMALL LETTER A OGONEK;;0104;;0104 0106;LATIN CAPITAL LETTER C WITH ACUTE;Lu;0;L;0043 0301;;;;N;LATIN CAPITAL LETTER C ACUTE;;;0107; 0107;LATIN SMALL LETTER C WITH ACUTE;Ll;0;L;0063 0301;;;;N;LATIN SMALL LETTER C ACUTE;;0106;;0106 0108;LATIN CAPITAL LETTER C WITH CIRCUMFLEX;Lu;0;L;0043 0302;;;;N;LATIN CAPITAL LETTER C CIRCUMFLEX;;;0109; 0109;LATIN SMALL LETTER C WITH CIRCUMFLEX;Ll;0;L;0063 0302;;;;N;LATIN SMALL LETTER C CIRCUMFLEX;;0108;;0108 010A;LATIN CAPITAL LETTER C WITH DOT ABOVE;Lu;0;L;0043 0307;;;;N;LATIN CAPITAL LETTER C DOT;;;010B; 010B;LATIN SMALL LETTER C WITH DOT ABOVE;Ll;0;L;0063 0307;;;;N;LATIN SMALL LETTER C DOT;;010A;;010A 010C;LATIN CAPITAL LETTER C WITH CARON;Lu;0;L;0043 030C;;;;N;LATIN CAPITAL LETTER C HACEK;;;010D; 010D;LATIN SMALL LETTER C WITH CARON;Ll;0;L;0063 030C;;;;N;LATIN SMALL LETTER C HACEK;;010C;;010C 010E;LATIN CAPITAL LETTER D WITH CARON;Lu;0;L;0044 030C;;;;N;LATIN CAPITAL LETTER D HACEK;;;010F; 010F;LATIN SMALL LETTER D WITH CARON;Ll;0;L;0064 030C;;;;N;LATIN SMALL LETTER D HACEK;;010E;;010E 0110;LATIN CAPITAL LETTER D WITH STROKE;Lu;0;L;;;;;N;LATIN CAPITAL LETTER D BAR;;;0111; 0111;LATIN SMALL LETTER D WITH STROKE;Ll;0;L;;;;;N;LATIN SMALL LETTER D BAR;;0110;;0110 0112;LATIN CAPITAL LETTER E WITH MACRON;Lu;0;L;0045 0304;;;;N;LATIN CAPITAL LETTER E MACRON;;;0113; 0113;LATIN SMALL LETTER E WITH MACRON;Ll;0;L;0065 0304;;;;N;LATIN SMALL LETTER E MACRON;;0112;;0112 0114;LATIN CAPITAL LETTER E WITH BREVE;Lu;0;L;0045 0306;;;;N;LATIN CAPITAL LETTER E BREVE;;;0115; 0115;LATIN SMALL LETTER E WITH BREVE;Ll;0;L;0065 0306;;;;N;LATIN SMALL LETTER E BREVE;;0114;;0114 0116;LATIN CAPITAL LETTER E WITH DOT ABOVE;Lu;0;L;0045 0307;;;;N;LATIN CAPITAL LETTER E DOT;;;0117; 0117;LATIN SMALL LETTER E WITH DOT ABOVE;Ll;0;L;0065 0307;;;;N;LATIN SMALL LETTER E DOT;;0116;;0116 0118;LATIN CAPITAL LETTER E WITH OGONEK;Lu;0;L;0045 0328;;;;N;LATIN CAPITAL LETTER E OGONEK;;;0119; 0119;LATIN SMALL LETTER E WITH OGONEK;Ll;0;L;0065 0328;;;;N;LATIN SMALL LETTER E OGONEK;;0118;;0118 011A;LATIN CAPITAL LETTER E WITH CARON;Lu;0;L;0045 030C;;;;N;LATIN CAPITAL LETTER E HACEK;;;011B; 011B;LATIN SMALL LETTER E WITH CARON;Ll;0;L;0065 030C;;;;N;LATIN SMALL LETTER E HACEK;;011A;;011A 011C;LATIN CAPITAL LETTER G WITH CIRCUMFLEX;Lu;0;L;0047 0302;;;;N;LATIN CAPITAL LETTER G CIRCUMFLEX;;;011D; 011D;LATIN SMALL LETTER G WITH CIRCUMFLEX;Ll;0;L;0067 0302;;;;N;LATIN SMALL LETTER G CIRCUMFLEX;;011C;;011C 011E;LATIN CAPITAL LETTER G WITH BREVE;Lu;0;L;0047 0306;;;;N;LATIN CAPITAL LETTER G BREVE;;;011F; 011F;LATIN SMALL LETTER G WITH BREVE;Ll;0;L;0067 0306;;;;N;LATIN SMALL LETTER G BREVE;;011E;;011E 0120;LATIN CAPITAL LETTER G WITH DOT ABOVE;Lu;0;L;0047 0307;;;;N;LATIN CAPITAL LETTER G DOT;;;0121; 0121;LATIN SMALL LETTER G WITH DOT ABOVE;Ll;0;L;0067 0307;;;;N;LATIN SMALL LETTER G DOT;;0120;;0120 0122;LATIN CAPITAL LETTER G WITH CEDILLA;Lu;0;L;0047 0327;;;;N;LATIN CAPITAL LETTER G CEDILLA;;;0123; 0123;LATIN SMALL LETTER G WITH CEDILLA;Ll;0;L;0067 0327;;;;N;LATIN SMALL LETTER G CEDILLA;;0122;;0122 0124;LATIN CAPITAL LETTER H WITH CIRCUMFLEX;Lu;0;L;0048 0302;;;;N;LATIN CAPITAL LETTER H CIRCUMFLEX;;;0125; 0125;LATIN SMALL LETTER H WITH CIRCUMFLEX;Ll;0;L;0068 0302;;;;N;LATIN SMALL LETTER H CIRCUMFLEX;;0124;;0124 0126;LATIN CAPITAL LETTER H WITH STROKE;Lu;0;L;;;;;N;LATIN CAPITAL LETTER H BAR;;;0127; 0127;LATIN SMALL LETTER H WITH STROKE;Ll;0;L;;;;;N;LATIN SMALL LETTER H BAR;;0126;;0126 0128;LATIN CAPITAL LETTER I WITH TILDE;Lu;0;L;0049 0303;;;;N;LATIN CAPITAL LETTER I TILDE;;;0129; 0129;LATIN SMALL LETTER I WITH TILDE;Ll;0;L;0069 0303;;;;N;LATIN SMALL LETTER I TILDE;;0128;;0128 012A;LATIN CAPITAL LETTER I WITH MACRON;Lu;0;L;0049 0304;;;;N;LATIN CAPITAL LETTER I MACRON;;;012B; 012B;LATIN SMALL LETTER I WITH MACRON;Ll;0;L;0069 0304;;;;N;LATIN SMALL LETTER I MACRON;;012A;;012A 012C;LATIN CAPITAL LETTER I WITH BREVE;Lu;0;L;0049 0306;;;;N;LATIN CAPITAL LETTER I BREVE;;;012D; 012D;LATIN SMALL LETTER I WITH BREVE;Ll;0;L;0069 0306;;;;N;LATIN SMALL LETTER I BREVE;;012C;;012C 012E;LATIN CAPITAL LETTER I WITH OGONEK;Lu;0;L;0049 0328;;;;N;LATIN CAPITAL LETTER I OGONEK;;;012F; 012F;LATIN SMALL LETTER I WITH OGONEK;Ll;0;L;0069 0328;;;;N;LATIN SMALL LETTER I OGONEK;;012E;;012E 0130;LATIN CAPITAL LETTER I WITH DOT ABOVE;Lu;0;L;0049 0307;;;;N;LATIN CAPITAL LETTER I DOT;;;0069; 0131;LATIN SMALL LETTER DOTLESS I;Ll;0;L;;;;;N;;;0049;;0049 0132;LATIN CAPITAL LIGATURE IJ;Lu;0;L; 0049 004A;;;;N;LATIN CAPITAL LETTER I J;;;0133; 0133;LATIN SMALL LIGATURE IJ;Ll;0;L; 0069 006A;;;;N;LATIN SMALL LETTER I J;;0132;;0132 0134;LATIN CAPITAL LETTER J WITH CIRCUMFLEX;Lu;0;L;004A 0302;;;;N;LATIN CAPITAL LETTER J CIRCUMFLEX;;;0135; 0135;LATIN SMALL LETTER J WITH CIRCUMFLEX;Ll;0;L;006A 0302;;;;N;LATIN SMALL LETTER J CIRCUMFLEX;;0134;;0134 0136;LATIN CAPITAL LETTER K WITH CEDILLA;Lu;0;L;004B 0327;;;;N;LATIN CAPITAL LETTER K CEDILLA;;;0137; 0137;LATIN SMALL LETTER K WITH CEDILLA;Ll;0;L;006B 0327;;;;N;LATIN SMALL LETTER K CEDILLA;;0136;;0136 0138;LATIN SMALL LETTER KRA;Ll;0;L;;;;;N;;Greenlandic;;; 0139;LATIN CAPITAL LETTER L WITH ACUTE;Lu;0;L;004C 0301;;;;N;LATIN CAPITAL LETTER L ACUTE;;;013A; 013A;LATIN SMALL LETTER L WITH ACUTE;Ll;0;L;006C 0301;;;;N;LATIN SMALL LETTER L ACUTE;;0139;;0139 013B;LATIN CAPITAL LETTER L WITH CEDILLA;Lu;0;L;004C 0327;;;;N;LATIN CAPITAL LETTER L CEDILLA;;;013C; 013C;LATIN SMALL LETTER L WITH CEDILLA;Ll;0;L;006C 0327;;;;N;LATIN SMALL LETTER L CEDILLA;;013B;;013B 013D;LATIN CAPITAL LETTER L WITH CARON;Lu;0;L;004C 030C;;;;N;LATIN CAPITAL LETTER L HACEK;;;013E; 013E;LATIN SMALL LETTER L WITH CARON;Ll;0;L;006C 030C;;;;N;LATIN SMALL LETTER L HACEK;;013D;;013D 013F;LATIN CAPITAL LETTER L WITH MIDDLE DOT;Lu;0;L; 004C 00B7;;;;N;;;;0140; 0140;LATIN SMALL LETTER L WITH MIDDLE DOT;Ll;0;L; 006C 00B7;;;;N;;;013F;;013F 0141;LATIN CAPITAL LETTER L WITH STROKE;Lu;0;L;;;;;N;LATIN CAPITAL LETTER L SLASH;;;0142; 0142;LATIN SMALL LETTER L WITH STROKE;Ll;0;L;;;;;N;LATIN SMALL LETTER L SLASH;;0141;;0141 0143;LATIN CAPITAL LETTER N WITH ACUTE;Lu;0;L;004E 0301;;;;N;LATIN CAPITAL LETTER N ACUTE;;;0144; 0144;LATIN SMALL LETTER N WITH ACUTE;Ll;0;L;006E 0301;;;;N;LATIN SMALL LETTER N ACUTE;;0143;;0143 0145;LATIN CAPITAL LETTER N WITH CEDILLA;Lu;0;L;004E 0327;;;;N;LATIN CAPITAL LETTER N CEDILLA;;;0146; 0146;LATIN SMALL LETTER N WITH CEDILLA;Ll;0;L;006E 0327;;;;N;LATIN SMALL LETTER N CEDILLA;;0145;;0145 0147;LATIN CAPITAL LETTER N WITH CARON;Lu;0;L;004E 030C;;;;N;LATIN CAPITAL LETTER N HACEK;;;0148; 0148;LATIN SMALL LETTER N WITH CARON;Ll;0;L;006E 030C;;;;N;LATIN SMALL LETTER N HACEK;;0147;;0147 0149;LATIN SMALL LETTER N PRECEDED BY APOSTROPHE;Ll;0;L; 02BC 006E;;;;N;LATIN SMALL LETTER APOSTROPHE N;;;; 014A;LATIN CAPITAL LETTER ENG;Lu;0;L;;;;;N;;Sami;;014B; 014B;LATIN SMALL LETTER ENG;Ll;0;L;;;;;N;;Sami;014A;;014A 014C;LATIN CAPITAL LETTER O WITH MACRON;Lu;0;L;004F 0304;;;;N;LATIN CAPITAL LETTER O MACRON;;;014D; 014D;LATIN SMALL LETTER O WITH MACRON;Ll;0;L;006F 0304;;;;N;LATIN SMALL LETTER O MACRON;;014C;;014C 014E;LATIN CAPITAL LETTER O WITH BREVE;Lu;0;L;004F 0306;;;;N;LATIN CAPITAL LETTER O BREVE;;;014F; 014F;LATIN SMALL LETTER O WITH BREVE;Ll;0;L;006F 0306;;;;N;LATIN SMALL LETTER O BREVE;;014E;;014E 0150;LATIN CAPITAL LETTER O WITH DOUBLE ACUTE;Lu;0;L;004F 030B;;;;N;LATIN CAPITAL LETTER O DOUBLE ACUTE;;;0151; 0151;LATIN SMALL LETTER O WITH DOUBLE ACUTE;Ll;0;L;006F 030B;;;;N;LATIN SMALL LETTER O DOUBLE ACUTE;;0150;;0150 0152;LATIN CAPITAL LIGATURE OE;Lu;0;L;;;;;N;LATIN CAPITAL LETTER O E;;;0153; 0153;LATIN SMALL LIGATURE OE;Ll;0;L;;;;;N;LATIN SMALL LETTER O E;;0152;;0152 0154;LATIN CAPITAL LETTER R WITH ACUTE;Lu;0;L;0052 0301;;;;N;LATIN CAPITAL LETTER R ACUTE;;;0155; 0155;LATIN SMALL LETTER R WITH ACUTE;Ll;0;L;0072 0301;;;;N;LATIN SMALL LETTER R ACUTE;;0154;;0154 0156;LATIN CAPITAL LETTER R WITH CEDILLA;Lu;0;L;0052 0327;;;;N;LATIN CAPITAL LETTER R CEDILLA;;;0157; 0157;LATIN SMALL LETTER R WITH CEDILLA;Ll;0;L;0072 0327;;;;N;LATIN SMALL LETTER R CEDILLA;;0156;;0156 0158;LATIN CAPITAL LETTER R WITH CARON;Lu;0;L;0052 030C;;;;N;LATIN CAPITAL LETTER R HACEK;;;0159; 0159;LATIN SMALL LETTER R WITH CARON;Ll;0;L;0072 030C;;;;N;LATIN SMALL LETTER R HACEK;;0158;;0158 015A;LATIN CAPITAL LETTER S WITH ACUTE;Lu;0;L;0053 0301;;;;N;LATIN CAPITAL LETTER S ACUTE;;;015B; 015B;LATIN SMALL LETTER S WITH ACUTE;Ll;0;L;0073 0301;;;;N;LATIN SMALL LETTER S ACUTE;;015A;;015A 015C;LATIN CAPITAL LETTER S WITH CIRCUMFLEX;Lu;0;L;0053 0302;;;;N;LATIN CAPITAL LETTER S CIRCUMFLEX;;;015D; 015D;LATIN SMALL LETTER S WITH CIRCUMFLEX;Ll;0;L;0073 0302;;;;N;LATIN SMALL LETTER S CIRCUMFLEX;;015C;;015C 015E;LATIN CAPITAL LETTER S WITH CEDILLA;Lu;0;L;0053 0327;;;;N;LATIN CAPITAL LETTER S CEDILLA;*;;015F; 015F;LATIN SMALL LETTER S WITH CEDILLA;Ll;0;L;0073 0327;;;;N;LATIN SMALL LETTER S CEDILLA;*;015E;;015E 0160;LATIN CAPITAL LETTER S WITH CARON;Lu;0;L;0053 030C;;;;N;LATIN CAPITAL LETTER S HACEK;;;0161; 0161;LATIN SMALL LETTER S WITH CARON;Ll;0;L;0073 030C;;;;N;LATIN SMALL LETTER S HACEK;;0160;;0160 0162;LATIN CAPITAL LETTER T WITH CEDILLA;Lu;0;L;0054 0327;;;;N;LATIN CAPITAL LETTER T CEDILLA;*;;0163; 0163;LATIN SMALL LETTER T WITH CEDILLA;Ll;0;L;0074 0327;;;;N;LATIN SMALL LETTER T CEDILLA;*;0162;;0162 0164;LATIN CAPITAL LETTER T WITH CARON;Lu;0;L;0054 030C;;;;N;LATIN CAPITAL LETTER T HACEK;;;0165; 0165;LATIN SMALL LETTER T WITH CARON;Ll;0;L;0074 030C;;;;N;LATIN SMALL LETTER T HACEK;;0164;;0164 0166;LATIN CAPITAL LETTER T WITH STROKE;Lu;0;L;;;;;N;LATIN CAPITAL LETTER T BAR;;;0167; 0167;LATIN SMALL LETTER T WITH STROKE;Ll;0;L;;;;;N;LATIN SMALL LETTER T BAR;;0166;;0166 0168;LATIN CAPITAL LETTER U WITH TILDE;Lu;0;L;0055 0303;;;;N;LATIN CAPITAL LETTER U TILDE;;;0169; 0169;LATIN SMALL LETTER U WITH TILDE;Ll;0;L;0075 0303;;;;N;LATIN SMALL LETTER U TILDE;;0168;;0168 016A;LATIN CAPITAL LETTER U WITH MACRON;Lu;0;L;0055 0304;;;;N;LATIN CAPITAL LETTER U MACRON;;;016B; 016B;LATIN SMALL LETTER U WITH MACRON;Ll;0;L;0075 0304;;;;N;LATIN SMALL LETTER U MACRON;;016A;;016A 016C;LATIN CAPITAL LETTER U WITH BREVE;Lu;0;L;0055 0306;;;;N;LATIN CAPITAL LETTER U BREVE;;;016D; 016D;LATIN SMALL LETTER U WITH BREVE;Ll;0;L;0075 0306;;;;N;LATIN SMALL LETTER U BREVE;;016C;;016C 016E;LATIN CAPITAL LETTER U WITH RING ABOVE;Lu;0;L;0055 030A;;;;N;LATIN CAPITAL LETTER U RING;;;016F; 016F;LATIN SMALL LETTER U WITH RING ABOVE;Ll;0;L;0075 030A;;;;N;LATIN SMALL LETTER U RING;;016E;;016E 0170;LATIN CAPITAL LETTER U WITH DOUBLE ACUTE;Lu;0;L;0055 030B;;;;N;LATIN CAPITAL LETTER U DOUBLE ACUTE;;;0171; 0171;LATIN SMALL LETTER U WITH DOUBLE ACUTE;Ll;0;L;0075 030B;;;;N;LATIN SMALL LETTER U DOUBLE ACUTE;;0170;;0170 0172;LATIN CAPITAL LETTER U WITH OGONEK;Lu;0;L;0055 0328;;;;N;LATIN CAPITAL LETTER U OGONEK;;;0173; 0173;LATIN SMALL LETTER U WITH OGONEK;Ll;0;L;0075 0328;;;;N;LATIN SMALL LETTER U OGONEK;;0172;;0172 0174;LATIN CAPITAL LETTER W WITH CIRCUMFLEX;Lu;0;L;0057 0302;;;;N;LATIN CAPITAL LETTER W CIRCUMFLEX;;;0175; 0175;LATIN SMALL LETTER W WITH CIRCUMFLEX;Ll;0;L;0077 0302;;;;N;LATIN SMALL LETTER W CIRCUMFLEX;;0174;;0174 0176;LATIN CAPITAL LETTER Y WITH CIRCUMFLEX;Lu;0;L;0059 0302;;;;N;LATIN CAPITAL LETTER Y CIRCUMFLEX;;;0177; 0177;LATIN SMALL LETTER Y WITH CIRCUMFLEX;Ll;0;L;0079 0302;;;;N;LATIN SMALL LETTER Y CIRCUMFLEX;;0176;;0176 0178;LATIN CAPITAL LETTER Y WITH DIAERESIS;Lu;0;L;0059 0308;;;;N;LATIN CAPITAL LETTER Y DIAERESIS;;;00FF; 0179;LATIN CAPITAL LETTER Z WITH ACUTE;Lu;0;L;005A 0301;;;;N;LATIN CAPITAL LETTER Z ACUTE;;;017A; 017A;LATIN SMALL LETTER Z WITH ACUTE;Ll;0;L;007A 0301;;;;N;LATIN SMALL LETTER Z ACUTE;;0179;;0179 017B;LATIN CAPITAL LETTER Z WITH DOT ABOVE;Lu;0;L;005A 0307;;;;N;LATIN CAPITAL LETTER Z DOT;;;017C; 017C;LATIN SMALL LETTER Z WITH DOT ABOVE;Ll;0;L;007A 0307;;;;N;LATIN SMALL LETTER Z DOT;;017B;;017B 017D;LATIN CAPITAL LETTER Z WITH CARON;Lu;0;L;005A 030C;;;;N;LATIN CAPITAL LETTER Z HACEK;;;017E; 017E;LATIN SMALL LETTER Z WITH CARON;Ll;0;L;007A 030C;;;;N;LATIN SMALL LETTER Z HACEK;;017D;;017D 017F;LATIN SMALL LETTER LONG S;Ll;0;L; 0073;;;;N;;;0053;;0053 0180;LATIN SMALL LETTER B WITH STROKE;Ll;0;L;;;;;N;LATIN SMALL LETTER B BAR;;;; 0181;LATIN CAPITAL LETTER B WITH HOOK;Lu;0;L;;;;;N;LATIN CAPITAL LETTER B HOOK;;;0253; 0182;LATIN CAPITAL LETTER B WITH TOPBAR;Lu;0;L;;;;;N;LATIN CAPITAL LETTER B TOPBAR;;;0183; 0183;LATIN SMALL LETTER B WITH TOPBAR;Ll;0;L;;;;;N;LATIN SMALL LETTER B TOPBAR;;0182;;0182 0184;LATIN CAPITAL LETTER TONE SIX;Lu;0;L;;;;;N;;;;0185; 0185;LATIN SMALL LETTER TONE SIX;Ll;0;L;;;;;N;;;0184;;0184 0186;LATIN CAPITAL LETTER OPEN O;Lu;0;L;;;;;N;;;;0254; 0187;LATIN CAPITAL LETTER C WITH HOOK;Lu;0;L;;;;;N;LATIN CAPITAL LETTER C HOOK;;;0188; 0188;LATIN SMALL LETTER C WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER C HOOK;;0187;;0187 0189;LATIN CAPITAL LETTER AFRICAN D;Lu;0;L;;;;;N;;*;;0256; 018A;LATIN CAPITAL LETTER D WITH HOOK;Lu;0;L;;;;;N;LATIN CAPITAL LETTER D HOOK;;;0257; 018B;LATIN CAPITAL LETTER D WITH TOPBAR;Lu;0;L;;;;;N;LATIN CAPITAL LETTER D TOPBAR;;;018C; 018C;LATIN SMALL LETTER D WITH TOPBAR;Ll;0;L;;;;;N;LATIN SMALL LETTER D TOPBAR;;018B;;018B 018D;LATIN SMALL LETTER TURNED DELTA;Ll;0;L;;;;;N;;;;; 018E;LATIN CAPITAL LETTER REVERSED E;Lu;0;L;;;;;N;LATIN CAPITAL LETTER TURNED E;;;01DD; 018F;LATIN CAPITAL LETTER SCHWA;Lu;0;L;;;;;N;;;;0259; 0190;LATIN CAPITAL LETTER OPEN E;Lu;0;L;;;;;N;LATIN CAPITAL LETTER EPSILON;;;025B; 0191;LATIN CAPITAL LETTER F WITH HOOK;Lu;0;L;;;;;N;LATIN CAPITAL LETTER F HOOK;;;0192; 0192;LATIN SMALL LETTER F WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER SCRIPT F;;0191;;0191 0193;LATIN CAPITAL LETTER G WITH HOOK;Lu;0;L;;;;;N;LATIN CAPITAL LETTER G HOOK;;;0260; 0194;LATIN CAPITAL LETTER GAMMA;Lu;0;L;;;;;N;;;;0263; 0195;LATIN SMALL LETTER HV;Ll;0;L;;;;;N;LATIN SMALL LETTER H V;hwair;01F6;;01F6 0196;LATIN CAPITAL LETTER IOTA;Lu;0;L;;;;;N;;;;0269; 0197;LATIN CAPITAL LETTER I WITH STROKE;Lu;0;L;;;;;N;LATIN CAPITAL LETTER BARRED I;;;0268; 0198;LATIN CAPITAL LETTER K WITH HOOK;Lu;0;L;;;;;N;LATIN CAPITAL LETTER K HOOK;;;0199; 0199;LATIN SMALL LETTER K WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER K HOOK;;0198;;0198 019A;LATIN SMALL LETTER L WITH BAR;Ll;0;L;;;;;N;LATIN SMALL LETTER BARRED L;;;; 019B;LATIN SMALL LETTER LAMBDA WITH STROKE;Ll;0;L;;;;;N;LATIN SMALL LETTER BARRED LAMBDA;;;; 019C;LATIN CAPITAL LETTER TURNED M;Lu;0;L;;;;;N;;;;026F; 019D;LATIN CAPITAL LETTER N WITH LEFT HOOK;Lu;0;L;;;;;N;LATIN CAPITAL LETTER N HOOK;;;0272; 019E;LATIN SMALL LETTER N WITH LONG RIGHT LEG;Ll;0;L;;;;;N;;;;; 019F;LATIN CAPITAL LETTER O WITH MIDDLE TILDE;Lu;0;L;;;;;N;LATIN CAPITAL LETTER BARRED O;*;;0275; 01A0;LATIN CAPITAL LETTER O WITH HORN;Lu;0;L;004F 031B;;;;N;LATIN CAPITAL LETTER O HORN;;;01A1; 01A1;LATIN SMALL LETTER O WITH HORN;Ll;0;L;006F 031B;;;;N;LATIN SMALL LETTER O HORN;;01A0;;01A0 01A2;LATIN CAPITAL LETTER OI;Lu;0;L;;;;;N;LATIN CAPITAL LETTER O I;gha;;01A3; 01A3;LATIN SMALL LETTER OI;Ll;0;L;;;;;N;LATIN SMALL LETTER O I;gha;01A2;;01A2 01A4;LATIN CAPITAL LETTER P WITH HOOK;Lu;0;L;;;;;N;LATIN CAPITAL LETTER P HOOK;;;01A5; 01A5;LATIN SMALL LETTER P WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER P HOOK;;01A4;;01A4 01A6;LATIN LETTER YR;Lu;0;L;;;;;N;LATIN LETTER Y R;*;;0280; 01A7;LATIN CAPITAL LETTER TONE TWO;Lu;0;L;;;;;N;;;;01A8; 01A8;LATIN SMALL LETTER TONE TWO;Ll;0;L;;;;;N;;;01A7;;01A7 01A9;LATIN CAPITAL LETTER ESH;Lu;0;L;;;;;N;;;;0283; 01AA;LATIN LETTER REVERSED ESH LOOP;Ll;0;L;;;;;N;;;;; 01AB;LATIN SMALL LETTER T WITH PALATAL HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER T PALATAL HOOK;;;; 01AC;LATIN CAPITAL LETTER T WITH HOOK;Lu;0;L;;;;;N;LATIN CAPITAL LETTER T HOOK;;;01AD; 01AD;LATIN SMALL LETTER T WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER T HOOK;;01AC;;01AC 01AE;LATIN CAPITAL LETTER T WITH RETROFLEX HOOK;Lu;0;L;;;;;N;LATIN CAPITAL LETTER T RETROFLEX HOOK;;;0288; 01AF;LATIN CAPITAL LETTER U WITH HORN;Lu;0;L;0055 031B;;;;N;LATIN CAPITAL LETTER U HORN;;;01B0; 01B0;LATIN SMALL LETTER U WITH HORN;Ll;0;L;0075 031B;;;;N;LATIN SMALL LETTER U HORN;;01AF;;01AF 01B1;LATIN CAPITAL LETTER UPSILON;Lu;0;L;;;;;N;;;;028A; 01B2;LATIN CAPITAL LETTER V WITH HOOK;Lu;0;L;;;;;N;LATIN CAPITAL LETTER SCRIPT V;;;028B; 01B3;LATIN CAPITAL LETTER Y WITH HOOK;Lu;0;L;;;;;N;LATIN CAPITAL LETTER Y HOOK;;;01B4; 01B4;LATIN SMALL LETTER Y WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER Y HOOK;;01B3;;01B3 01B5;LATIN CAPITAL LETTER Z WITH STROKE;Lu;0;L;;;;;N;LATIN CAPITAL LETTER Z BAR;;;01B6; 01B6;LATIN SMALL LETTER Z WITH STROKE;Ll;0;L;;;;;N;LATIN SMALL LETTER Z BAR;;01B5;;01B5 01B7;LATIN CAPITAL LETTER EZH;Lu;0;L;;;;;N;LATIN CAPITAL LETTER YOGH;;;0292; 01B8;LATIN CAPITAL LETTER EZH REVERSED;Lu;0;L;;;;;N;LATIN CAPITAL LETTER REVERSED YOGH;;;01B9; 01B9;LATIN SMALL LETTER EZH REVERSED;Ll;0;L;;;;;N;LATIN SMALL LETTER REVERSED YOGH;;01B8;;01B8 01BA;LATIN SMALL LETTER EZH WITH TAIL;Ll;0;L;;;;;N;LATIN SMALL LETTER YOGH WITH TAIL;;;; 01BB;LATIN LETTER TWO WITH STROKE;Lo;0;L;;;;;N;LATIN LETTER TWO BAR;;;; 01BC;LATIN CAPITAL LETTER TONE FIVE;Lu;0;L;;;;;N;;;;01BD; 01BD;LATIN SMALL LETTER TONE FIVE;Ll;0;L;;;;;N;;;01BC;;01BC 01BE;LATIN LETTER INVERTED GLOTTAL STOP WITH STROKE;Ll;0;L;;;;;N;LATIN LETTER INVERTED GLOTTAL STOP BAR;;;; 01BF;LATIN LETTER WYNN;Ll;0;L;;;;;N;;;01F7;;01F7 01C0;LATIN LETTER DENTAL CLICK;Lo;0;L;;;;;N;LATIN LETTER PIPE;;;; 01C1;LATIN LETTER LATERAL CLICK;Lo;0;L;;;;;N;LATIN LETTER DOUBLE PIPE;;;; 01C2;LATIN LETTER ALVEOLAR CLICK;Lo;0;L;;;;;N;LATIN LETTER PIPE DOUBLE BAR;;;; 01C3;LATIN LETTER RETROFLEX CLICK;Lo;0;L;;;;;N;LATIN LETTER EXCLAMATION MARK;;;; 01C4;LATIN CAPITAL LETTER DZ WITH CARON;Lu;0;L; 0044 017D;;;;N;LATIN CAPITAL LETTER D Z HACEK;;;01C6;01C5 01C5;LATIN CAPITAL LETTER D WITH SMALL LETTER Z WITH CARON;Lt;0;L; 0044 017E;;;;N;LATIN LETTER CAPITAL D SMALL Z HACEK;;01C4;01C6; 01C6;LATIN SMALL LETTER DZ WITH CARON;Ll;0;L; 0064 017E;;;;N;LATIN SMALL LETTER D Z HACEK;;01C4;;01C5 01C7;LATIN CAPITAL LETTER LJ;Lu;0;L; 004C 004A;;;;N;LATIN CAPITAL LETTER L J;;;01C9;01C8 01C8;LATIN CAPITAL LETTER L WITH SMALL LETTER J;Lt;0;L; 004C 006A;;;;N;LATIN LETTER CAPITAL L SMALL J;;01C7;01C9; 01C9;LATIN SMALL LETTER LJ;Ll;0;L; 006C 006A;;;;N;LATIN SMALL LETTER L J;;01C7;;01C8 01CA;LATIN CAPITAL LETTER NJ;Lu;0;L; 004E 004A;;;;N;LATIN CAPITAL LETTER N J;;;01CC;01CB 01CB;LATIN CAPITAL LETTER N WITH SMALL LETTER J;Lt;0;L; 004E 006A;;;;N;LATIN LETTER CAPITAL N SMALL J;;01CA;01CC; 01CC;LATIN SMALL LETTER NJ;Ll;0;L; 006E 006A;;;;N;LATIN SMALL LETTER N J;;01CA;;01CB 01CD;LATIN CAPITAL LETTER A WITH CARON;Lu;0;L;0041 030C;;;;N;LATIN CAPITAL LETTER A HACEK;;;01CE; 01CE;LATIN SMALL LETTER A WITH CARON;Ll;0;L;0061 030C;;;;N;LATIN SMALL LETTER A HACEK;;01CD;;01CD 01CF;LATIN CAPITAL LETTER I WITH CARON;Lu;0;L;0049 030C;;;;N;LATIN CAPITAL LETTER I HACEK;;;01D0; 01D0;LATIN SMALL LETTER I WITH CARON;Ll;0;L;0069 030C;;;;N;LATIN SMALL LETTER I HACEK;;01CF;;01CF 01D1;LATIN CAPITAL LETTER O WITH CARON;Lu;0;L;004F 030C;;;;N;LATIN CAPITAL LETTER O HACEK;;;01D2; 01D2;LATIN SMALL LETTER O WITH CARON;Ll;0;L;006F 030C;;;;N;LATIN SMALL LETTER O HACEK;;01D1;;01D1 01D3;LATIN CAPITAL LETTER U WITH CARON;Lu;0;L;0055 030C;;;;N;LATIN CAPITAL LETTER U HACEK;;;01D4; 01D4;LATIN SMALL LETTER U WITH CARON;Ll;0;L;0075 030C;;;;N;LATIN SMALL LETTER U HACEK;;01D3;;01D3 01D5;LATIN CAPITAL LETTER U WITH DIAERESIS AND MACRON;Lu;0;L;00DC 0304;;;;N;LATIN CAPITAL LETTER U DIAERESIS MACRON;;;01D6; 01D6;LATIN SMALL LETTER U WITH DIAERESIS AND MACRON;Ll;0;L;00FC 0304;;;;N;LATIN SMALL LETTER U DIAERESIS MACRON;;01D5;;01D5 01D7;LATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTE;Lu;0;L;00DC 0301;;;;N;LATIN CAPITAL LETTER U DIAERESIS ACUTE;;;01D8; 01D8;LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE;Ll;0;L;00FC 0301;;;;N;LATIN SMALL LETTER U DIAERESIS ACUTE;;01D7;;01D7 01D9;LATIN CAPITAL LETTER U WITH DIAERESIS AND CARON;Lu;0;L;00DC 030C;;;;N;LATIN CAPITAL LETTER U DIAERESIS HACEK;;;01DA; 01DA;LATIN SMALL LETTER U WITH DIAERESIS AND CARON;Ll;0;L;00FC 030C;;;;N;LATIN SMALL LETTER U DIAERESIS HACEK;;01D9;;01D9 01DB;LATIN CAPITAL LETTER U WITH DIAERESIS AND GRAVE;Lu;0;L;00DC 0300;;;;N;LATIN CAPITAL LETTER U DIAERESIS GRAVE;;;01DC; 01DC;LATIN SMALL LETTER U WITH DIAERESIS AND GRAVE;Ll;0;L;00FC 0300;;;;N;LATIN SMALL LETTER U DIAERESIS GRAVE;;01DB;;01DB 01DD;LATIN SMALL LETTER TURNED E;Ll;0;L;;;;;N;;;018E;;018E 01DE;LATIN CAPITAL LETTER A WITH DIAERESIS AND MACRON;Lu;0;L;00C4 0304;;;;N;LATIN CAPITAL LETTER A DIAERESIS MACRON;;;01DF; 01DF;LATIN SMALL LETTER A WITH DIAERESIS AND MACRON;Ll;0;L;00E4 0304;;;;N;LATIN SMALL LETTER A DIAERESIS MACRON;;01DE;;01DE 01E0;LATIN CAPITAL LETTER A WITH DOT ABOVE AND MACRON;Lu;0;L;0226 0304;;;;N;LATIN CAPITAL LETTER A DOT MACRON;;;01E1; 01E1;LATIN SMALL LETTER A WITH DOT ABOVE AND MACRON;Ll;0;L;0227 0304;;;;N;LATIN SMALL LETTER A DOT MACRON;;01E0;;01E0 01E2;LATIN CAPITAL LETTER AE WITH MACRON;Lu;0;L;00C6 0304;;;;N;LATIN CAPITAL LETTER A E MACRON;ash *;;01E3; 01E3;LATIN SMALL LETTER AE WITH MACRON;Ll;0;L;00E6 0304;;;;N;LATIN SMALL LETTER A E MACRON;ash *;01E2;;01E2 01E4;LATIN CAPITAL LETTER G WITH STROKE;Lu;0;L;;;;;N;LATIN CAPITAL LETTER G BAR;;;01E5; 01E5;LATIN SMALL LETTER G WITH STROKE;Ll;0;L;;;;;N;LATIN SMALL LETTER G BAR;;01E4;;01E4 01E6;LATIN CAPITAL LETTER G WITH CARON;Lu;0;L;0047 030C;;;;N;LATIN CAPITAL LETTER G HACEK;;;01E7; 01E7;LATIN SMALL LETTER G WITH CARON;Ll;0;L;0067 030C;;;;N;LATIN SMALL LETTER G HACEK;;01E6;;01E6 01E8;LATIN CAPITAL LETTER K WITH CARON;Lu;0;L;004B 030C;;;;N;LATIN CAPITAL LETTER K HACEK;;;01E9; 01E9;LATIN SMALL LETTER K WITH CARON;Ll;0;L;006B 030C;;;;N;LATIN SMALL LETTER K HACEK;;01E8;;01E8 01EA;LATIN CAPITAL LETTER O WITH OGONEK;Lu;0;L;004F 0328;;;;N;LATIN CAPITAL LETTER O OGONEK;;;01EB; 01EB;LATIN SMALL LETTER O WITH OGONEK;Ll;0;L;006F 0328;;;;N;LATIN SMALL LETTER O OGONEK;;01EA;;01EA 01EC;LATIN CAPITAL LETTER O WITH OGONEK AND MACRON;Lu;0;L;01EA 0304;;;;N;LATIN CAPITAL LETTER O OGONEK MACRON;;;01ED; 01ED;LATIN SMALL LETTER O WITH OGONEK AND MACRON;Ll;0;L;01EB 0304;;;;N;LATIN SMALL LETTER O OGONEK MACRON;;01EC;;01EC 01EE;LATIN CAPITAL LETTER EZH WITH CARON;Lu;0;L;01B7 030C;;;;N;LATIN CAPITAL LETTER YOGH HACEK;;;01EF; 01EF;LATIN SMALL LETTER EZH WITH CARON;Ll;0;L;0292 030C;;;;N;LATIN SMALL LETTER YOGH HACEK;;01EE;;01EE 01F0;LATIN SMALL LETTER J WITH CARON;Ll;0;L;006A 030C;;;;N;LATIN SMALL LETTER J HACEK;;;; 01F1;LATIN CAPITAL LETTER DZ;Lu;0;L; 0044 005A;;;;N;;;;01F3;01F2 01F2;LATIN CAPITAL LETTER D WITH SMALL LETTER Z;Lt;0;L; 0044 007A;;;;N;;;01F1;01F3; 01F3;LATIN SMALL LETTER DZ;Ll;0;L; 0064 007A;;;;N;;;01F1;;01F2 01F4;LATIN CAPITAL LETTER G WITH ACUTE;Lu;0;L;0047 0301;;;;N;;;;01F5; 01F5;LATIN SMALL LETTER G WITH ACUTE;Ll;0;L;0067 0301;;;;N;;;01F4;;01F4 01F6;LATIN CAPITAL LETTER HWAIR;Lu;0;L;;;;;N;;;;0195; 01F7;LATIN CAPITAL LETTER WYNN;Lu;0;L;;;;;N;;;;01BF; 01F8;LATIN CAPITAL LETTER N WITH GRAVE;Lu;0;L;004E 0300;;;;N;;;;01F9; 01F9;LATIN SMALL LETTER N WITH GRAVE;Ll;0;L;006E 0300;;;;N;;;01F8;;01F8 01FA;LATIN CAPITAL LETTER A WITH RING ABOVE AND ACUTE;Lu;0;L;00C5 0301;;;;N;;;;01FB; 01FB;LATIN SMALL LETTER A WITH RING ABOVE AND ACUTE;Ll;0;L;00E5 0301;;;;N;;;01FA;;01FA 01FC;LATIN CAPITAL LETTER AE WITH ACUTE;Lu;0;L;00C6 0301;;;;N;;ash *;;01FD; 01FD;LATIN SMALL LETTER AE WITH ACUTE;Ll;0;L;00E6 0301;;;;N;;ash *;01FC;;01FC 01FE;LATIN CAPITAL LETTER O WITH STROKE AND ACUTE;Lu;0;L;00D8 0301;;;;N;;;;01FF; 01FF;LATIN SMALL LETTER O WITH STROKE AND ACUTE;Ll;0;L;00F8 0301;;;;N;;;01FE;;01FE 0200;LATIN CAPITAL LETTER A WITH DOUBLE GRAVE;Lu;0;L;0041 030F;;;;N;;;;0201; 0201;LATIN SMALL LETTER A WITH DOUBLE GRAVE;Ll;0;L;0061 030F;;;;N;;;0200;;0200 0202;LATIN CAPITAL LETTER A WITH INVERTED BREVE;Lu;0;L;0041 0311;;;;N;;;;0203; 0203;LATIN SMALL LETTER A WITH INVERTED BREVE;Ll;0;L;0061 0311;;;;N;;;0202;;0202 0204;LATIN CAPITAL LETTER E WITH DOUBLE GRAVE;Lu;0;L;0045 030F;;;;N;;;;0205; 0205;LATIN SMALL LETTER E WITH DOUBLE GRAVE;Ll;0;L;0065 030F;;;;N;;;0204;;0204 0206;LATIN CAPITAL LETTER E WITH INVERTED BREVE;Lu;0;L;0045 0311;;;;N;;;;0207; 0207;LATIN SMALL LETTER E WITH INVERTED BREVE;Ll;0;L;0065 0311;;;;N;;;0206;;0206 0208;LATIN CAPITAL LETTER I WITH DOUBLE GRAVE;Lu;0;L;0049 030F;;;;N;;;;0209; 0209;LATIN SMALL LETTER I WITH DOUBLE GRAVE;Ll;0;L;0069 030F;;;;N;;;0208;;0208 020A;LATIN CAPITAL LETTER I WITH INVERTED BREVE;Lu;0;L;0049 0311;;;;N;;;;020B; 020B;LATIN SMALL LETTER I WITH INVERTED BREVE;Ll;0;L;0069 0311;;;;N;;;020A;;020A 020C;LATIN CAPITAL LETTER O WITH DOUBLE GRAVE;Lu;0;L;004F 030F;;;;N;;;;020D; 020D;LATIN SMALL LETTER O WITH DOUBLE GRAVE;Ll;0;L;006F 030F;;;;N;;;020C;;020C 020E;LATIN CAPITAL LETTER O WITH INVERTED BREVE;Lu;0;L;004F 0311;;;;N;;;;020F; 020F;LATIN SMALL LETTER O WITH INVERTED BREVE;Ll;0;L;006F 0311;;;;N;;;020E;;020E 0210;LATIN CAPITAL LETTER R WITH DOUBLE GRAVE;Lu;0;L;0052 030F;;;;N;;;;0211; 0211;LATIN SMALL LETTER R WITH DOUBLE GRAVE;Ll;0;L;0072 030F;;;;N;;;0210;;0210 0212;LATIN CAPITAL LETTER R WITH INVERTED BREVE;Lu;0;L;0052 0311;;;;N;;;;0213; 0213;LATIN SMALL LETTER R WITH INVERTED BREVE;Ll;0;L;0072 0311;;;;N;;;0212;;0212 0214;LATIN CAPITAL LETTER U WITH DOUBLE GRAVE;Lu;0;L;0055 030F;;;;N;;;;0215; 0215;LATIN SMALL LETTER U WITH DOUBLE GRAVE;Ll;0;L;0075 030F;;;;N;;;0214;;0214 0216;LATIN CAPITAL LETTER U WITH INVERTED BREVE;Lu;0;L;0055 0311;;;;N;;;;0217; 0217;LATIN SMALL LETTER U WITH INVERTED BREVE;Ll;0;L;0075 0311;;;;N;;;0216;;0216 0218;LATIN CAPITAL LETTER S WITH COMMA BELOW;Lu;0;L;0053 0326;;;;N;;*;;0219; 0219;LATIN SMALL LETTER S WITH COMMA BELOW;Ll;0;L;0073 0326;;;;N;;*;0218;;0218 021A;LATIN CAPITAL LETTER T WITH COMMA BELOW;Lu;0;L;0054 0326;;;;N;;*;;021B; 021B;LATIN SMALL LETTER T WITH COMMA BELOW;Ll;0;L;0074 0326;;;;N;;*;021A;;021A 021C;LATIN CAPITAL LETTER YOGH;Lu;0;L;;;;;N;;;;021D; 021D;LATIN SMALL LETTER YOGH;Ll;0;L;;;;;N;;;021C;;021C 021E;LATIN CAPITAL LETTER H WITH CARON;Lu;0;L;0048 030C;;;;N;;;;021F; 021F;LATIN SMALL LETTER H WITH CARON;Ll;0;L;0068 030C;;;;N;;;021E;;021E 0222;LATIN CAPITAL LETTER OU;Lu;0;L;;;;;N;;;;0223; 0223;LATIN SMALL LETTER OU;Ll;0;L;;;;;N;;;0222;;0222 0224;LATIN CAPITAL LETTER Z WITH HOOK;Lu;0;L;;;;;N;;;;0225; 0225;LATIN SMALL LETTER Z WITH HOOK;Ll;0;L;;;;;N;;;0224;;0224 0226;LATIN CAPITAL LETTER A WITH DOT ABOVE;Lu;0;L;0041 0307;;;;N;;;;0227; 0227;LATIN SMALL LETTER A WITH DOT ABOVE;Ll;0;L;0061 0307;;;;N;;;0226;;0226 0228;LATIN CAPITAL LETTER E WITH CEDILLA;Lu;0;L;0045 0327;;;;N;;;;0229; 0229;LATIN SMALL LETTER E WITH CEDILLA;Ll;0;L;0065 0327;;;;N;;;0228;;0228 022A;LATIN CAPITAL LETTER O WITH DIAERESIS AND MACRON;Lu;0;L;00D6 0304;;;;N;;;;022B; 022B;LATIN SMALL LETTER O WITH DIAERESIS AND MACRON;Ll;0;L;00F6 0304;;;;N;;;022A;;022A 022C;LATIN CAPITAL LETTER O WITH TILDE AND MACRON;Lu;0;L;00D5 0304;;;;N;;;;022D; 022D;LATIN SMALL LETTER O WITH TILDE AND MACRON;Ll;0;L;00F5 0304;;;;N;;;022C;;022C 022E;LATIN CAPITAL LETTER O WITH DOT ABOVE;Lu;0;L;004F 0307;;;;N;;;;022F; 022F;LATIN SMALL LETTER O WITH DOT ABOVE;Ll;0;L;006F 0307;;;;N;;;022E;;022E 0230;LATIN CAPITAL LETTER O WITH DOT ABOVE AND MACRON;Lu;0;L;022E 0304;;;;N;;;;0231; 0231;LATIN SMALL LETTER O WITH DOT ABOVE AND MACRON;Ll;0;L;022F 0304;;;;N;;;0230;;0230 0232;LATIN CAPITAL LETTER Y WITH MACRON;Lu;0;L;0059 0304;;;;N;;;;0233; 0233;LATIN SMALL LETTER Y WITH MACRON;Ll;0;L;0079 0304;;;;N;;;0232;;0232 0250;LATIN SMALL LETTER TURNED A;Ll;0;L;;;;;N;;;;; 0251;LATIN SMALL LETTER ALPHA;Ll;0;L;;;;;N;LATIN SMALL LETTER SCRIPT A;;;; 0252;LATIN SMALL LETTER TURNED ALPHA;Ll;0;L;;;;;N;LATIN SMALL LETTER TURNED SCRIPT A;;;; 0253;LATIN SMALL LETTER B WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER B HOOK;;0181;;0181 0254;LATIN SMALL LETTER OPEN O;Ll;0;L;;;;;N;;;0186;;0186 0255;LATIN SMALL LETTER C WITH CURL;Ll;0;L;;;;;N;LATIN SMALL LETTER C CURL;;;; 0256;LATIN SMALL LETTER D WITH TAIL;Ll;0;L;;;;;N;LATIN SMALL LETTER D RETROFLEX HOOK;;0189;;0189 0257;LATIN SMALL LETTER D WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER D HOOK;;018A;;018A 0258;LATIN SMALL LETTER REVERSED E;Ll;0;L;;;;;N;;;;; 0259;LATIN SMALL LETTER SCHWA;Ll;0;L;;;;;N;;;018F;;018F 025A;LATIN SMALL LETTER SCHWA WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER SCHWA HOOK;;;; 025B;LATIN SMALL LETTER OPEN E;Ll;0;L;;;;;N;LATIN SMALL LETTER EPSILON;;0190;;0190 025C;LATIN SMALL LETTER REVERSED OPEN E;Ll;0;L;;;;;N;LATIN SMALL LETTER REVERSED EPSILON;;;; 025D;LATIN SMALL LETTER REVERSED OPEN E WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER REVERSED EPSILON HOOK;;;; 025E;LATIN SMALL LETTER CLOSED REVERSED OPEN E;Ll;0;L;;;;;N;LATIN SMALL LETTER CLOSED REVERSED EPSILON;;;; 025F;LATIN SMALL LETTER DOTLESS J WITH STROKE;Ll;0;L;;;;;N;LATIN SMALL LETTER DOTLESS J BAR;;;; 0260;LATIN SMALL LETTER G WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER G HOOK;;0193;;0193 0261;LATIN SMALL LETTER SCRIPT G;Ll;0;L;;;;;N;;;;; 0262;LATIN LETTER SMALL CAPITAL G;Ll;0;L;;;;;N;;;;; 0263;LATIN SMALL LETTER GAMMA;Ll;0;L;;;;;N;;;0194;;0194 0264;LATIN SMALL LETTER RAMS HORN;Ll;0;L;;;;;N;LATIN SMALL LETTER BABY GAMMA;;;; 0265;LATIN SMALL LETTER TURNED H;Ll;0;L;;;;;N;;;;; 0266;LATIN SMALL LETTER H WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER H HOOK;;;; 0267;LATIN SMALL LETTER HENG WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER HENG HOOK;;;; 0268;LATIN SMALL LETTER I WITH STROKE;Ll;0;L;;;;;N;LATIN SMALL LETTER BARRED I;;0197;;0197 0269;LATIN SMALL LETTER IOTA;Ll;0;L;;;;;N;;;0196;;0196 026A;LATIN LETTER SMALL CAPITAL I;Ll;0;L;;;;;N;;;;; 026B;LATIN SMALL LETTER L WITH MIDDLE TILDE;Ll;0;L;;;;;N;;;;; 026C;LATIN SMALL LETTER L WITH BELT;Ll;0;L;;;;;N;LATIN SMALL LETTER L BELT;;;; 026D;LATIN SMALL LETTER L WITH RETROFLEX HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER L RETROFLEX HOOK;;;; 026E;LATIN SMALL LETTER LEZH;Ll;0;L;;;;;N;LATIN SMALL LETTER L YOGH;;;; 026F;LATIN SMALL LETTER TURNED M;Ll;0;L;;;;;N;;;019C;;019C 0270;LATIN SMALL LETTER TURNED M WITH LONG LEG;Ll;0;L;;;;;N;;;;; 0271;LATIN SMALL LETTER M WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER M HOOK;;;; 0272;LATIN SMALL LETTER N WITH LEFT HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER N HOOK;;019D;;019D 0273;LATIN SMALL LETTER N WITH RETROFLEX HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER N RETROFLEX HOOK;;;; 0274;LATIN LETTER SMALL CAPITAL N;Ll;0;L;;;;;N;;;;; 0275;LATIN SMALL LETTER BARRED O;Ll;0;L;;;;;N;;;019F;;019F 0276;LATIN LETTER SMALL CAPITAL OE;Ll;0;L;;;;;N;LATIN LETTER SMALL CAPITAL O E;;;; 0277;LATIN SMALL LETTER CLOSED OMEGA;Ll;0;L;;;;;N;;;;; 0278;LATIN SMALL LETTER PHI;Ll;0;L;;;;;N;;;;; 0279;LATIN SMALL LETTER TURNED R;Ll;0;L;;;;;N;;;;; 027A;LATIN SMALL LETTER TURNED R WITH LONG LEG;Ll;0;L;;;;;N;;;;; 027B;LATIN SMALL LETTER TURNED R WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER TURNED R HOOK;;;; 027C;LATIN SMALL LETTER R WITH LONG LEG;Ll;0;L;;;;;N;;;;; 027D;LATIN SMALL LETTER R WITH TAIL;Ll;0;L;;;;;N;LATIN SMALL LETTER R HOOK;;;; 027E;LATIN SMALL LETTER R WITH FISHHOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER FISHHOOK R;;;; 027F;LATIN SMALL LETTER REVERSED R WITH FISHHOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER REVERSED FISHHOOK R;;;; 0280;LATIN LETTER SMALL CAPITAL R;Ll;0;L;;;;;N;;*;01A6;;01A6 0281;LATIN LETTER SMALL CAPITAL INVERTED R;Ll;0;L;;;;;N;;;;; 0282;LATIN SMALL LETTER S WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER S HOOK;;;; 0283;LATIN SMALL LETTER ESH;Ll;0;L;;;;;N;;;01A9;;01A9 0284;LATIN SMALL LETTER DOTLESS J WITH STROKE AND HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER DOTLESS J BAR HOOK;;;; 0285;LATIN SMALL LETTER SQUAT REVERSED ESH;Ll;0;L;;;;;N;;;;; 0286;LATIN SMALL LETTER ESH WITH CURL;Ll;0;L;;;;;N;LATIN SMALL LETTER ESH CURL;;;; 0287;LATIN SMALL LETTER TURNED T;Ll;0;L;;;;;N;;;;; 0288;LATIN SMALL LETTER T WITH RETROFLEX HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER T RETROFLEX HOOK;;01AE;;01AE 0289;LATIN SMALL LETTER U BAR;Ll;0;L;;;;;N;;;;; 028A;LATIN SMALL LETTER UPSILON;Ll;0;L;;;;;N;;;01B1;;01B1 028B;LATIN SMALL LETTER V WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER SCRIPT V;;01B2;;01B2 028C;LATIN SMALL LETTER TURNED V;Ll;0;L;;;;;N;;;;; 028D;LATIN SMALL LETTER TURNED W;Ll;0;L;;;;;N;;;;; 028E;LATIN SMALL LETTER TURNED Y;Ll;0;L;;;;;N;;;;; 028F;LATIN LETTER SMALL CAPITAL Y;Ll;0;L;;;;;N;;;;; 0290;LATIN SMALL LETTER Z WITH RETROFLEX HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER Z RETROFLEX HOOK;;;; 0291;LATIN SMALL LETTER Z WITH CURL;Ll;0;L;;;;;N;LATIN SMALL LETTER Z CURL;;;; 0292;LATIN SMALL LETTER EZH;Ll;0;L;;;;;N;LATIN SMALL LETTER YOGH;;01B7;;01B7 0293;LATIN SMALL LETTER EZH WITH CURL;Ll;0;L;;;;;N;LATIN SMALL LETTER YOGH CURL;;;; 0294;LATIN LETTER GLOTTAL STOP;Ll;0;L;;;;;N;;;;; 0295;LATIN LETTER PHARYNGEAL VOICED FRICATIVE;Ll;0;L;;;;;N;LATIN LETTER REVERSED GLOTTAL STOP;;;; 0296;LATIN LETTER INVERTED GLOTTAL STOP;Ll;0;L;;;;;N;;;;; 0297;LATIN LETTER STRETCHED C;Ll;0;L;;;;;N;;;;; 0298;LATIN LETTER BILABIAL CLICK;Ll;0;L;;;;;N;LATIN LETTER BULLSEYE;;;; 0299;LATIN LETTER SMALL CAPITAL B;Ll;0;L;;;;;N;;;;; 029A;LATIN SMALL LETTER CLOSED OPEN E;Ll;0;L;;;;;N;LATIN SMALL LETTER CLOSED EPSILON;;;; 029B;LATIN LETTER SMALL CAPITAL G WITH HOOK;Ll;0;L;;;;;N;LATIN LETTER SMALL CAPITAL G HOOK;;;; 029C;LATIN LETTER SMALL CAPITAL H;Ll;0;L;;;;;N;;;;; 029D;LATIN SMALL LETTER J WITH CROSSED-TAIL;Ll;0;L;;;;;N;LATIN SMALL LETTER CROSSED-TAIL J;;;; 029E;LATIN SMALL LETTER TURNED K;Ll;0;L;;;;;N;;;;; 029F;LATIN LETTER SMALL CAPITAL L;Ll;0;L;;;;;N;;;;; 02A0;LATIN SMALL LETTER Q WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER Q HOOK;;;; 02A1;LATIN LETTER GLOTTAL STOP WITH STROKE;Ll;0;L;;;;;N;LATIN LETTER GLOTTAL STOP BAR;;;; 02A2;LATIN LETTER REVERSED GLOTTAL STOP WITH STROKE;Ll;0;L;;;;;N;LATIN LETTER REVERSED GLOTTAL STOP BAR;;;; 02A3;LATIN SMALL LETTER DZ DIGRAPH;Ll;0;L;;;;;N;LATIN SMALL LETTER D Z;;;; 02A4;LATIN SMALL LETTER DEZH DIGRAPH;Ll;0;L;;;;;N;LATIN SMALL LETTER D YOGH;;;; 02A5;LATIN SMALL LETTER DZ DIGRAPH WITH CURL;Ll;0;L;;;;;N;LATIN SMALL LETTER D Z CURL;;;; 02A6;LATIN SMALL LETTER TS DIGRAPH;Ll;0;L;;;;;N;LATIN SMALL LETTER T S;;;; 02A7;LATIN SMALL LETTER TESH DIGRAPH;Ll;0;L;;;;;N;LATIN SMALL LETTER T ESH;;;; 02A8;LATIN SMALL LETTER TC DIGRAPH WITH CURL;Ll;0;L;;;;;N;LATIN SMALL LETTER T C CURL;;;; 02A9;LATIN SMALL LETTER FENG DIGRAPH;Ll;0;L;;;;;N;;;;; 02AA;LATIN SMALL LETTER LS DIGRAPH;Ll;0;L;;;;;N;;;;; 02AB;LATIN SMALL LETTER LZ DIGRAPH;Ll;0;L;;;;;N;;;;; 02AC;LATIN LETTER BILABIAL PERCUSSIVE;Ll;0;L;;;;;N;;;;; 02AD;LATIN LETTER BIDENTAL PERCUSSIVE;Ll;0;L;;;;;N;;;;; 02B0;MODIFIER LETTER SMALL H;Lm;0;L; 0068;;;;N;;;;; 02B1;MODIFIER LETTER SMALL H WITH HOOK;Lm;0;L; 0266;;;;N;MODIFIER LETTER SMALL H HOOK;;;; 02B2;MODIFIER LETTER SMALL J;Lm;0;L; 006A;;;;N;;;;; 02B3;MODIFIER LETTER SMALL R;Lm;0;L; 0072;;;;N;;;;; 02B4;MODIFIER LETTER SMALL TURNED R;Lm;0;L; 0279;;;;N;;;;; 02B5;MODIFIER LETTER SMALL TURNED R WITH HOOK;Lm;0;L; 027B;;;;N;MODIFIER LETTER SMALL TURNED R HOOK;;;; 02B6;MODIFIER LETTER SMALL CAPITAL INVERTED R;Lm;0;L; 0281;;;;N;;;;; 02B7;MODIFIER LETTER SMALL W;Lm;0;L; 0077;;;;N;;;;; 02B8;MODIFIER LETTER SMALL Y;Lm;0;L; 0079;;;;N;;;;; 02B9;MODIFIER LETTER PRIME;Sk;0;ON;;;;;N;;;;; 02BA;MODIFIER LETTER DOUBLE PRIME;Sk;0;ON;;;;;N;;;;; 02BB;MODIFIER LETTER TURNED COMMA;Lm;0;L;;;;;N;;;;; 02BC;MODIFIER LETTER APOSTROPHE;Lm;0;L;;;;;N;;;;; 02BD;MODIFIER LETTER REVERSED COMMA;Lm;0;L;;;;;N;;;;; 02BE;MODIFIER LETTER RIGHT HALF RING;Lm;0;L;;;;;N;;;;; 02BF;MODIFIER LETTER LEFT HALF RING;Lm;0;L;;;;;N;;;;; 02C0;MODIFIER LETTER GLOTTAL STOP;Lm;0;L;;;;;N;;;;; 02C1;MODIFIER LETTER REVERSED GLOTTAL STOP;Lm;0;L;;;;;N;;;;; 02C2;MODIFIER LETTER LEFT ARROWHEAD;Sk;0;ON;;;;;N;;;;; 02C3;MODIFIER LETTER RIGHT ARROWHEAD;Sk;0;ON;;;;;N;;;;; 02C4;MODIFIER LETTER UP ARROWHEAD;Sk;0;ON;;;;;N;;;;; 02C5;MODIFIER LETTER DOWN ARROWHEAD;Sk;0;ON;;;;;N;;;;; 02C6;MODIFIER LETTER CIRCUMFLEX ACCENT;Sk;0;ON;;;;;N;MODIFIER LETTER CIRCUMFLEX;;;; 02C7;CARON;Sk;0;ON;;;;;N;MODIFIER LETTER HACEK;Mandarin Chinese third tone;;; 02C8;MODIFIER LETTER VERTICAL LINE;Sk;0;ON;;;;;N;;;;; 02C9;MODIFIER LETTER MACRON;Sk;0;ON;;;;;N;;Mandarin Chinese first tone;;; 02CA;MODIFIER LETTER ACUTE ACCENT;Sk;0;ON;;;;;N;MODIFIER LETTER ACUTE;Mandarin Chinese second tone;;; 02CB;MODIFIER LETTER GRAVE ACCENT;Sk;0;ON;;;;;N;MODIFIER LETTER GRAVE;Mandarin Chinese fourth tone;;; 02CC;MODIFIER LETTER LOW VERTICAL LINE;Sk;0;ON;;;;;N;;;;; 02CD;MODIFIER LETTER LOW MACRON;Sk;0;ON;;;;;N;;;;; 02CE;MODIFIER LETTER LOW GRAVE ACCENT;Sk;0;ON;;;;;N;MODIFIER LETTER LOW GRAVE;;;; 02CF;MODIFIER LETTER LOW ACUTE ACCENT;Sk;0;ON;;;;;N;MODIFIER LETTER LOW ACUTE;;;; 02D0;MODIFIER LETTER TRIANGULAR COLON;Lm;0;L;;;;;N;;;;; 02D1;MODIFIER LETTER HALF TRIANGULAR COLON;Lm;0;L;;;;;N;;;;; 02D2;MODIFIER LETTER CENTRED RIGHT HALF RING;Sk;0;ON;;;;;N;MODIFIER LETTER CENTERED RIGHT HALF RING;;;; 02D3;MODIFIER LETTER CENTRED LEFT HALF RING;Sk;0;ON;;;;;N;MODIFIER LETTER CENTERED LEFT HALF RING;;;; 02D4;MODIFIER LETTER UP TACK;Sk;0;ON;;;;;N;;;;; 02D5;MODIFIER LETTER DOWN TACK;Sk;0;ON;;;;;N;;;;; 02D6;MODIFIER LETTER PLUS SIGN;Sk;0;ON;;;;;N;;;;; 02D7;MODIFIER LETTER MINUS SIGN;Sk;0;ON;;;;;N;;;;; 02D8;BREVE;Sk;0;ON; 0020 0306;;;;N;SPACING BREVE;;;; 02D9;DOT ABOVE;Sk;0;ON; 0020 0307;;;;N;SPACING DOT ABOVE;Mandarin Chinese light tone;;; 02DA;RING ABOVE;Sk;0;ON; 0020 030A;;;;N;SPACING RING ABOVE;;;; 02DB;OGONEK;Sk;0;ON; 0020 0328;;;;N;SPACING OGONEK;;;; 02DC;SMALL TILDE;Sk;0;ON; 0020 0303;;;;N;SPACING TILDE;;;; 02DD;DOUBLE ACUTE ACCENT;Sk;0;ON; 0020 030B;;;;N;SPACING DOUBLE ACUTE;;;; 02DE;MODIFIER LETTER RHOTIC HOOK;Sk;0;ON;;;;;N;;;;; 02DF;MODIFIER LETTER CROSS ACCENT;Sk;0;ON;;;;;N;;;;; 02E0;MODIFIER LETTER SMALL GAMMA;Lm;0;L; 0263;;;;N;;;;; 02E1;MODIFIER LETTER SMALL L;Lm;0;L; 006C;;;;N;;;;; 02E2;MODIFIER LETTER SMALL S;Lm;0;L; 0073;;;;N;;;;; 02E3;MODIFIER LETTER SMALL X;Lm;0;L; 0078;;;;N;;;;; 02E4;MODIFIER LETTER SMALL REVERSED GLOTTAL STOP;Lm;0;L; 0295;;;;N;;;;; 02E5;MODIFIER LETTER EXTRA-HIGH TONE BAR;Sk;0;ON;;;;;N;;;;; 02E6;MODIFIER LETTER HIGH TONE BAR;Sk;0;ON;;;;;N;;;;; 02E7;MODIFIER LETTER MID TONE BAR;Sk;0;ON;;;;;N;;;;; 02E8;MODIFIER LETTER LOW TONE BAR;Sk;0;ON;;;;;N;;;;; 02E9;MODIFIER LETTER EXTRA-LOW TONE BAR;Sk;0;ON;;;;;N;;;;; 02EA;MODIFIER LETTER YIN DEPARTING TONE MARK;Sk;0;ON;;;;;N;;;;; 02EB;MODIFIER LETTER YANG DEPARTING TONE MARK;Sk;0;ON;;;;;N;;;;; 02EC;MODIFIER LETTER VOICING;Sk;0;ON;;;;;N;;;;; 02ED;MODIFIER LETTER UNASPIRATED;Sk;0;ON;;;;;N;;;;; 02EE;MODIFIER LETTER DOUBLE APOSTROPHE;Lm;0;L;;;;;N;;;;; 0300;COMBINING GRAVE ACCENT;Mn;230;NSM;;;;;N;NON-SPACING GRAVE;Varia;;; 0301;COMBINING ACUTE ACCENT;Mn;230;NSM;;;;;N;NON-SPACING ACUTE;Oxia;;; 0302;COMBINING CIRCUMFLEX ACCENT;Mn;230;NSM;;;;;N;NON-SPACING CIRCUMFLEX;;;; 0303;COMBINING TILDE;Mn;230;NSM;;;;;N;NON-SPACING TILDE;;;; 0304;COMBINING MACRON;Mn;230;NSM;;;;;N;NON-SPACING MACRON;;;; 0305;COMBINING OVERLINE;Mn;230;NSM;;;;;N;NON-SPACING OVERSCORE;;;; 0306;COMBINING BREVE;Mn;230;NSM;;;;;N;NON-SPACING BREVE;Vrachy;;; 0307;COMBINING DOT ABOVE;Mn;230;NSM;;;;;N;NON-SPACING DOT ABOVE;;;; 0308;COMBINING DIAERESIS;Mn;230;NSM;;;;;N;NON-SPACING DIAERESIS;Dialytika;;; 0309;COMBINING HOOK ABOVE;Mn;230;NSM;;;;;N;NON-SPACING HOOK ABOVE;;;; 030A;COMBINING RING ABOVE;Mn;230;NSM;;;;;N;NON-SPACING RING ABOVE;;;; 030B;COMBINING DOUBLE ACUTE ACCENT;Mn;230;NSM;;;;;N;NON-SPACING DOUBLE ACUTE;;;; 030C;COMBINING CARON;Mn;230;NSM;;;;;N;NON-SPACING HACEK;;;; 030D;COMBINING VERTICAL LINE ABOVE;Mn;230;NSM;;;;;N;NON-SPACING VERTICAL LINE ABOVE;Tonos;;; 030E;COMBINING DOUBLE VERTICAL LINE ABOVE;Mn;230;NSM;;;;;N;NON-SPACING DOUBLE VERTICAL LINE ABOVE;;;; 030F;COMBINING DOUBLE GRAVE ACCENT;Mn;230;NSM;;;;;N;NON-SPACING DOUBLE GRAVE;;;; 0310;COMBINING CANDRABINDU;Mn;230;NSM;;;;;N;NON-SPACING CANDRABINDU;;;; 0311;COMBINING INVERTED BREVE;Mn;230;NSM;;;;;N;NON-SPACING INVERTED BREVE;;;; 0312;COMBINING TURNED COMMA ABOVE;Mn;230;NSM;;;;;N;NON-SPACING TURNED COMMA ABOVE;;;; 0313;COMBINING COMMA ABOVE;Mn;230;NSM;;;;;N;NON-SPACING COMMA ABOVE;Psili;;; 0314;COMBINING REVERSED COMMA ABOVE;Mn;230;NSM;;;;;N;NON-SPACING REVERSED COMMA ABOVE;Dasia;;; 0315;COMBINING COMMA ABOVE RIGHT;Mn;232;NSM;;;;;N;NON-SPACING COMMA ABOVE RIGHT;;;; 0316;COMBINING GRAVE ACCENT BELOW;Mn;220;NSM;;;;;N;NON-SPACING GRAVE BELOW;;;; 0317;COMBINING ACUTE ACCENT BELOW;Mn;220;NSM;;;;;N;NON-SPACING ACUTE BELOW;;;; 0318;COMBINING LEFT TACK BELOW;Mn;220;NSM;;;;;N;NON-SPACING LEFT TACK BELOW;;;; 0319;COMBINING RIGHT TACK BELOW;Mn;220;NSM;;;;;N;NON-SPACING RIGHT TACK BELOW;;;; 031A;COMBINING LEFT ANGLE ABOVE;Mn;232;NSM;;;;;N;NON-SPACING LEFT ANGLE ABOVE;;;; 031B;COMBINING HORN;Mn;216;NSM;;;;;N;NON-SPACING HORN;;;; 031C;COMBINING LEFT HALF RING BELOW;Mn;220;NSM;;;;;N;NON-SPACING LEFT HALF RING BELOW;;;; 031D;COMBINING UP TACK BELOW;Mn;220;NSM;;;;;N;NON-SPACING UP TACK BELOW;;;; 031E;COMBINING DOWN TACK BELOW;Mn;220;NSM;;;;;N;NON-SPACING DOWN TACK BELOW;;;; 031F;COMBINING PLUS SIGN BELOW;Mn;220;NSM;;;;;N;NON-SPACING PLUS SIGN BELOW;;;; 0320;COMBINING MINUS SIGN BELOW;Mn;220;NSM;;;;;N;NON-SPACING MINUS SIGN BELOW;;;; 0321;COMBINING PALATALIZED HOOK BELOW;Mn;202;NSM;;;;;N;NON-SPACING PALATALIZED HOOK BELOW;;;; 0322;COMBINING RETROFLEX HOOK BELOW;Mn;202;NSM;;;;;N;NON-SPACING RETROFLEX HOOK BELOW;;;; 0323;COMBINING DOT BELOW;Mn;220;NSM;;;;;N;NON-SPACING DOT BELOW;;;; 0324;COMBINING DIAERESIS BELOW;Mn;220;NSM;;;;;N;NON-SPACING DOUBLE DOT BELOW;;;; 0325;COMBINING RING BELOW;Mn;220;NSM;;;;;N;NON-SPACING RING BELOW;;;; 0326;COMBINING COMMA BELOW;Mn;220;NSM;;;;;N;NON-SPACING COMMA BELOW;;;; 0327;COMBINING CEDILLA;Mn;202;NSM;;;;;N;NON-SPACING CEDILLA;;;; 0328;COMBINING OGONEK;Mn;202;NSM;;;;;N;NON-SPACING OGONEK;;;; 0329;COMBINING VERTICAL LINE BELOW;Mn;220;NSM;;;;;N;NON-SPACING VERTICAL LINE BELOW;;;; 032A;COMBINING BRIDGE BELOW;Mn;220;NSM;;;;;N;NON-SPACING BRIDGE BELOW;;;; 032B;COMBINING INVERTED DOUBLE ARCH BELOW;Mn;220;NSM;;;;;N;NON-SPACING INVERTED DOUBLE ARCH BELOW;;;; 032C;COMBINING CARON BELOW;Mn;220;NSM;;;;;N;NON-SPACING HACEK BELOW;;;; 032D;COMBINING CIRCUMFLEX ACCENT BELOW;Mn;220;NSM;;;;;N;NON-SPACING CIRCUMFLEX BELOW;;;; 032E;COMBINING BREVE BELOW;Mn;220;NSM;;;;;N;NON-SPACING BREVE BELOW;;;; 032F;COMBINING INVERTED BREVE BELOW;Mn;220;NSM;;;;;N;NON-SPACING INVERTED BREVE BELOW;;;; 0330;COMBINING TILDE BELOW;Mn;220;NSM;;;;;N;NON-SPACING TILDE BELOW;;;; 0331;COMBINING MACRON BELOW;Mn;220;NSM;;;;;N;NON-SPACING MACRON BELOW;;;; 0332;COMBINING LOW LINE;Mn;220;NSM;;;;;N;NON-SPACING UNDERSCORE;;;; 0333;COMBINING DOUBLE LOW LINE;Mn;220;NSM;;;;;N;NON-SPACING DOUBLE UNDERSCORE;;;; 0334;COMBINING TILDE OVERLAY;Mn;1;NSM;;;;;N;NON-SPACING TILDE OVERLAY;;;; 0335;COMBINING SHORT STROKE OVERLAY;Mn;1;NSM;;;;;N;NON-SPACING SHORT BAR OVERLAY;;;; 0336;COMBINING LONG STROKE OVERLAY;Mn;1;NSM;;;;;N;NON-SPACING LONG BAR OVERLAY;;;; 0337;COMBINING SHORT SOLIDUS OVERLAY;Mn;1;NSM;;;;;N;NON-SPACING SHORT SLASH OVERLAY;;;; 0338;COMBINING LONG SOLIDUS OVERLAY;Mn;1;NSM;;;;;N;NON-SPACING LONG SLASH OVERLAY;;;; 0339;COMBINING RIGHT HALF RING BELOW;Mn;220;NSM;;;;;N;NON-SPACING RIGHT HALF RING BELOW;;;; 033A;COMBINING INVERTED BRIDGE BELOW;Mn;220;NSM;;;;;N;NON-SPACING INVERTED BRIDGE BELOW;;;; 033B;COMBINING SQUARE BELOW;Mn;220;NSM;;;;;N;NON-SPACING SQUARE BELOW;;;; 033C;COMBINING SEAGULL BELOW;Mn;220;NSM;;;;;N;NON-SPACING SEAGULL BELOW;;;; 033D;COMBINING X ABOVE;Mn;230;NSM;;;;;N;NON-SPACING X ABOVE;;;; 033E;COMBINING VERTICAL TILDE;Mn;230;NSM;;;;;N;NON-SPACING VERTICAL TILDE;;;; 033F;COMBINING DOUBLE OVERLINE;Mn;230;NSM;;;;;N;NON-SPACING DOUBLE OVERSCORE;;;; 0340;COMBINING GRAVE TONE MARK;Mn;230;NSM;0300;;;;N;NON-SPACING GRAVE TONE MARK;Vietnamese;;; 0341;COMBINING ACUTE TONE MARK;Mn;230;NSM;0301;;;;N;NON-SPACING ACUTE TONE MARK;Vietnamese;;; 0342;COMBINING GREEK PERISPOMENI;Mn;230;NSM;;;;;N;;;;; 0343;COMBINING GREEK KORONIS;Mn;230;NSM;0313;;;;N;;;;; 0344;COMBINING GREEK DIALYTIKA TONOS;Mn;230;NSM;0308 0301;;;;N;GREEK NON-SPACING DIAERESIS TONOS;;;; 0345;COMBINING GREEK YPOGEGRAMMENI;Mn;240;NSM;;;;;N;GREEK NON-SPACING IOTA BELOW;;0399;;0399 0346;COMBINING BRIDGE ABOVE;Mn;230;NSM;;;;;N;;;;; 0347;COMBINING EQUALS SIGN BELOW;Mn;220;NSM;;;;;N;;;;; 0348;COMBINING DOUBLE VERTICAL LINE BELOW;Mn;220;NSM;;;;;N;;;;; 0349;COMBINING LEFT ANGLE BELOW;Mn;220;NSM;;;;;N;;;;; 034A;COMBINING NOT TILDE ABOVE;Mn;230;NSM;;;;;N;;;;; 034B;COMBINING HOMOTHETIC ABOVE;Mn;230;NSM;;;;;N;;;;; 034C;COMBINING ALMOST EQUAL TO ABOVE;Mn;230;NSM;;;;;N;;;;; 034D;COMBINING LEFT RIGHT ARROW BELOW;Mn;220;NSM;;;;;N;;;;; 034E;COMBINING UPWARDS ARROW BELOW;Mn;220;NSM;;;;;N;;;;; 0360;COMBINING DOUBLE TILDE;Mn;234;NSM;;;;;N;;;;; 0361;COMBINING DOUBLE INVERTED BREVE;Mn;234;NSM;;;;;N;;;;; 0362;COMBINING DOUBLE RIGHTWARDS ARROW BELOW;Mn;233;NSM;;;;;N;;;;; 0374;GREEK NUMERAL SIGN;Sk;0;ON;02B9;;;;N;GREEK UPPER NUMERAL SIGN;Dexia keraia;;; 0375;GREEK LOWER NUMERAL SIGN;Sk;0;ON;;;;;N;;Aristeri keraia;;; 037A;GREEK YPOGEGRAMMENI;Lm;0;L; 0020 0345;;;;N;GREEK SPACING IOTA BELOW;;;; 037E;GREEK QUESTION MARK;Po;0;ON;003B;;;;N;;Erotimatiko;;; 0384;GREEK TONOS;Sk;0;ON; 0020 0301;;;;N;GREEK SPACING TONOS;;;; 0385;GREEK DIALYTIKA TONOS;Sk;0;ON;00A8 0301;;;;N;GREEK SPACING DIAERESIS TONOS;;;; 0386;GREEK CAPITAL LETTER ALPHA WITH TONOS;Lu;0;L;0391 0301;;;;N;GREEK CAPITAL LETTER ALPHA TONOS;;;03AC; 0387;GREEK ANO TELEIA;Po;0;ON;00B7;;;;N;;;;; 0388;GREEK CAPITAL LETTER EPSILON WITH TONOS;Lu;0;L;0395 0301;;;;N;GREEK CAPITAL LETTER EPSILON TONOS;;;03AD; 0389;GREEK CAPITAL LETTER ETA WITH TONOS;Lu;0;L;0397 0301;;;;N;GREEK CAPITAL LETTER ETA TONOS;;;03AE; 038A;GREEK CAPITAL LETTER IOTA WITH TONOS;Lu;0;L;0399 0301;;;;N;GREEK CAPITAL LETTER IOTA TONOS;;;03AF; 038C;GREEK CAPITAL LETTER OMICRON WITH TONOS;Lu;0;L;039F 0301;;;;N;GREEK CAPITAL LETTER OMICRON TONOS;;;03CC; 038E;GREEK CAPITAL LETTER UPSILON WITH TONOS;Lu;0;L;03A5 0301;;;;N;GREEK CAPITAL LETTER UPSILON TONOS;;;03CD; 038F;GREEK CAPITAL LETTER OMEGA WITH TONOS;Lu;0;L;03A9 0301;;;;N;GREEK CAPITAL LETTER OMEGA TONOS;;;03CE; 0390;GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS;Ll;0;L;03CA 0301;;;;N;GREEK SMALL LETTER IOTA DIAERESIS TONOS;;;; 0391;GREEK CAPITAL LETTER ALPHA;Lu;0;L;;;;;N;;;;03B1; 0392;GREEK CAPITAL LETTER BETA;Lu;0;L;;;;;N;;;;03B2; 0393;GREEK CAPITAL LETTER GAMMA;Lu;0;L;;;;;N;;;;03B3; 0394;GREEK CAPITAL LETTER DELTA;Lu;0;L;;;;;N;;;;03B4; 0395;GREEK CAPITAL LETTER EPSILON;Lu;0;L;;;;;N;;;;03B5; 0396;GREEK CAPITAL LETTER ZETA;Lu;0;L;;;;;N;;;;03B6; 0397;GREEK CAPITAL LETTER ETA;Lu;0;L;;;;;N;;;;03B7; 0398;GREEK CAPITAL LETTER THETA;Lu;0;L;;;;;N;;;;03B8; 0399;GREEK CAPITAL LETTER IOTA;Lu;0;L;;;;;N;;;;03B9; 039A;GREEK CAPITAL LETTER KAPPA;Lu;0;L;;;;;N;;;;03BA; 039B;GREEK CAPITAL LETTER LAMDA;Lu;0;L;;;;;N;GREEK CAPITAL LETTER LAMBDA;;;03BB; 039C;GREEK CAPITAL LETTER MU;Lu;0;L;;;;;N;;;;03BC; 039D;GREEK CAPITAL LETTER NU;Lu;0;L;;;;;N;;;;03BD; 039E;GREEK CAPITAL LETTER XI;Lu;0;L;;;;;N;;;;03BE; 039F;GREEK CAPITAL LETTER OMICRON;Lu;0;L;;;;;N;;;;03BF; 03A0;GREEK CAPITAL LETTER PI;Lu;0;L;;;;;N;;;;03C0; 03A1;GREEK CAPITAL LETTER RHO;Lu;0;L;;;;;N;;;;03C1; 03A3;GREEK CAPITAL LETTER SIGMA;Lu;0;L;;;;;N;;;;03C3; 03A4;GREEK CAPITAL LETTER TAU;Lu;0;L;;;;;N;;;;03C4; 03A5;GREEK CAPITAL LETTER UPSILON;Lu;0;L;;;;;N;;;;03C5; 03A6;GREEK CAPITAL LETTER PHI;Lu;0;L;;;;;N;;;;03C6; 03A7;GREEK CAPITAL LETTER CHI;Lu;0;L;;;;;N;;;;03C7; 03A8;GREEK CAPITAL LETTER PSI;Lu;0;L;;;;;N;;;;03C8; 03A9;GREEK CAPITAL LETTER OMEGA;Lu;0;L;;;;;N;;;;03C9; 03AA;GREEK CAPITAL LETTER IOTA WITH DIALYTIKA;Lu;0;L;0399 0308;;;;N;GREEK CAPITAL LETTER IOTA DIAERESIS;;;03CA; 03AB;GREEK CAPITAL LETTER UPSILON WITH DIALYTIKA;Lu;0;L;03A5 0308;;;;N;GREEK CAPITAL LETTER UPSILON DIAERESIS;;;03CB; 03AC;GREEK SMALL LETTER ALPHA WITH TONOS;Ll;0;L;03B1 0301;;;;N;GREEK SMALL LETTER ALPHA TONOS;;0386;;0386 03AD;GREEK SMALL LETTER EPSILON WITH TONOS;Ll;0;L;03B5 0301;;;;N;GREEK SMALL LETTER EPSILON TONOS;;0388;;0388 03AE;GREEK SMALL LETTER ETA WITH TONOS;Ll;0;L;03B7 0301;;;;N;GREEK SMALL LETTER ETA TONOS;;0389;;0389 03AF;GREEK SMALL LETTER IOTA WITH TONOS;Ll;0;L;03B9 0301;;;;N;GREEK SMALL LETTER IOTA TONOS;;038A;;038A 03B0;GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS;Ll;0;L;03CB 0301;;;;N;GREEK SMALL LETTER UPSILON DIAERESIS TONOS;;;; 03B1;GREEK SMALL LETTER ALPHA;Ll;0;L;;;;;N;;;0391;;0391 03B2;GREEK SMALL LETTER BETA;Ll;0;L;;;;;N;;;0392;;0392 03B3;GREEK SMALL LETTER GAMMA;Ll;0;L;;;;;N;;;0393;;0393 03B4;GREEK SMALL LETTER DELTA;Ll;0;L;;;;;N;;;0394;;0394 03B5;GREEK SMALL LETTER EPSILON;Ll;0;L;;;;;N;;;0395;;0395 03B6;GREEK SMALL LETTER ZETA;Ll;0;L;;;;;N;;;0396;;0396 03B7;GREEK SMALL LETTER ETA;Ll;0;L;;;;;N;;;0397;;0397 03B8;GREEK SMALL LETTER THETA;Ll;0;L;;;;;N;;;0398;;0398 03B9;GREEK SMALL LETTER IOTA;Ll;0;L;;;;;N;;;0399;;0399 03BA;GREEK SMALL LETTER KAPPA;Ll;0;L;;;;;N;;;039A;;039A 03BB;GREEK SMALL LETTER LAMDA;Ll;0;L;;;;;N;GREEK SMALL LETTER LAMBDA;;039B;;039B 03BC;GREEK SMALL LETTER MU;Ll;0;L;;;;;N;;;039C;;039C 03BD;GREEK SMALL LETTER NU;Ll;0;L;;;;;N;;;039D;;039D 03BE;GREEK SMALL LETTER XI;Ll;0;L;;;;;N;;;039E;;039E 03BF;GREEK SMALL LETTER OMICRON;Ll;0;L;;;;;N;;;039F;;039F 03C0;GREEK SMALL LETTER PI;Ll;0;L;;;;;N;;;03A0;;03A0 03C1;GREEK SMALL LETTER RHO;Ll;0;L;;;;;N;;;03A1;;03A1 03C2;GREEK SMALL LETTER FINAL SIGMA;Ll;0;L;;;;;N;;;03A3;;03A3 03C3;GREEK SMALL LETTER SIGMA;Ll;0;L;;;;;N;;;03A3;;03A3 03C4;GREEK SMALL LETTER TAU;Ll;0;L;;;;;N;;;03A4;;03A4 03C5;GREEK SMALL LETTER UPSILON;Ll;0;L;;;;;N;;;03A5;;03A5 03C6;GREEK SMALL LETTER PHI;Ll;0;L;;;;;N;;;03A6;;03A6 03C7;GREEK SMALL LETTER CHI;Ll;0;L;;;;;N;;;03A7;;03A7 03C8;GREEK SMALL LETTER PSI;Ll;0;L;;;;;N;;;03A8;;03A8 03C9;GREEK SMALL LETTER OMEGA;Ll;0;L;;;;;N;;;03A9;;03A9 03CA;GREEK SMALL LETTER IOTA WITH DIALYTIKA;Ll;0;L;03B9 0308;;;;N;GREEK SMALL LETTER IOTA DIAERESIS;;03AA;;03AA 03CB;GREEK SMALL LETTER UPSILON WITH DIALYTIKA;Ll;0;L;03C5 0308;;;;N;GREEK SMALL LETTER UPSILON DIAERESIS;;03AB;;03AB 03CC;GREEK SMALL LETTER OMICRON WITH TONOS;Ll;0;L;03BF 0301;;;;N;GREEK SMALL LETTER OMICRON TONOS;;038C;;038C 03CD;GREEK SMALL LETTER UPSILON WITH TONOS;Ll;0;L;03C5 0301;;;;N;GREEK SMALL LETTER UPSILON TONOS;;038E;;038E 03CE;GREEK SMALL LETTER OMEGA WITH TONOS;Ll;0;L;03C9 0301;;;;N;GREEK SMALL LETTER OMEGA TONOS;;038F;;038F 03D0;GREEK BETA SYMBOL;Ll;0;L; 03B2;;;;N;GREEK SMALL LETTER CURLED BETA;;0392;;0392 03D1;GREEK THETA SYMBOL;Ll;0;L; 03B8;;;;N;GREEK SMALL LETTER SCRIPT THETA;;0398;;0398 03D2;GREEK UPSILON WITH HOOK SYMBOL;Lu;0;L; 03A5;;;;N;GREEK CAPITAL LETTER UPSILON HOOK;;;; 03D3;GREEK UPSILON WITH ACUTE AND HOOK SYMBOL;Lu;0;L;03D2 0301;;;;N;GREEK CAPITAL LETTER UPSILON HOOK TONOS;;;; 03D4;GREEK UPSILON WITH DIAERESIS AND HOOK SYMBOL;Lu;0;L;03D2 0308;;;;N;GREEK CAPITAL LETTER UPSILON HOOK DIAERESIS;;;; 03D5;GREEK PHI SYMBOL;Ll;0;L; 03C6;;;;N;GREEK SMALL LETTER SCRIPT PHI;;03A6;;03A6 03D6;GREEK PI SYMBOL;Ll;0;L; 03C0;;;;N;GREEK SMALL LETTER OMEGA PI;;03A0;;03A0 03D7;GREEK KAI SYMBOL;Ll;0;L;;;;;N;;;;; 03DA;GREEK LETTER STIGMA;Lu;0;L;;;;;N;GREEK CAPITAL LETTER STIGMA;;;03DB; 03DB;GREEK SMALL LETTER STIGMA;Ll;0;L;;;;;N;;;03DA;;03DA 03DC;GREEK LETTER DIGAMMA;Lu;0;L;;;;;N;GREEK CAPITAL LETTER DIGAMMA;;;03DD; 03DD;GREEK SMALL LETTER DIGAMMA;Ll;0;L;;;;;N;;;03DC;;03DC 03DE;GREEK LETTER KOPPA;Lu;0;L;;;;;N;GREEK CAPITAL LETTER KOPPA;;;03DF; 03DF;GREEK SMALL LETTER KOPPA;Ll;0;L;;;;;N;;;03DE;;03DE 03E0;GREEK LETTER SAMPI;Lu;0;L;;;;;N;GREEK CAPITAL LETTER SAMPI;;;03E1; 03E1;GREEK SMALL LETTER SAMPI;Ll;0;L;;;;;N;;;03E0;;03E0 03E2;COPTIC CAPITAL LETTER SHEI;Lu;0;L;;;;;N;GREEK CAPITAL LETTER SHEI;;;03E3; 03E3;COPTIC SMALL LETTER SHEI;Ll;0;L;;;;;N;GREEK SMALL LETTER SHEI;;03E2;;03E2 03E4;COPTIC CAPITAL LETTER FEI;Lu;0;L;;;;;N;GREEK CAPITAL LETTER FEI;;;03E5; 03E5;COPTIC SMALL LETTER FEI;Ll;0;L;;;;;N;GREEK SMALL LETTER FEI;;03E4;;03E4 03E6;COPTIC CAPITAL LETTER KHEI;Lu;0;L;;;;;N;GREEK CAPITAL LETTER KHEI;;;03E7; 03E7;COPTIC SMALL LETTER KHEI;Ll;0;L;;;;;N;GREEK SMALL LETTER KHEI;;03E6;;03E6 03E8;COPTIC CAPITAL LETTER HORI;Lu;0;L;;;;;N;GREEK CAPITAL LETTER HORI;;;03E9; 03E9;COPTIC SMALL LETTER HORI;Ll;0;L;;;;;N;GREEK SMALL LETTER HORI;;03E8;;03E8 03EA;COPTIC CAPITAL LETTER GANGIA;Lu;0;L;;;;;N;GREEK CAPITAL LETTER GANGIA;;;03EB; 03EB;COPTIC SMALL LETTER GANGIA;Ll;0;L;;;;;N;GREEK SMALL LETTER GANGIA;;03EA;;03EA 03EC;COPTIC CAPITAL LETTER SHIMA;Lu;0;L;;;;;N;GREEK CAPITAL LETTER SHIMA;;;03ED; 03ED;COPTIC SMALL LETTER SHIMA;Ll;0;L;;;;;N;GREEK SMALL LETTER SHIMA;;03EC;;03EC 03EE;COPTIC CAPITAL LETTER DEI;Lu;0;L;;;;;N;GREEK CAPITAL LETTER DEI;;;03EF; 03EF;COPTIC SMALL LETTER DEI;Ll;0;L;;;;;N;GREEK SMALL LETTER DEI;;03EE;;03EE 03F0;GREEK KAPPA SYMBOL;Ll;0;L; 03BA;;;;N;GREEK SMALL LETTER SCRIPT KAPPA;;039A;;039A 03F1;GREEK RHO SYMBOL;Ll;0;L; 03C1;;;;N;GREEK SMALL LETTER TAILED RHO;;03A1;;03A1 03F2;GREEK LUNATE SIGMA SYMBOL;Ll;0;L; 03C2;;;;N;GREEK SMALL LETTER LUNATE SIGMA;;03A3;;03A3 03F3;GREEK LETTER YOT;Ll;0;L;;;;;N;;;;; 0400;CYRILLIC CAPITAL LETTER IE WITH GRAVE;Lu;0;L;0415 0300;;;;N;;;;0450; 0401;CYRILLIC CAPITAL LETTER IO;Lu;0;L;0415 0308;;;;N;;;;0451; 0402;CYRILLIC CAPITAL LETTER DJE;Lu;0;L;;;;;N;;Serbocroatian;;0452; 0403;CYRILLIC CAPITAL LETTER GJE;Lu;0;L;0413 0301;;;;N;;;;0453; 0404;CYRILLIC CAPITAL LETTER UKRAINIAN IE;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER E;;;0454; 0405;CYRILLIC CAPITAL LETTER DZE;Lu;0;L;;;;;N;;;;0455; 0406;CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER I;;;0456; 0407;CYRILLIC CAPITAL LETTER YI;Lu;0;L;0406 0308;;;;N;;Ukrainian;;0457; 0408;CYRILLIC CAPITAL LETTER JE;Lu;0;L;;;;;N;;;;0458; 0409;CYRILLIC CAPITAL LETTER LJE;Lu;0;L;;;;;N;;;;0459; 040A;CYRILLIC CAPITAL LETTER NJE;Lu;0;L;;;;;N;;;;045A; 040B;CYRILLIC CAPITAL LETTER TSHE;Lu;0;L;;;;;N;;Serbocroatian;;045B; 040C;CYRILLIC CAPITAL LETTER KJE;Lu;0;L;041A 0301;;;;N;;;;045C; 040D;CYRILLIC CAPITAL LETTER I WITH GRAVE;Lu;0;L;0418 0300;;;;N;;;;045D; 040E;CYRILLIC CAPITAL LETTER SHORT U;Lu;0;L;0423 0306;;;;N;;Byelorussian;;045E; 040F;CYRILLIC CAPITAL LETTER DZHE;Lu;0;L;;;;;N;;;;045F; 0410;CYRILLIC CAPITAL LETTER A;Lu;0;L;;;;;N;;;;0430; 0411;CYRILLIC CAPITAL LETTER BE;Lu;0;L;;;;;N;;;;0431; 0412;CYRILLIC CAPITAL LETTER VE;Lu;0;L;;;;;N;;;;0432; 0413;CYRILLIC CAPITAL LETTER GHE;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER GE;;;0433; 0414;CYRILLIC CAPITAL LETTER DE;Lu;0;L;;;;;N;;;;0434; 0415;CYRILLIC CAPITAL LETTER IE;Lu;0;L;;;;;N;;;;0435; 0416;CYRILLIC CAPITAL LETTER ZHE;Lu;0;L;;;;;N;;;;0436; 0417;CYRILLIC CAPITAL LETTER ZE;Lu;0;L;;;;;N;;;;0437; 0418;CYRILLIC CAPITAL LETTER I;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER II;;;0438; 0419;CYRILLIC CAPITAL LETTER SHORT I;Lu;0;L;0418 0306;;;;N;CYRILLIC CAPITAL LETTER SHORT II;;;0439; 041A;CYRILLIC CAPITAL LETTER KA;Lu;0;L;;;;;N;;;;043A; 041B;CYRILLIC CAPITAL LETTER EL;Lu;0;L;;;;;N;;;;043B; 041C;CYRILLIC CAPITAL LETTER EM;Lu;0;L;;;;;N;;;;043C; 041D;CYRILLIC CAPITAL LETTER EN;Lu;0;L;;;;;N;;;;043D; 041E;CYRILLIC CAPITAL LETTER O;Lu;0;L;;;;;N;;;;043E; 041F;CYRILLIC CAPITAL LETTER PE;Lu;0;L;;;;;N;;;;043F; 0420;CYRILLIC CAPITAL LETTER ER;Lu;0;L;;;;;N;;;;0440; 0421;CYRILLIC CAPITAL LETTER ES;Lu;0;L;;;;;N;;;;0441; 0422;CYRILLIC CAPITAL LETTER TE;Lu;0;L;;;;;N;;;;0442; 0423;CYRILLIC CAPITAL LETTER U;Lu;0;L;;;;;N;;;;0443; 0424;CYRILLIC CAPITAL LETTER EF;Lu;0;L;;;;;N;;;;0444; 0425;CYRILLIC CAPITAL LETTER HA;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER KHA;;;0445; 0426;CYRILLIC CAPITAL LETTER TSE;Lu;0;L;;;;;N;;;;0446; 0427;CYRILLIC CAPITAL LETTER CHE;Lu;0;L;;;;;N;;;;0447; 0428;CYRILLIC CAPITAL LETTER SHA;Lu;0;L;;;;;N;;;;0448; 0429;CYRILLIC CAPITAL LETTER SHCHA;Lu;0;L;;;;;N;;;;0449; 042A;CYRILLIC CAPITAL LETTER HARD SIGN;Lu;0;L;;;;;N;;;;044A; 042B;CYRILLIC CAPITAL LETTER YERU;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER YERI;;;044B; 042C;CYRILLIC CAPITAL LETTER SOFT SIGN;Lu;0;L;;;;;N;;;;044C; 042D;CYRILLIC CAPITAL LETTER E;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER REVERSED E;;;044D; 042E;CYRILLIC CAPITAL LETTER YU;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER IU;;;044E; 042F;CYRILLIC CAPITAL LETTER YA;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER IA;;;044F; 0430;CYRILLIC SMALL LETTER A;Ll;0;L;;;;;N;;;0410;;0410 0431;CYRILLIC SMALL LETTER BE;Ll;0;L;;;;;N;;;0411;;0411 0432;CYRILLIC SMALL LETTER VE;Ll;0;L;;;;;N;;;0412;;0412 0433;CYRILLIC SMALL LETTER GHE;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER GE;;0413;;0413 0434;CYRILLIC SMALL LETTER DE;Ll;0;L;;;;;N;;;0414;;0414 0435;CYRILLIC SMALL LETTER IE;Ll;0;L;;;;;N;;;0415;;0415 0436;CYRILLIC SMALL LETTER ZHE;Ll;0;L;;;;;N;;;0416;;0416 0437;CYRILLIC SMALL LETTER ZE;Ll;0;L;;;;;N;;;0417;;0417 0438;CYRILLIC SMALL LETTER I;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER II;;0418;;0418 0439;CYRILLIC SMALL LETTER SHORT I;Ll;0;L;0438 0306;;;;N;CYRILLIC SMALL LETTER SHORT II;;0419;;0419 043A;CYRILLIC SMALL LETTER KA;Ll;0;L;;;;;N;;;041A;;041A 043B;CYRILLIC SMALL LETTER EL;Ll;0;L;;;;;N;;;041B;;041B 043C;CYRILLIC SMALL LETTER EM;Ll;0;L;;;;;N;;;041C;;041C 043D;CYRILLIC SMALL LETTER EN;Ll;0;L;;;;;N;;;041D;;041D 043E;CYRILLIC SMALL LETTER O;Ll;0;L;;;;;N;;;041E;;041E 043F;CYRILLIC SMALL LETTER PE;Ll;0;L;;;;;N;;;041F;;041F 0440;CYRILLIC SMALL LETTER ER;Ll;0;L;;;;;N;;;0420;;0420 0441;CYRILLIC SMALL LETTER ES;Ll;0;L;;;;;N;;;0421;;0421 0442;CYRILLIC SMALL LETTER TE;Ll;0;L;;;;;N;;;0422;;0422 0443;CYRILLIC SMALL LETTER U;Ll;0;L;;;;;N;;;0423;;0423 0444;CYRILLIC SMALL LETTER EF;Ll;0;L;;;;;N;;;0424;;0424 0445;CYRILLIC SMALL LETTER HA;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER KHA;;0425;;0425 0446;CYRILLIC SMALL LETTER TSE;Ll;0;L;;;;;N;;;0426;;0426 0447;CYRILLIC SMALL LETTER CHE;Ll;0;L;;;;;N;;;0427;;0427 0448;CYRILLIC SMALL LETTER SHA;Ll;0;L;;;;;N;;;0428;;0428 0449;CYRILLIC SMALL LETTER SHCHA;Ll;0;L;;;;;N;;;0429;;0429 044A;CYRILLIC SMALL LETTER HARD SIGN;Ll;0;L;;;;;N;;;042A;;042A 044B;CYRILLIC SMALL LETTER YERU;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER YERI;;042B;;042B 044C;CYRILLIC SMALL LETTER SOFT SIGN;Ll;0;L;;;;;N;;;042C;;042C 044D;CYRILLIC SMALL LETTER E;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER REVERSED E;;042D;;042D 044E;CYRILLIC SMALL LETTER YU;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER IU;;042E;;042E 044F;CYRILLIC SMALL LETTER YA;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER IA;;042F;;042F 0450;CYRILLIC SMALL LETTER IE WITH GRAVE;Ll;0;L;0435 0300;;;;N;;;0400;;0400 0451;CYRILLIC SMALL LETTER IO;Ll;0;L;0435 0308;;;;N;;;0401;;0401 0452;CYRILLIC SMALL LETTER DJE;Ll;0;L;;;;;N;;Serbocroatian;0402;;0402 0453;CYRILLIC SMALL LETTER GJE;Ll;0;L;0433 0301;;;;N;;;0403;;0403 0454;CYRILLIC SMALL LETTER UKRAINIAN IE;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER E;;0404;;0404 0455;CYRILLIC SMALL LETTER DZE;Ll;0;L;;;;;N;;;0405;;0405 0456;CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER I;;0406;;0406 0457;CYRILLIC SMALL LETTER YI;Ll;0;L;0456 0308;;;;N;;Ukrainian;0407;;0407 0458;CYRILLIC SMALL LETTER JE;Ll;0;L;;;;;N;;;0408;;0408 0459;CYRILLIC SMALL LETTER LJE;Ll;0;L;;;;;N;;;0409;;0409 045A;CYRILLIC SMALL LETTER NJE;Ll;0;L;;;;;N;;;040A;;040A 045B;CYRILLIC SMALL LETTER TSHE;Ll;0;L;;;;;N;;Serbocroatian;040B;;040B 045C;CYRILLIC SMALL LETTER KJE;Ll;0;L;043A 0301;;;;N;;;040C;;040C 045D;CYRILLIC SMALL LETTER I WITH GRAVE;Ll;0;L;0438 0300;;;;N;;;040D;;040D 045E;CYRILLIC SMALL LETTER SHORT U;Ll;0;L;0443 0306;;;;N;;Byelorussian;040E;;040E 045F;CYRILLIC SMALL LETTER DZHE;Ll;0;L;;;;;N;;;040F;;040F 0460;CYRILLIC CAPITAL LETTER OMEGA;Lu;0;L;;;;;N;;;;0461; 0461;CYRILLIC SMALL LETTER OMEGA;Ll;0;L;;;;;N;;;0460;;0460 0462;CYRILLIC CAPITAL LETTER YAT;Lu;0;L;;;;;N;;;;0463; 0463;CYRILLIC SMALL LETTER YAT;Ll;0;L;;;;;N;;;0462;;0462 0464;CYRILLIC CAPITAL LETTER IOTIFIED E;Lu;0;L;;;;;N;;;;0465; 0465;CYRILLIC SMALL LETTER IOTIFIED E;Ll;0;L;;;;;N;;;0464;;0464 0466;CYRILLIC CAPITAL LETTER LITTLE YUS;Lu;0;L;;;;;N;;;;0467; 0467;CYRILLIC SMALL LETTER LITTLE YUS;Ll;0;L;;;;;N;;;0466;;0466 0468;CYRILLIC CAPITAL LETTER IOTIFIED LITTLE YUS;Lu;0;L;;;;;N;;;;0469; 0469;CYRILLIC SMALL LETTER IOTIFIED LITTLE YUS;Ll;0;L;;;;;N;;;0468;;0468 046A;CYRILLIC CAPITAL LETTER BIG YUS;Lu;0;L;;;;;N;;;;046B; 046B;CYRILLIC SMALL LETTER BIG YUS;Ll;0;L;;;;;N;;;046A;;046A 046C;CYRILLIC CAPITAL LETTER IOTIFIED BIG YUS;Lu;0;L;;;;;N;;;;046D; 046D;CYRILLIC SMALL LETTER IOTIFIED BIG YUS;Ll;0;L;;;;;N;;;046C;;046C 046E;CYRILLIC CAPITAL LETTER KSI;Lu;0;L;;;;;N;;;;046F; 046F;CYRILLIC SMALL LETTER KSI;Ll;0;L;;;;;N;;;046E;;046E 0470;CYRILLIC CAPITAL LETTER PSI;Lu;0;L;;;;;N;;;;0471; 0471;CYRILLIC SMALL LETTER PSI;Ll;0;L;;;;;N;;;0470;;0470 0472;CYRILLIC CAPITAL LETTER FITA;Lu;0;L;;;;;N;;;;0473; 0473;CYRILLIC SMALL LETTER FITA;Ll;0;L;;;;;N;;;0472;;0472 0474;CYRILLIC CAPITAL LETTER IZHITSA;Lu;0;L;;;;;N;;;;0475; 0475;CYRILLIC SMALL LETTER IZHITSA;Ll;0;L;;;;;N;;;0474;;0474 0476;CYRILLIC CAPITAL LETTER IZHITSA WITH DOUBLE GRAVE ACCENT;Lu;0;L;0474 030F;;;;N;CYRILLIC CAPITAL LETTER IZHITSA DOUBLE GRAVE;;;0477; 0477;CYRILLIC SMALL LETTER IZHITSA WITH DOUBLE GRAVE ACCENT;Ll;0;L;0475 030F;;;;N;CYRILLIC SMALL LETTER IZHITSA DOUBLE GRAVE;;0476;;0476 0478;CYRILLIC CAPITAL LETTER UK;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER UK DIGRAPH;;;0479; 0479;CYRILLIC SMALL LETTER UK;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER UK DIGRAPH;;0478;;0478 047A;CYRILLIC CAPITAL LETTER ROUND OMEGA;Lu;0;L;;;;;N;;;;047B; 047B;CYRILLIC SMALL LETTER ROUND OMEGA;Ll;0;L;;;;;N;;;047A;;047A 047C;CYRILLIC CAPITAL LETTER OMEGA WITH TITLO;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER OMEGA TITLO;;;047D; 047D;CYRILLIC SMALL LETTER OMEGA WITH TITLO;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER OMEGA TITLO;;047C;;047C 047E;CYRILLIC CAPITAL LETTER OT;Lu;0;L;;;;;N;;;;047F; 047F;CYRILLIC SMALL LETTER OT;Ll;0;L;;;;;N;;;047E;;047E 0480;CYRILLIC CAPITAL LETTER KOPPA;Lu;0;L;;;;;N;;;;0481; 0481;CYRILLIC SMALL LETTER KOPPA;Ll;0;L;;;;;N;;;0480;;0480 0482;CYRILLIC THOUSANDS SIGN;So;0;L;;;;;N;;;;; 0483;COMBINING CYRILLIC TITLO;Mn;230;NSM;;;;;N;CYRILLIC NON-SPACING TITLO;;;; 0484;COMBINING CYRILLIC PALATALIZATION;Mn;230;NSM;;;;;N;CYRILLIC NON-SPACING PALATALIZATION;;;; 0485;COMBINING CYRILLIC DASIA PNEUMATA;Mn;230;NSM;;;;;N;CYRILLIC NON-SPACING DASIA PNEUMATA;;;; 0486;COMBINING CYRILLIC PSILI PNEUMATA;Mn;230;NSM;;;;;N;CYRILLIC NON-SPACING PSILI PNEUMATA;;;; 0488;COMBINING CYRILLIC HUNDRED THOUSANDS SIGN;Me;0;NSM;;;;;N;;;;; 0489;COMBINING CYRILLIC MILLIONS SIGN;Me;0;NSM;;;;;N;;;;; 048C;CYRILLIC CAPITAL LETTER SEMISOFT SIGN;Lu;0;L;;;;;N;;;;048D; 048D;CYRILLIC SMALL LETTER SEMISOFT SIGN;Ll;0;L;;;;;N;;;048C;;048C 048E;CYRILLIC CAPITAL LETTER ER WITH TICK;Lu;0;L;;;;;N;;;;048F; 048F;CYRILLIC SMALL LETTER ER WITH TICK;Ll;0;L;;;;;N;;;048E;;048E 0490;CYRILLIC CAPITAL LETTER GHE WITH UPTURN;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER GE WITH UPTURN;;;0491; 0491;CYRILLIC SMALL LETTER GHE WITH UPTURN;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER GE WITH UPTURN;;0490;;0490 0492;CYRILLIC CAPITAL LETTER GHE WITH STROKE;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER GE BAR;;;0493; 0493;CYRILLIC SMALL LETTER GHE WITH STROKE;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER GE BAR;;0492;;0492 0494;CYRILLIC CAPITAL LETTER GHE WITH MIDDLE HOOK;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER GE HOOK;;;0495; 0495;CYRILLIC SMALL LETTER GHE WITH MIDDLE HOOK;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER GE HOOK;;0494;;0494 0496;CYRILLIC CAPITAL LETTER ZHE WITH DESCENDER;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER ZHE WITH RIGHT DESCENDER;;;0497; 0497;CYRILLIC SMALL LETTER ZHE WITH DESCENDER;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER ZHE WITH RIGHT DESCENDER;;0496;;0496 0498;CYRILLIC CAPITAL LETTER ZE WITH DESCENDER;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER ZE CEDILLA;;;0499; 0499;CYRILLIC SMALL LETTER ZE WITH DESCENDER;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER ZE CEDILLA;;0498;;0498 049A;CYRILLIC CAPITAL LETTER KA WITH DESCENDER;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER KA WITH RIGHT DESCENDER;;;049B; 049B;CYRILLIC SMALL LETTER KA WITH DESCENDER;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER KA WITH RIGHT DESCENDER;;049A;;049A 049C;CYRILLIC CAPITAL LETTER KA WITH VERTICAL STROKE;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER KA VERTICAL BAR;;;049D; 049D;CYRILLIC SMALL LETTER KA WITH VERTICAL STROKE;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER KA VERTICAL BAR;;049C;;049C 049E;CYRILLIC CAPITAL LETTER KA WITH STROKE;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER KA BAR;;;049F; 049F;CYRILLIC SMALL LETTER KA WITH STROKE;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER KA BAR;;049E;;049E 04A0;CYRILLIC CAPITAL LETTER BASHKIR KA;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER REVERSED GE KA;;;04A1; 04A1;CYRILLIC SMALL LETTER BASHKIR KA;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER REVERSED GE KA;;04A0;;04A0 04A2;CYRILLIC CAPITAL LETTER EN WITH DESCENDER;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER EN WITH RIGHT DESCENDER;;;04A3; 04A3;CYRILLIC SMALL LETTER EN WITH DESCENDER;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER EN WITH RIGHT DESCENDER;;04A2;;04A2 04A4;CYRILLIC CAPITAL LIGATURE EN GHE;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER EN GE;;;04A5; 04A5;CYRILLIC SMALL LIGATURE EN GHE;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER EN GE;;04A4;;04A4 04A6;CYRILLIC CAPITAL LETTER PE WITH MIDDLE HOOK;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER PE HOOK;Abkhasian;;04A7; 04A7;CYRILLIC SMALL LETTER PE WITH MIDDLE HOOK;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER PE HOOK;Abkhasian;04A6;;04A6 04A8;CYRILLIC CAPITAL LETTER ABKHASIAN HA;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER O HOOK;;;04A9; 04A9;CYRILLIC SMALL LETTER ABKHASIAN HA;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER O HOOK;;04A8;;04A8 04AA;CYRILLIC CAPITAL LETTER ES WITH DESCENDER;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER ES CEDILLA;;;04AB; 04AB;CYRILLIC SMALL LETTER ES WITH DESCENDER;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER ES CEDILLA;;04AA;;04AA 04AC;CYRILLIC CAPITAL LETTER TE WITH DESCENDER;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER TE WITH RIGHT DESCENDER;;;04AD; 04AD;CYRILLIC SMALL LETTER TE WITH DESCENDER;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER TE WITH RIGHT DESCENDER;;04AC;;04AC 04AE;CYRILLIC CAPITAL LETTER STRAIGHT U;Lu;0;L;;;;;N;;;;04AF; 04AF;CYRILLIC SMALL LETTER STRAIGHT U;Ll;0;L;;;;;N;;;04AE;;04AE 04B0;CYRILLIC CAPITAL LETTER STRAIGHT U WITH STROKE;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER STRAIGHT U BAR;;;04B1; 04B1;CYRILLIC SMALL LETTER STRAIGHT U WITH STROKE;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER STRAIGHT U BAR;;04B0;;04B0 04B2;CYRILLIC CAPITAL LETTER HA WITH DESCENDER;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER KHA WITH RIGHT DESCENDER;;;04B3; 04B3;CYRILLIC SMALL LETTER HA WITH DESCENDER;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER KHA WITH RIGHT DESCENDER;;04B2;;04B2 04B4;CYRILLIC CAPITAL LIGATURE TE TSE;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER TE TSE;Abkhasian;;04B5; 04B5;CYRILLIC SMALL LIGATURE TE TSE;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER TE TSE;Abkhasian;04B4;;04B4 04B6;CYRILLIC CAPITAL LETTER CHE WITH DESCENDER;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER CHE WITH RIGHT DESCENDER;;;04B7; 04B7;CYRILLIC SMALL LETTER CHE WITH DESCENDER;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER CHE WITH RIGHT DESCENDER;;04B6;;04B6 04B8;CYRILLIC CAPITAL LETTER CHE WITH VERTICAL STROKE;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER CHE VERTICAL BAR;;;04B9; 04B9;CYRILLIC SMALL LETTER CHE WITH VERTICAL STROKE;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER CHE VERTICAL BAR;;04B8;;04B8 04BA;CYRILLIC CAPITAL LETTER SHHA;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER H;;;04BB; 04BB;CYRILLIC SMALL LETTER SHHA;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER H;;04BA;;04BA 04BC;CYRILLIC CAPITAL LETTER ABKHASIAN CHE;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER IE HOOK;;;04BD; 04BD;CYRILLIC SMALL LETTER ABKHASIAN CHE;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER IE HOOK;;04BC;;04BC 04BE;CYRILLIC CAPITAL LETTER ABKHASIAN CHE WITH DESCENDER;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER IE HOOK OGONEK;;;04BF; 04BF;CYRILLIC SMALL LETTER ABKHASIAN CHE WITH DESCENDER;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER IE HOOK OGONEK;;04BE;;04BE 04C0;CYRILLIC LETTER PALOCHKA;Lu;0;L;;;;;N;CYRILLIC LETTER I;;;; 04C1;CYRILLIC CAPITAL LETTER ZHE WITH BREVE;Lu;0;L;0416 0306;;;;N;CYRILLIC CAPITAL LETTER SHORT ZHE;;;04C2; 04C2;CYRILLIC SMALL LETTER ZHE WITH BREVE;Ll;0;L;0436 0306;;;;N;CYRILLIC SMALL LETTER SHORT ZHE;;04C1;;04C1 04C3;CYRILLIC CAPITAL LETTER KA WITH HOOK;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER KA HOOK;;;04C4; 04C4;CYRILLIC SMALL LETTER KA WITH HOOK;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER KA HOOK;;04C3;;04C3 04C7;CYRILLIC CAPITAL LETTER EN WITH HOOK;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER EN HOOK;;;04C8; 04C8;CYRILLIC SMALL LETTER EN WITH HOOK;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER EN HOOK;;04C7;;04C7 04CB;CYRILLIC CAPITAL LETTER KHAKASSIAN CHE;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER CHE WITH LEFT DESCENDER;;;04CC; 04CC;CYRILLIC SMALL LETTER KHAKASSIAN CHE;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER CHE WITH LEFT DESCENDER;;04CB;;04CB 04D0;CYRILLIC CAPITAL LETTER A WITH BREVE;Lu;0;L;0410 0306;;;;N;;;;04D1; 04D1;CYRILLIC SMALL LETTER A WITH BREVE;Ll;0;L;0430 0306;;;;N;;;04D0;;04D0 04D2;CYRILLIC CAPITAL LETTER A WITH DIAERESIS;Lu;0;L;0410 0308;;;;N;;;;04D3; 04D3;CYRILLIC SMALL LETTER A WITH DIAERESIS;Ll;0;L;0430 0308;;;;N;;;04D2;;04D2 04D4;CYRILLIC CAPITAL LIGATURE A IE;Lu;0;L;;;;;N;;;;04D5; 04D5;CYRILLIC SMALL LIGATURE A IE;Ll;0;L;;;;;N;;;04D4;;04D4 04D6;CYRILLIC CAPITAL LETTER IE WITH BREVE;Lu;0;L;0415 0306;;;;N;;;;04D7; 04D7;CYRILLIC SMALL LETTER IE WITH BREVE;Ll;0;L;0435 0306;;;;N;;;04D6;;04D6 04D8;CYRILLIC CAPITAL LETTER SCHWA;Lu;0;L;;;;;N;;;;04D9; 04D9;CYRILLIC SMALL LETTER SCHWA;Ll;0;L;;;;;N;;;04D8;;04D8 04DA;CYRILLIC CAPITAL LETTER SCHWA WITH DIAERESIS;Lu;0;L;04D8 0308;;;;N;;;;04DB; 04DB;CYRILLIC SMALL LETTER SCHWA WITH DIAERESIS;Ll;0;L;04D9 0308;;;;N;;;04DA;;04DA 04DC;CYRILLIC CAPITAL LETTER ZHE WITH DIAERESIS;Lu;0;L;0416 0308;;;;N;;;;04DD; 04DD;CYRILLIC SMALL LETTER ZHE WITH DIAERESIS;Ll;0;L;0436 0308;;;;N;;;04DC;;04DC 04DE;CYRILLIC CAPITAL LETTER ZE WITH DIAERESIS;Lu;0;L;0417 0308;;;;N;;;;04DF; 04DF;CYRILLIC SMALL LETTER ZE WITH DIAERESIS;Ll;0;L;0437 0308;;;;N;;;04DE;;04DE 04E0;CYRILLIC CAPITAL LETTER ABKHASIAN DZE;Lu;0;L;;;;;N;;;;04E1; 04E1;CYRILLIC SMALL LETTER ABKHASIAN DZE;Ll;0;L;;;;;N;;;04E0;;04E0 04E2;CYRILLIC CAPITAL LETTER I WITH MACRON;Lu;0;L;0418 0304;;;;N;;;;04E3; 04E3;CYRILLIC SMALL LETTER I WITH MACRON;Ll;0;L;0438 0304;;;;N;;;04E2;;04E2 04E4;CYRILLIC CAPITAL LETTER I WITH DIAERESIS;Lu;0;L;0418 0308;;;;N;;;;04E5; 04E5;CYRILLIC SMALL LETTER I WITH DIAERESIS;Ll;0;L;0438 0308;;;;N;;;04E4;;04E4 04E6;CYRILLIC CAPITAL LETTER O WITH DIAERESIS;Lu;0;L;041E 0308;;;;N;;;;04E7; 04E7;CYRILLIC SMALL LETTER O WITH DIAERESIS;Ll;0;L;043E 0308;;;;N;;;04E6;;04E6 04E8;CYRILLIC CAPITAL LETTER BARRED O;Lu;0;L;;;;;N;;;;04E9; 04E9;CYRILLIC SMALL LETTER BARRED O;Ll;0;L;;;;;N;;;04E8;;04E8 04EA;CYRILLIC CAPITAL LETTER BARRED O WITH DIAERESIS;Lu;0;L;04E8 0308;;;;N;;;;04EB; 04EB;CYRILLIC SMALL LETTER BARRED O WITH DIAERESIS;Ll;0;L;04E9 0308;;;;N;;;04EA;;04EA 04EC;CYRILLIC CAPITAL LETTER E WITH DIAERESIS;Lu;0;L;042D 0308;;;;N;;;;04ED; 04ED;CYRILLIC SMALL LETTER E WITH DIAERESIS;Ll;0;L;044D 0308;;;;N;;;04EC;;04EC 04EE;CYRILLIC CAPITAL LETTER U WITH MACRON;Lu;0;L;0423 0304;;;;N;;;;04EF; 04EF;CYRILLIC SMALL LETTER U WITH MACRON;Ll;0;L;0443 0304;;;;N;;;04EE;;04EE 04F0;CYRILLIC CAPITAL LETTER U WITH DIAERESIS;Lu;0;L;0423 0308;;;;N;;;;04F1; 04F1;CYRILLIC SMALL LETTER U WITH DIAERESIS;Ll;0;L;0443 0308;;;;N;;;04F0;;04F0 04F2;CYRILLIC CAPITAL LETTER U WITH DOUBLE ACUTE;Lu;0;L;0423 030B;;;;N;;;;04F3; 04F3;CYRILLIC SMALL LETTER U WITH DOUBLE ACUTE;Ll;0;L;0443 030B;;;;N;;;04F2;;04F2 04F4;CYRILLIC CAPITAL LETTER CHE WITH DIAERESIS;Lu;0;L;0427 0308;;;;N;;;;04F5; 04F5;CYRILLIC SMALL LETTER CHE WITH DIAERESIS;Ll;0;L;0447 0308;;;;N;;;04F4;;04F4 04F8;CYRILLIC CAPITAL LETTER YERU WITH DIAERESIS;Lu;0;L;042B 0308;;;;N;;;;04F9; 04F9;CYRILLIC SMALL LETTER YERU WITH DIAERESIS;Ll;0;L;044B 0308;;;;N;;;04F8;;04F8 0531;ARMENIAN CAPITAL LETTER AYB;Lu;0;L;;;;;N;;;;0561; 0532;ARMENIAN CAPITAL LETTER BEN;Lu;0;L;;;;;N;;;;0562; 0533;ARMENIAN CAPITAL LETTER GIM;Lu;0;L;;;;;N;;;;0563; 0534;ARMENIAN CAPITAL LETTER DA;Lu;0;L;;;;;N;;;;0564; 0535;ARMENIAN CAPITAL LETTER ECH;Lu;0;L;;;;;N;;;;0565; 0536;ARMENIAN CAPITAL LETTER ZA;Lu;0;L;;;;;N;;;;0566; 0537;ARMENIAN CAPITAL LETTER EH;Lu;0;L;;;;;N;;;;0567; 0538;ARMENIAN CAPITAL LETTER ET;Lu;0;L;;;;;N;;;;0568; 0539;ARMENIAN CAPITAL LETTER TO;Lu;0;L;;;;;N;;;;0569; 053A;ARMENIAN CAPITAL LETTER ZHE;Lu;0;L;;;;;N;;;;056A; 053B;ARMENIAN CAPITAL LETTER INI;Lu;0;L;;;;;N;;;;056B; 053C;ARMENIAN CAPITAL LETTER LIWN;Lu;0;L;;;;;N;;;;056C; 053D;ARMENIAN CAPITAL LETTER XEH;Lu;0;L;;;;;N;;;;056D; 053E;ARMENIAN CAPITAL LETTER CA;Lu;0;L;;;;;N;;;;056E; 053F;ARMENIAN CAPITAL LETTER KEN;Lu;0;L;;;;;N;;;;056F; 0540;ARMENIAN CAPITAL LETTER HO;Lu;0;L;;;;;N;;;;0570; 0541;ARMENIAN CAPITAL LETTER JA;Lu;0;L;;;;;N;;;;0571; 0542;ARMENIAN CAPITAL LETTER GHAD;Lu;0;L;;;;;N;ARMENIAN CAPITAL LETTER LAD;;;0572; 0543;ARMENIAN CAPITAL LETTER CHEH;Lu;0;L;;;;;N;;;;0573; 0544;ARMENIAN CAPITAL LETTER MEN;Lu;0;L;;;;;N;;;;0574; 0545;ARMENIAN CAPITAL LETTER YI;Lu;0;L;;;;;N;;;;0575; 0546;ARMENIAN CAPITAL LETTER NOW;Lu;0;L;;;;;N;;;;0576; 0547;ARMENIAN CAPITAL LETTER SHA;Lu;0;L;;;;;N;;;;0577; 0548;ARMENIAN CAPITAL LETTER VO;Lu;0;L;;;;;N;;;;0578; 0549;ARMENIAN CAPITAL LETTER CHA;Lu;0;L;;;;;N;;;;0579; 054A;ARMENIAN CAPITAL LETTER PEH;Lu;0;L;;;;;N;;;;057A; 054B;ARMENIAN CAPITAL LETTER JHEH;Lu;0;L;;;;;N;;;;057B; 054C;ARMENIAN CAPITAL LETTER RA;Lu;0;L;;;;;N;;;;057C; 054D;ARMENIAN CAPITAL LETTER SEH;Lu;0;L;;;;;N;;;;057D; 054E;ARMENIAN CAPITAL LETTER VEW;Lu;0;L;;;;;N;;;;057E; 054F;ARMENIAN CAPITAL LETTER TIWN;Lu;0;L;;;;;N;;;;057F; 0550;ARMENIAN CAPITAL LETTER REH;Lu;0;L;;;;;N;;;;0580; 0551;ARMENIAN CAPITAL LETTER CO;Lu;0;L;;;;;N;;;;0581; 0552;ARMENIAN CAPITAL LETTER YIWN;Lu;0;L;;;;;N;;;;0582; 0553;ARMENIAN CAPITAL LETTER PIWR;Lu;0;L;;;;;N;;;;0583; 0554;ARMENIAN CAPITAL LETTER KEH;Lu;0;L;;;;;N;;;;0584; 0555;ARMENIAN CAPITAL LETTER OH;Lu;0;L;;;;;N;;;;0585; 0556;ARMENIAN CAPITAL LETTER FEH;Lu;0;L;;;;;N;;;;0586; 0559;ARMENIAN MODIFIER LETTER LEFT HALF RING;Lm;0;L;;;;;N;;;;; 055A;ARMENIAN APOSTROPHE;Po;0;L;;;;;N;ARMENIAN MODIFIER LETTER RIGHT HALF RING;;;; 055B;ARMENIAN EMPHASIS MARK;Po;0;L;;;;;N;;;;; 055C;ARMENIAN EXCLAMATION MARK;Po;0;L;;;;;N;;;;; 055D;ARMENIAN COMMA;Po;0;L;;;;;N;;;;; 055E;ARMENIAN QUESTION MARK;Po;0;L;;;;;N;;;;; 055F;ARMENIAN ABBREVIATION MARK;Po;0;L;;;;;N;;;;; 0561;ARMENIAN SMALL LETTER AYB;Ll;0;L;;;;;N;;;0531;;0531 0562;ARMENIAN SMALL LETTER BEN;Ll;0;L;;;;;N;;;0532;;0532 0563;ARMENIAN SMALL LETTER GIM;Ll;0;L;;;;;N;;;0533;;0533 0564;ARMENIAN SMALL LETTER DA;Ll;0;L;;;;;N;;;0534;;0534 0565;ARMENIAN SMALL LETTER ECH;Ll;0;L;;;;;N;;;0535;;0535 0566;ARMENIAN SMALL LETTER ZA;Ll;0;L;;;;;N;;;0536;;0536 0567;ARMENIAN SMALL LETTER EH;Ll;0;L;;;;;N;;;0537;;0537 0568;ARMENIAN SMALL LETTER ET;Ll;0;L;;;;;N;;;0538;;0538 0569;ARMENIAN SMALL LETTER TO;Ll;0;L;;;;;N;;;0539;;0539 056A;ARMENIAN SMALL LETTER ZHE;Ll;0;L;;;;;N;;;053A;;053A 056B;ARMENIAN SMALL LETTER INI;Ll;0;L;;;;;N;;;053B;;053B 056C;ARMENIAN SMALL LETTER LIWN;Ll;0;L;;;;;N;;;053C;;053C 056D;ARMENIAN SMALL LETTER XEH;Ll;0;L;;;;;N;;;053D;;053D 056E;ARMENIAN SMALL LETTER CA;Ll;0;L;;;;;N;;;053E;;053E 056F;ARMENIAN SMALL LETTER KEN;Ll;0;L;;;;;N;;;053F;;053F 0570;ARMENIAN SMALL LETTER HO;Ll;0;L;;;;;N;;;0540;;0540 0571;ARMENIAN SMALL LETTER JA;Ll;0;L;;;;;N;;;0541;;0541 0572;ARMENIAN SMALL LETTER GHAD;Ll;0;L;;;;;N;ARMENIAN SMALL LETTER LAD;;0542;;0542 0573;ARMENIAN SMALL LETTER CHEH;Ll;0;L;;;;;N;;;0543;;0543 0574;ARMENIAN SMALL LETTER MEN;Ll;0;L;;;;;N;;;0544;;0544 0575;ARMENIAN SMALL LETTER YI;Ll;0;L;;;;;N;;;0545;;0545 0576;ARMENIAN SMALL LETTER NOW;Ll;0;L;;;;;N;;;0546;;0546 0577;ARMENIAN SMALL LETTER SHA;Ll;0;L;;;;;N;;;0547;;0547 0578;ARMENIAN SMALL LETTER VO;Ll;0;L;;;;;N;;;0548;;0548 0579;ARMENIAN SMALL LETTER CHA;Ll;0;L;;;;;N;;;0549;;0549 057A;ARMENIAN SMALL LETTER PEH;Ll;0;L;;;;;N;;;054A;;054A 057B;ARMENIAN SMALL LETTER JHEH;Ll;0;L;;;;;N;;;054B;;054B 057C;ARMENIAN SMALL LETTER RA;Ll;0;L;;;;;N;;;054C;;054C 057D;ARMENIAN SMALL LETTER SEH;Ll;0;L;;;;;N;;;054D;;054D 057E;ARMENIAN SMALL LETTER VEW;Ll;0;L;;;;;N;;;054E;;054E 057F;ARMENIAN SMALL LETTER TIWN;Ll;0;L;;;;;N;;;054F;;054F 0580;ARMENIAN SMALL LETTER REH;Ll;0;L;;;;;N;;;0550;;0550 0581;ARMENIAN SMALL LETTER CO;Ll;0;L;;;;;N;;;0551;;0551 0582;ARMENIAN SMALL LETTER YIWN;Ll;0;L;;;;;N;;;0552;;0552 0583;ARMENIAN SMALL LETTER PIWR;Ll;0;L;;;;;N;;;0553;;0553 0584;ARMENIAN SMALL LETTER KEH;Ll;0;L;;;;;N;;;0554;;0554 0585;ARMENIAN SMALL LETTER OH;Ll;0;L;;;;;N;;;0555;;0555 0586;ARMENIAN SMALL LETTER FEH;Ll;0;L;;;;;N;;;0556;;0556 0587;ARMENIAN SMALL LIGATURE ECH YIWN;Ll;0;L; 0565 0582;;;;N;;;;; 0589;ARMENIAN FULL STOP;Po;0;L;;;;;N;ARMENIAN PERIOD;;;; 058A;ARMENIAN HYPHEN;Pd;0;ON;;;;;N;;;;; 0591;HEBREW ACCENT ETNAHTA;Mn;220;NSM;;;;;N;;;;; 0592;HEBREW ACCENT SEGOL;Mn;230;NSM;;;;;N;;;;; 0593;HEBREW ACCENT SHALSHELET;Mn;230;NSM;;;;;N;;;;; 0594;HEBREW ACCENT ZAQEF QATAN;Mn;230;NSM;;;;;N;;;;; 0595;HEBREW ACCENT ZAQEF GADOL;Mn;230;NSM;;;;;N;;;;; 0596;HEBREW ACCENT TIPEHA;Mn;220;NSM;;;;;N;;*;;; 0597;HEBREW ACCENT REVIA;Mn;230;NSM;;;;;N;;;;; 0598;HEBREW ACCENT ZARQA;Mn;230;NSM;;;;;N;;*;;; 0599;HEBREW ACCENT PASHTA;Mn;230;NSM;;;;;N;;;;; 059A;HEBREW ACCENT YETIV;Mn;222;NSM;;;;;N;;;;; 059B;HEBREW ACCENT TEVIR;Mn;220;NSM;;;;;N;;;;; 059C;HEBREW ACCENT GERESH;Mn;230;NSM;;;;;N;;;;; 059D;HEBREW ACCENT GERESH MUQDAM;Mn;230;NSM;;;;;N;;;;; 059E;HEBREW ACCENT GERSHAYIM;Mn;230;NSM;;;;;N;;;;; 059F;HEBREW ACCENT QARNEY PARA;Mn;230;NSM;;;;;N;;;;; 05A0;HEBREW ACCENT TELISHA GEDOLA;Mn;230;NSM;;;;;N;;;;; 05A1;HEBREW ACCENT PAZER;Mn;230;NSM;;;;;N;;;;; 05A3;HEBREW ACCENT MUNAH;Mn;220;NSM;;;;;N;;;;; 05A4;HEBREW ACCENT MAHAPAKH;Mn;220;NSM;;;;;N;;;;; 05A5;HEBREW ACCENT MERKHA;Mn;220;NSM;;;;;N;;*;;; 05A6;HEBREW ACCENT MERKHA KEFULA;Mn;220;NSM;;;;;N;;;;; 05A7;HEBREW ACCENT DARGA;Mn;220;NSM;;;;;N;;;;; 05A8;HEBREW ACCENT QADMA;Mn;230;NSM;;;;;N;;*;;; 05A9;HEBREW ACCENT TELISHA QETANA;Mn;230;NSM;;;;;N;;;;; 05AA;HEBREW ACCENT YERAH BEN YOMO;Mn;220;NSM;;;;;N;;*;;; 05AB;HEBREW ACCENT OLE;Mn;230;NSM;;;;;N;;;;; 05AC;HEBREW ACCENT ILUY;Mn;230;NSM;;;;;N;;;;; 05AD;HEBREW ACCENT DEHI;Mn;222;NSM;;;;;N;;;;; 05AE;HEBREW ACCENT ZINOR;Mn;228;NSM;;;;;N;;;;; 05AF;HEBREW MARK MASORA CIRCLE;Mn;230;NSM;;;;;N;;;;; 05B0;HEBREW POINT SHEVA;Mn;10;NSM;;;;;N;;;;; 05B1;HEBREW POINT HATAF SEGOL;Mn;11;NSM;;;;;N;;;;; 05B2;HEBREW POINT HATAF PATAH;Mn;12;NSM;;;;;N;;;;; 05B3;HEBREW POINT HATAF QAMATS;Mn;13;NSM;;;;;N;;;;; 05B4;HEBREW POINT HIRIQ;Mn;14;NSM;;;;;N;;;;; 05B5;HEBREW POINT TSERE;Mn;15;NSM;;;;;N;;;;; 05B6;HEBREW POINT SEGOL;Mn;16;NSM;;;;;N;;;;; 05B7;HEBREW POINT PATAH;Mn;17;NSM;;;;;N;;;;; 05B8;HEBREW POINT QAMATS;Mn;18;NSM;;;;;N;;;;; 05B9;HEBREW POINT HOLAM;Mn;19;NSM;;;;;N;;;;; 05BB;HEBREW POINT QUBUTS;Mn;20;NSM;;;;;N;;;;; 05BC;HEBREW POINT DAGESH OR MAPIQ;Mn;21;NSM;;;;;N;HEBREW POINT DAGESH;or shuruq;;; 05BD;HEBREW POINT METEG;Mn;22;NSM;;;;;N;;*;;; 05BE;HEBREW PUNCTUATION MAQAF;Po;0;R;;;;;N;;;;; 05BF;HEBREW POINT RAFE;Mn;23;NSM;;;;;N;;;;; 05C0;HEBREW PUNCTUATION PASEQ;Po;0;R;;;;;N;HEBREW POINT PASEQ;*;;; 05C1;HEBREW POINT SHIN DOT;Mn;24;NSM;;;;;N;;;;; 05C2;HEBREW POINT SIN DOT;Mn;25;NSM;;;;;N;;;;; 05C3;HEBREW PUNCTUATION SOF PASUQ;Po;0;R;;;;;N;;*;;; 05C4;HEBREW MARK UPPER DOT;Mn;230;NSM;;;;;N;;;;; 05D0;HEBREW LETTER ALEF;Lo;0;R;;;;;N;;;;; 05D1;HEBREW LETTER BET;Lo;0;R;;;;;N;;;;; 05D2;HEBREW LETTER GIMEL;Lo;0;R;;;;;N;;;;; 05D3;HEBREW LETTER DALET;Lo;0;R;;;;;N;;;;; 05D4;HEBREW LETTER HE;Lo;0;R;;;;;N;;;;; 05D5;HEBREW LETTER VAV;Lo;0;R;;;;;N;;;;; 05D6;HEBREW LETTER ZAYIN;Lo;0;R;;;;;N;;;;; 05D7;HEBREW LETTER HET;Lo;0;R;;;;;N;;;;; 05D8;HEBREW LETTER TET;Lo;0;R;;;;;N;;;;; 05D9;HEBREW LETTER YOD;Lo;0;R;;;;;N;;;;; 05DA;HEBREW LETTER FINAL KAF;Lo;0;R;;;;;N;;;;; 05DB;HEBREW LETTER KAF;Lo;0;R;;;;;N;;;;; 05DC;HEBREW LETTER LAMED;Lo;0;R;;;;;N;;;;; 05DD;HEBREW LETTER FINAL MEM;Lo;0;R;;;;;N;;;;; 05DE;HEBREW LETTER MEM;Lo;0;R;;;;;N;;;;; 05DF;HEBREW LETTER FINAL NUN;Lo;0;R;;;;;N;;;;; 05E0;HEBREW LETTER NUN;Lo;0;R;;;;;N;;;;; 05E1;HEBREW LETTER SAMEKH;Lo;0;R;;;;;N;;;;; 05E2;HEBREW LETTER AYIN;Lo;0;R;;;;;N;;;;; 05E3;HEBREW LETTER FINAL PE;Lo;0;R;;;;;N;;;;; 05E4;HEBREW LETTER PE;Lo;0;R;;;;;N;;;;; 05E5;HEBREW LETTER FINAL TSADI;Lo;0;R;;;;;N;;;;; 05E6;HEBREW LETTER TSADI;Lo;0;R;;;;;N;;;;; 05E7;HEBREW LETTER QOF;Lo;0;R;;;;;N;;;;; 05E8;HEBREW LETTER RESH;Lo;0;R;;;;;N;;;;; 05E9;HEBREW LETTER SHIN;Lo;0;R;;;;;N;;;;; 05EA;HEBREW LETTER TAV;Lo;0;R;;;;;N;;;;; 05F0;HEBREW LIGATURE YIDDISH DOUBLE VAV;Lo;0;R;;;;;N;HEBREW LETTER DOUBLE VAV;;;; 05F1;HEBREW LIGATURE YIDDISH VAV YOD;Lo;0;R;;;;;N;HEBREW LETTER VAV YOD;;;; 05F2;HEBREW LIGATURE YIDDISH DOUBLE YOD;Lo;0;R;;;;;N;HEBREW LETTER DOUBLE YOD;;;; 05F3;HEBREW PUNCTUATION GERESH;Po;0;R;;;;;N;;;;; 05F4;HEBREW PUNCTUATION GERSHAYIM;Po;0;R;;;;;N;;;;; 060C;ARABIC COMMA;Po;0;CS;;;;;N;;;;; 061B;ARABIC SEMICOLON;Po;0;AL;;;;;N;;;;; 061F;ARABIC QUESTION MARK;Po;0;AL;;;;;N;;;;; 0621;ARABIC LETTER HAMZA;Lo;0;AL;;;;;N;ARABIC LETTER HAMZAH;;;; 0622;ARABIC LETTER ALEF WITH MADDA ABOVE;Lo;0;AL;0627 0653;;;;N;ARABIC LETTER MADDAH ON ALEF;;;; 0623;ARABIC LETTER ALEF WITH HAMZA ABOVE;Lo;0;AL;0627 0654;;;;N;ARABIC LETTER HAMZAH ON ALEF;;;; 0624;ARABIC LETTER WAW WITH HAMZA ABOVE;Lo;0;AL;0648 0654;;;;N;ARABIC LETTER HAMZAH ON WAW;;;; 0625;ARABIC LETTER ALEF WITH HAMZA BELOW;Lo;0;AL;0627 0655;;;;N;ARABIC LETTER HAMZAH UNDER ALEF;;;; 0626;ARABIC LETTER YEH WITH HAMZA ABOVE;Lo;0;AL;064A 0654;;;;N;ARABIC LETTER HAMZAH ON YA;;;; 0627;ARABIC LETTER ALEF;Lo;0;AL;;;;;N;;;;; 0628;ARABIC LETTER BEH;Lo;0;AL;;;;;N;ARABIC LETTER BAA;;;; 0629;ARABIC LETTER TEH MARBUTA;Lo;0;AL;;;;;N;ARABIC LETTER TAA MARBUTAH;;;; 062A;ARABIC LETTER TEH;Lo;0;AL;;;;;N;ARABIC LETTER TAA;;;; 062B;ARABIC LETTER THEH;Lo;0;AL;;;;;N;ARABIC LETTER THAA;;;; 062C;ARABIC LETTER JEEM;Lo;0;AL;;;;;N;;;;; 062D;ARABIC LETTER HAH;Lo;0;AL;;;;;N;ARABIC LETTER HAA;;;; 062E;ARABIC LETTER KHAH;Lo;0;AL;;;;;N;ARABIC LETTER KHAA;;;; 062F;ARABIC LETTER DAL;Lo;0;AL;;;;;N;;;;; 0630;ARABIC LETTER THAL;Lo;0;AL;;;;;N;;;;; 0631;ARABIC LETTER REH;Lo;0;AL;;;;;N;ARABIC LETTER RA;;;; 0632;ARABIC LETTER ZAIN;Lo;0;AL;;;;;N;;;;; 0633;ARABIC LETTER SEEN;Lo;0;AL;;;;;N;;;;; 0634;ARABIC LETTER SHEEN;Lo;0;AL;;;;;N;;;;; 0635;ARABIC LETTER SAD;Lo;0;AL;;;;;N;;;;; 0636;ARABIC LETTER DAD;Lo;0;AL;;;;;N;;;;; 0637;ARABIC LETTER TAH;Lo;0;AL;;;;;N;;;;; 0638;ARABIC LETTER ZAH;Lo;0;AL;;;;;N;ARABIC LETTER DHAH;;;; 0639;ARABIC LETTER AIN;Lo;0;AL;;;;;N;;;;; 063A;ARABIC LETTER GHAIN;Lo;0;AL;;;;;N;;;;; 0640;ARABIC TATWEEL;Lm;0;AL;;;;;N;;;;; 0641;ARABIC LETTER FEH;Lo;0;AL;;;;;N;ARABIC LETTER FA;;;; 0642;ARABIC LETTER QAF;Lo;0;AL;;;;;N;;;;; 0643;ARABIC LETTER KAF;Lo;0;AL;;;;;N;ARABIC LETTER CAF;;;; 0644;ARABIC LETTER LAM;Lo;0;AL;;;;;N;;;;; 0645;ARABIC LETTER MEEM;Lo;0;AL;;;;;N;;;;; 0646;ARABIC LETTER NOON;Lo;0;AL;;;;;N;;;;; 0647;ARABIC LETTER HEH;Lo;0;AL;;;;;N;ARABIC LETTER HA;;;; 0648;ARABIC LETTER WAW;Lo;0;AL;;;;;N;;;;; 0649;ARABIC LETTER ALEF MAKSURA;Lo;0;AL;;;;;N;ARABIC LETTER ALEF MAQSURAH;;;; 064A;ARABIC LETTER YEH;Lo;0;AL;;;;;N;ARABIC LETTER YA;;;; 064B;ARABIC FATHATAN;Mn;27;NSM;;;;;N;;;;; 064C;ARABIC DAMMATAN;Mn;28;NSM;;;;;N;;;;; 064D;ARABIC KASRATAN;Mn;29;NSM;;;;;N;;;;; 064E;ARABIC FATHA;Mn;30;NSM;;;;;N;ARABIC FATHAH;;;; 064F;ARABIC DAMMA;Mn;31;NSM;;;;;N;ARABIC DAMMAH;;;; 0650;ARABIC KASRA;Mn;32;NSM;;;;;N;ARABIC KASRAH;;;; 0651;ARABIC SHADDA;Mn;33;NSM;;;;;N;ARABIC SHADDAH;;;; 0652;ARABIC SUKUN;Mn;34;NSM;;;;;N;;;;; 0653;ARABIC MADDAH ABOVE;Mn;230;NSM;;;;;N;;;;; 0654;ARABIC HAMZA ABOVE;Mn;230;NSM;;;;;N;;;;; 0655;ARABIC HAMZA BELOW;Mn;220;NSM;;;;;N;;;;; 0660;ARABIC-INDIC DIGIT ZERO;Nd;0;AN;;0;0;0;N;;;;; 0661;ARABIC-INDIC DIGIT ONE;Nd;0;AN;;1;1;1;N;;;;; 0662;ARABIC-INDIC DIGIT TWO;Nd;0;AN;;2;2;2;N;;;;; 0663;ARABIC-INDIC DIGIT THREE;Nd;0;AN;;3;3;3;N;;;;; 0664;ARABIC-INDIC DIGIT FOUR;Nd;0;AN;;4;4;4;N;;;;; 0665;ARABIC-INDIC DIGIT FIVE;Nd;0;AN;;5;5;5;N;;;;; 0666;ARABIC-INDIC DIGIT SIX;Nd;0;AN;;6;6;6;N;;;;; 0667;ARABIC-INDIC DIGIT SEVEN;Nd;0;AN;;7;7;7;N;;;;; 0668;ARABIC-INDIC DIGIT EIGHT;Nd;0;AN;;8;8;8;N;;;;; 0669;ARABIC-INDIC DIGIT NINE;Nd;0;AN;;9;9;9;N;;;;; 066A;ARABIC PERCENT SIGN;Po;0;ET;;;;;N;;;;; 066B;ARABIC DECIMAL SEPARATOR;Po;0;AN;;;;;N;;;;; 066C;ARABIC THOUSANDS SEPARATOR;Po;0;AN;;;;;N;;;;; 066D;ARABIC FIVE POINTED STAR;Po;0;AL;;;;;N;;;;; 0670;ARABIC LETTER SUPERSCRIPT ALEF;Mn;35;NSM;;;;;N;ARABIC ALEF ABOVE;;;; 0671;ARABIC LETTER ALEF WASLA;Lo;0;AL;;;;;N;ARABIC LETTER HAMZAT WASL ON ALEF;;;; 0672;ARABIC LETTER ALEF WITH WAVY HAMZA ABOVE;Lo;0;AL;;;;;N;ARABIC LETTER WAVY HAMZAH ON ALEF;;;; 0673;ARABIC LETTER ALEF WITH WAVY HAMZA BELOW;Lo;0;AL;;;;;N;ARABIC LETTER WAVY HAMZAH UNDER ALEF;;;; 0674;ARABIC LETTER HIGH HAMZA;Lo;0;AL;;;;;N;ARABIC LETTER HIGH HAMZAH;;;; 0675;ARABIC LETTER HIGH HAMZA ALEF;Lo;0;AL; 0627 0674;;;;N;ARABIC LETTER HIGH HAMZAH ALEF;;;; 0676;ARABIC LETTER HIGH HAMZA WAW;Lo;0;AL; 0648 0674;;;;N;ARABIC LETTER HIGH HAMZAH WAW;;;; 0677;ARABIC LETTER U WITH HAMZA ABOVE;Lo;0;AL; 06C7 0674;;;;N;ARABIC LETTER HIGH HAMZAH WAW WITH DAMMAH;;;; 0678;ARABIC LETTER HIGH HAMZA YEH;Lo;0;AL; 064A 0674;;;;N;ARABIC LETTER HIGH HAMZAH YA;;;; 0679;ARABIC LETTER TTEH;Lo;0;AL;;;;;N;ARABIC LETTER TAA WITH SMALL TAH;;;; 067A;ARABIC LETTER TTEHEH;Lo;0;AL;;;;;N;ARABIC LETTER TAA WITH TWO DOTS VERTICAL ABOVE;;;; 067B;ARABIC LETTER BEEH;Lo;0;AL;;;;;N;ARABIC LETTER BAA WITH TWO DOTS VERTICAL BELOW;;;; 067C;ARABIC LETTER TEH WITH RING;Lo;0;AL;;;;;N;ARABIC LETTER TAA WITH RING;;;; 067D;ARABIC LETTER TEH WITH THREE DOTS ABOVE DOWNWARDS;Lo;0;AL;;;;;N;ARABIC LETTER TAA WITH THREE DOTS ABOVE DOWNWARD;;;; 067E;ARABIC LETTER PEH;Lo;0;AL;;;;;N;ARABIC LETTER TAA WITH THREE DOTS BELOW;;;; 067F;ARABIC LETTER TEHEH;Lo;0;AL;;;;;N;ARABIC LETTER TAA WITH FOUR DOTS ABOVE;;;; 0680;ARABIC LETTER BEHEH;Lo;0;AL;;;;;N;ARABIC LETTER BAA WITH FOUR DOTS BELOW;;;; 0681;ARABIC LETTER HAH WITH HAMZA ABOVE;Lo;0;AL;;;;;N;ARABIC LETTER HAMZAH ON HAA;;;; 0682;ARABIC LETTER HAH WITH TWO DOTS VERTICAL ABOVE;Lo;0;AL;;;;;N;ARABIC LETTER HAA WITH TWO DOTS VERTICAL ABOVE;;;; 0683;ARABIC LETTER NYEH;Lo;0;AL;;;;;N;ARABIC LETTER HAA WITH MIDDLE TWO DOTS;;;; 0684;ARABIC LETTER DYEH;Lo;0;AL;;;;;N;ARABIC LETTER HAA WITH MIDDLE TWO DOTS VERTICAL;;;; 0685;ARABIC LETTER HAH WITH THREE DOTS ABOVE;Lo;0;AL;;;;;N;ARABIC LETTER HAA WITH THREE DOTS ABOVE;;;; 0686;ARABIC LETTER TCHEH;Lo;0;AL;;;;;N;ARABIC LETTER HAA WITH MIDDLE THREE DOTS DOWNWARD;;;; 0687;ARABIC LETTER TCHEHEH;Lo;0;AL;;;;;N;ARABIC LETTER HAA WITH MIDDLE FOUR DOTS;;;; 0688;ARABIC LETTER DDAL;Lo;0;AL;;;;;N;ARABIC LETTER DAL WITH SMALL TAH;;;; 0689;ARABIC LETTER DAL WITH RING;Lo;0;AL;;;;;N;;;;; 068A;ARABIC LETTER DAL WITH DOT BELOW;Lo;0;AL;;;;;N;;;;; 068B;ARABIC LETTER DAL WITH DOT BELOW AND SMALL TAH;Lo;0;AL;;;;;N;;;;; 068C;ARABIC LETTER DAHAL;Lo;0;AL;;;;;N;ARABIC LETTER DAL WITH TWO DOTS ABOVE;;;; 068D;ARABIC LETTER DDAHAL;Lo;0;AL;;;;;N;ARABIC LETTER DAL WITH TWO DOTS BELOW;;;; 068E;ARABIC LETTER DUL;Lo;0;AL;;;;;N;ARABIC LETTER DAL WITH THREE DOTS ABOVE;;;; 068F;ARABIC LETTER DAL WITH THREE DOTS ABOVE DOWNWARDS;Lo;0;AL;;;;;N;ARABIC LETTER DAL WITH THREE DOTS ABOVE DOWNWARD;;;; 0690;ARABIC LETTER DAL WITH FOUR DOTS ABOVE;Lo;0;AL;;;;;N;;;;; 0691;ARABIC LETTER RREH;Lo;0;AL;;;;;N;ARABIC LETTER RA WITH SMALL TAH;;;; 0692;ARABIC LETTER REH WITH SMALL V;Lo;0;AL;;;;;N;ARABIC LETTER RA WITH SMALL V;;;; 0693;ARABIC LETTER REH WITH RING;Lo;0;AL;;;;;N;ARABIC LETTER RA WITH RING;;;; 0694;ARABIC LETTER REH WITH DOT BELOW;Lo;0;AL;;;;;N;ARABIC LETTER RA WITH DOT BELOW;;;; 0695;ARABIC LETTER REH WITH SMALL V BELOW;Lo;0;AL;;;;;N;ARABIC LETTER RA WITH SMALL V BELOW;;;; 0696;ARABIC LETTER REH WITH DOT BELOW AND DOT ABOVE;Lo;0;AL;;;;;N;ARABIC LETTER RA WITH DOT BELOW AND DOT ABOVE;;;; 0697;ARABIC LETTER REH WITH TWO DOTS ABOVE;Lo;0;AL;;;;;N;ARABIC LETTER RA WITH TWO DOTS ABOVE;;;; 0698;ARABIC LETTER JEH;Lo;0;AL;;;;;N;ARABIC LETTER RA WITH THREE DOTS ABOVE;;;; 0699;ARABIC LETTER REH WITH FOUR DOTS ABOVE;Lo;0;AL;;;;;N;ARABIC LETTER RA WITH FOUR DOTS ABOVE;;;; 069A;ARABIC LETTER SEEN WITH DOT BELOW AND DOT ABOVE;Lo;0;AL;;;;;N;;;;; 069B;ARABIC LETTER SEEN WITH THREE DOTS BELOW;Lo;0;AL;;;;;N;;;;; 069C;ARABIC LETTER SEEN WITH THREE DOTS BELOW AND THREE DOTS ABOVE;Lo;0;AL;;;;;N;;;;; 069D;ARABIC LETTER SAD WITH TWO DOTS BELOW;Lo;0;AL;;;;;N;;;;; 069E;ARABIC LETTER SAD WITH THREE DOTS ABOVE;Lo;0;AL;;;;;N;;;;; 069F;ARABIC LETTER TAH WITH THREE DOTS ABOVE;Lo;0;AL;;;;;N;;;;; 06A0;ARABIC LETTER AIN WITH THREE DOTS ABOVE;Lo;0;AL;;;;;N;;;;; 06A1;ARABIC LETTER DOTLESS FEH;Lo;0;AL;;;;;N;ARABIC LETTER DOTLESS FA;;;; 06A2;ARABIC LETTER FEH WITH DOT MOVED BELOW;Lo;0;AL;;;;;N;ARABIC LETTER FA WITH DOT MOVED BELOW;;;; 06A3;ARABIC LETTER FEH WITH DOT BELOW;Lo;0;AL;;;;;N;ARABIC LETTER FA WITH DOT BELOW;;;; 06A4;ARABIC LETTER VEH;Lo;0;AL;;;;;N;ARABIC LETTER FA WITH THREE DOTS ABOVE;;;; 06A5;ARABIC LETTER FEH WITH THREE DOTS BELOW;Lo;0;AL;;;;;N;ARABIC LETTER FA WITH THREE DOTS BELOW;;;; 06A6;ARABIC LETTER PEHEH;Lo;0;AL;;;;;N;ARABIC LETTER FA WITH FOUR DOTS ABOVE;;;; 06A7;ARABIC LETTER QAF WITH DOT ABOVE;Lo;0;AL;;;;;N;;;;; 06A8;ARABIC LETTER QAF WITH THREE DOTS ABOVE;Lo;0;AL;;;;;N;;;;; 06A9;ARABIC LETTER KEHEH;Lo;0;AL;;;;;N;ARABIC LETTER OPEN CAF;;;; 06AA;ARABIC LETTER SWASH KAF;Lo;0;AL;;;;;N;ARABIC LETTER SWASH CAF;;;; 06AB;ARABIC LETTER KAF WITH RING;Lo;0;AL;;;;;N;ARABIC LETTER CAF WITH RING;;;; 06AC;ARABIC LETTER KAF WITH DOT ABOVE;Lo;0;AL;;;;;N;ARABIC LETTER CAF WITH DOT ABOVE;;;; 06AD;ARABIC LETTER NG;Lo;0;AL;;;;;N;ARABIC LETTER CAF WITH THREE DOTS ABOVE;;;; 06AE;ARABIC LETTER KAF WITH THREE DOTS BELOW;Lo;0;AL;;;;;N;ARABIC LETTER CAF WITH THREE DOTS BELOW;;;; 06AF;ARABIC LETTER GAF;Lo;0;AL;;;;;N;;*;;; 06B0;ARABIC LETTER GAF WITH RING;Lo;0;AL;;;;;N;;;;; 06B1;ARABIC LETTER NGOEH;Lo;0;AL;;;;;N;ARABIC LETTER GAF WITH TWO DOTS ABOVE;;;; 06B2;ARABIC LETTER GAF WITH TWO DOTS BELOW;Lo;0;AL;;;;;N;;;;; 06B3;ARABIC LETTER GUEH;Lo;0;AL;;;;;N;ARABIC LETTER GAF WITH TWO DOTS VERTICAL BELOW;;;; 06B4;ARABIC LETTER GAF WITH THREE DOTS ABOVE;Lo;0;AL;;;;;N;;;;; 06B5;ARABIC LETTER LAM WITH SMALL V;Lo;0;AL;;;;;N;;;;; 06B6;ARABIC LETTER LAM WITH DOT ABOVE;Lo;0;AL;;;;;N;;;;; 06B7;ARABIC LETTER LAM WITH THREE DOTS ABOVE;Lo;0;AL;;;;;N;;;;; 06B8;ARABIC LETTER LAM WITH THREE DOTS BELOW;Lo;0;AL;;;;;N;;;;; 06B9;ARABIC LETTER NOON WITH DOT BELOW;Lo;0;AL;;;;;N;;;;; 06BA;ARABIC LETTER NOON GHUNNA;Lo;0;AL;;;;;N;ARABIC LETTER DOTLESS NOON;;;; 06BB;ARABIC LETTER RNOON;Lo;0;AL;;;;;N;ARABIC LETTER DOTLESS NOON WITH SMALL TAH;;;; 06BC;ARABIC LETTER NOON WITH RING;Lo;0;AL;;;;;N;;;;; 06BD;ARABIC LETTER NOON WITH THREE DOTS ABOVE;Lo;0;AL;;;;;N;;;;; 06BE;ARABIC LETTER HEH DOACHASHMEE;Lo;0;AL;;;;;N;ARABIC LETTER KNOTTED HA;;;; 06BF;ARABIC LETTER TCHEH WITH DOT ABOVE;Lo;0;AL;;;;;N;;;;; 06C0;ARABIC LETTER HEH WITH YEH ABOVE;Lo;0;AL;06D5 0654;;;;N;ARABIC LETTER HAMZAH ON HA;;;; 06C1;ARABIC LETTER HEH GOAL;Lo;0;AL;;;;;N;ARABIC LETTER HA GOAL;;;; 06C2;ARABIC LETTER HEH GOAL WITH HAMZA ABOVE;Lo;0;AL;06C1 0654;;;;N;ARABIC LETTER HAMZAH ON HA GOAL;;;; 06C3;ARABIC LETTER TEH MARBUTA GOAL;Lo;0;AL;;;;;N;ARABIC LETTER TAA MARBUTAH GOAL;;;; 06C4;ARABIC LETTER WAW WITH RING;Lo;0;AL;;;;;N;;;;; 06C5;ARABIC LETTER KIRGHIZ OE;Lo;0;AL;;;;;N;ARABIC LETTER WAW WITH BAR;;;; 06C6;ARABIC LETTER OE;Lo;0;AL;;;;;N;ARABIC LETTER WAW WITH SMALL V;;;; 06C7;ARABIC LETTER U;Lo;0;AL;;;;;N;ARABIC LETTER WAW WITH DAMMAH;;;; 06C8;ARABIC LETTER YU;Lo;0;AL;;;;;N;ARABIC LETTER WAW WITH ALEF ABOVE;;;; 06C9;ARABIC LETTER KIRGHIZ YU;Lo;0;AL;;;;;N;ARABIC LETTER WAW WITH INVERTED SMALL V;;;; 06CA;ARABIC LETTER WAW WITH TWO DOTS ABOVE;Lo;0;AL;;;;;N;;;;; 06CB;ARABIC LETTER VE;Lo;0;AL;;;;;N;ARABIC LETTER WAW WITH THREE DOTS ABOVE;;;; 06CC;ARABIC LETTER FARSI YEH;Lo;0;AL;;;;;N;ARABIC LETTER DOTLESS YA;;;; 06CD;ARABIC LETTER YEH WITH TAIL;Lo;0;AL;;;;;N;ARABIC LETTER YA WITH TAIL;;;; 06CE;ARABIC LETTER YEH WITH SMALL V;Lo;0;AL;;;;;N;ARABIC LETTER YA WITH SMALL V;;;; 06CF;ARABIC LETTER WAW WITH DOT ABOVE;Lo;0;AL;;;;;N;;;;; 06D0;ARABIC LETTER E;Lo;0;AL;;;;;N;ARABIC LETTER YA WITH TWO DOTS VERTICAL BELOW;*;;; 06D1;ARABIC LETTER YEH WITH THREE DOTS BELOW;Lo;0;AL;;;;;N;ARABIC LETTER YA WITH THREE DOTS BELOW;;;; 06D2;ARABIC LETTER YEH BARREE;Lo;0;AL;;;;;N;ARABIC LETTER YA BARREE;;;; 06D3;ARABIC LETTER YEH BARREE WITH HAMZA ABOVE;Lo;0;AL;06D2 0654;;;;N;ARABIC LETTER HAMZAH ON YA BARREE;;;; 06D4;ARABIC FULL STOP;Po;0;AL;;;;;N;ARABIC PERIOD;;;; 06D5;ARABIC LETTER AE;Lo;0;AL;;;;;N;;;;; 06D6;ARABIC SMALL HIGH LIGATURE SAD WITH LAM WITH ALEF MAKSURA;Mn;230;NSM;;;;;N;;;;; 06D7;ARABIC SMALL HIGH LIGATURE QAF WITH LAM WITH ALEF MAKSURA;Mn;230;NSM;;;;;N;;;;; 06D8;ARABIC SMALL HIGH MEEM INITIAL FORM;Mn;230;NSM;;;;;N;;;;; 06D9;ARABIC SMALL HIGH LAM ALEF;Mn;230;NSM;;;;;N;;;;; 06DA;ARABIC SMALL HIGH JEEM;Mn;230;NSM;;;;;N;;;;; 06DB;ARABIC SMALL HIGH THREE DOTS;Mn;230;NSM;;;;;N;;;;; 06DC;ARABIC SMALL HIGH SEEN;Mn;230;NSM;;;;;N;;;;; 06DD;ARABIC END OF AYAH;Me;0;NSM;;;;;N;;;;; 06DE;ARABIC START OF RUB EL HIZB;Me;0;NSM;;;;;N;;;;; 06DF;ARABIC SMALL HIGH ROUNDED ZERO;Mn;230;NSM;;;;;N;;;;; 06E0;ARABIC SMALL HIGH UPRIGHT RECTANGULAR ZERO;Mn;230;NSM;;;;;N;;;;; 06E1;ARABIC SMALL HIGH DOTLESS HEAD OF KHAH;Mn;230;NSM;;;;;N;;;;; 06E2;ARABIC SMALL HIGH MEEM ISOLATED FORM;Mn;230;NSM;;;;;N;;;;; 06E3;ARABIC SMALL LOW SEEN;Mn;220;NSM;;;;;N;;;;; 06E4;ARABIC SMALL HIGH MADDA;Mn;230;NSM;;;;;N;;;;; 06E5;ARABIC SMALL WAW;Lm;0;AL;;;;;N;;;;; 06E6;ARABIC SMALL YEH;Lm;0;AL;;;;;N;;;;; 06E7;ARABIC SMALL HIGH YEH;Mn;230;NSM;;;;;N;;;;; 06E8;ARABIC SMALL HIGH NOON;Mn;230;NSM;;;;;N;;;;; 06E9;ARABIC PLACE OF SAJDAH;So;0;ON;;;;;N;;;;; 06EA;ARABIC EMPTY CENTRE LOW STOP;Mn;220;NSM;;;;;N;;;;; 06EB;ARABIC EMPTY CENTRE HIGH STOP;Mn;230;NSM;;;;;N;;;;; 06EC;ARABIC ROUNDED HIGH STOP WITH FILLED CENTRE;Mn;230;NSM;;;;;N;;;;; 06ED;ARABIC SMALL LOW MEEM;Mn;220;NSM;;;;;N;;;;; 06F0;EXTENDED ARABIC-INDIC DIGIT ZERO;Nd;0;EN;;0;0;0;N;EASTERN ARABIC-INDIC DIGIT ZERO;;;; 06F1;EXTENDED ARABIC-INDIC DIGIT ONE;Nd;0;EN;;1;1;1;N;EASTERN ARABIC-INDIC DIGIT ONE;;;; 06F2;EXTENDED ARABIC-INDIC DIGIT TWO;Nd;0;EN;;2;2;2;N;EASTERN ARABIC-INDIC DIGIT TWO;;;; 06F3;EXTENDED ARABIC-INDIC DIGIT THREE;Nd;0;EN;;3;3;3;N;EASTERN ARABIC-INDIC DIGIT THREE;;;; 06F4;EXTENDED ARABIC-INDIC DIGIT FOUR;Nd;0;EN;;4;4;4;N;EASTERN ARABIC-INDIC DIGIT FOUR;;;; 06F5;EXTENDED ARABIC-INDIC DIGIT FIVE;Nd;0;EN;;5;5;5;N;EASTERN ARABIC-INDIC DIGIT FIVE;;;; 06F6;EXTENDED ARABIC-INDIC DIGIT SIX;Nd;0;EN;;6;6;6;N;EASTERN ARABIC-INDIC DIGIT SIX;;;; 06F7;EXTENDED ARABIC-INDIC DIGIT SEVEN;Nd;0;EN;;7;7;7;N;EASTERN ARABIC-INDIC DIGIT SEVEN;;;; 06F8;EXTENDED ARABIC-INDIC DIGIT EIGHT;Nd;0;EN;;8;8;8;N;EASTERN ARABIC-INDIC DIGIT EIGHT;;;; 06F9;EXTENDED ARABIC-INDIC DIGIT NINE;Nd;0;EN;;9;9;9;N;EASTERN ARABIC-INDIC DIGIT NINE;;;; 06FA;ARABIC LETTER SHEEN WITH DOT BELOW;Lo;0;AL;;;;;N;;;;; 06FB;ARABIC LETTER DAD WITH DOT BELOW;Lo;0;AL;;;;;N;;;;; 06FC;ARABIC LETTER GHAIN WITH DOT BELOW;Lo;0;AL;;;;;N;;;;; 06FD;ARABIC SIGN SINDHI AMPERSAND;So;0;AL;;;;;N;;;;; 06FE;ARABIC SIGN SINDHI POSTPOSITION MEN;So;0;AL;;;;;N;;;;; 0700;SYRIAC END OF PARAGRAPH;Po;0;AL;;;;;N;;;;; 0701;SYRIAC SUPRALINEAR FULL STOP;Po;0;AL;;;;;N;;;;; 0702;SYRIAC SUBLINEAR FULL STOP;Po;0;AL;;;;;N;;;;; 0703;SYRIAC SUPRALINEAR COLON;Po;0;AL;;;;;N;;;;; 0704;SYRIAC SUBLINEAR COLON;Po;0;AL;;;;;N;;;;; 0705;SYRIAC HORIZONTAL COLON;Po;0;AL;;;;;N;;;;; 0706;SYRIAC COLON SKEWED LEFT;Po;0;AL;;;;;N;;;;; 0707;SYRIAC COLON SKEWED RIGHT;Po;0;AL;;;;;N;;;;; 0708;SYRIAC SUPRALINEAR COLON SKEWED LEFT;Po;0;AL;;;;;N;;;;; 0709;SYRIAC SUBLINEAR COLON SKEWED RIGHT;Po;0;AL;;;;;N;;;;; 070A;SYRIAC CONTRACTION;Po;0;AL;;;;;N;;;;; 070B;SYRIAC HARKLEAN OBELUS;Po;0;AL;;;;;N;;;;; 070C;SYRIAC HARKLEAN METOBELUS;Po;0;AL;;;;;N;;;;; 070D;SYRIAC HARKLEAN ASTERISCUS;Po;0;AL;;;;;N;;;;; 070F;SYRIAC ABBREVIATION MARK;Cf;0;BN;;;;;N;;;;; 0710;SYRIAC LETTER ALAPH;Lo;0;AL;;;;;N;;;;; 0711;SYRIAC LETTER SUPERSCRIPT ALAPH;Mn;36;NSM;;;;;N;;;;; 0712;SYRIAC LETTER BETH;Lo;0;AL;;;;;N;;;;; 0713;SYRIAC LETTER GAMAL;Lo;0;AL;;;;;N;;;;; 0714;SYRIAC LETTER GAMAL GARSHUNI;Lo;0;AL;;;;;N;;;;; 0715;SYRIAC LETTER DALATH;Lo;0;AL;;;;;N;;;;; 0716;SYRIAC LETTER DOTLESS DALATH RISH;Lo;0;AL;;;;;N;;;;; 0717;SYRIAC LETTER HE;Lo;0;AL;;;;;N;;;;; 0718;SYRIAC LETTER WAW;Lo;0;AL;;;;;N;;;;; 0719;SYRIAC LETTER ZAIN;Lo;0;AL;;;;;N;;;;; 071A;SYRIAC LETTER HETH;Lo;0;AL;;;;;N;;;;; 071B;SYRIAC LETTER TETH;Lo;0;AL;;;;;N;;;;; 071C;SYRIAC LETTER TETH GARSHUNI;Lo;0;AL;;;;;N;;;;; 071D;SYRIAC LETTER YUDH;Lo;0;AL;;;;;N;;;;; 071E;SYRIAC LETTER YUDH HE;Lo;0;AL;;;;;N;;;;; 071F;SYRIAC LETTER KAPH;Lo;0;AL;;;;;N;;;;; 0720;SYRIAC LETTER LAMADH;Lo;0;AL;;;;;N;;;;; 0721;SYRIAC LETTER MIM;Lo;0;AL;;;;;N;;;;; 0722;SYRIAC LETTER NUN;Lo;0;AL;;;;;N;;;;; 0723;SYRIAC LETTER SEMKATH;Lo;0;AL;;;;;N;;;;; 0724;SYRIAC LETTER FINAL SEMKATH;Lo;0;AL;;;;;N;;;;; 0725;SYRIAC LETTER E;Lo;0;AL;;;;;N;;;;; 0726;SYRIAC LETTER PE;Lo;0;AL;;;;;N;;;;; 0727;SYRIAC LETTER REVERSED PE;Lo;0;AL;;;;;N;;;;; 0728;SYRIAC LETTER SADHE;Lo;0;AL;;;;;N;;;;; 0729;SYRIAC LETTER QAPH;Lo;0;AL;;;;;N;;;;; 072A;SYRIAC LETTER RISH;Lo;0;AL;;;;;N;;;;; 072B;SYRIAC LETTER SHIN;Lo;0;AL;;;;;N;;;;; 072C;SYRIAC LETTER TAW;Lo;0;AL;;;;;N;;;;; 0730;SYRIAC PTHAHA ABOVE;Mn;230;NSM;;;;;N;;;;; 0731;SYRIAC PTHAHA BELOW;Mn;220;NSM;;;;;N;;;;; 0732;SYRIAC PTHAHA DOTTED;Mn;230;NSM;;;;;N;;;;; 0733;SYRIAC ZQAPHA ABOVE;Mn;230;NSM;;;;;N;;;;; 0734;SYRIAC ZQAPHA BELOW;Mn;220;NSM;;;;;N;;;;; 0735;SYRIAC ZQAPHA DOTTED;Mn;230;NSM;;;;;N;;;;; 0736;SYRIAC RBASA ABOVE;Mn;230;NSM;;;;;N;;;;; 0737;SYRIAC RBASA BELOW;Mn;220;NSM;;;;;N;;;;; 0738;SYRIAC DOTTED ZLAMA HORIZONTAL;Mn;220;NSM;;;;;N;;;;; 0739;SYRIAC DOTTED ZLAMA ANGULAR;Mn;220;NSM;;;;;N;;;;; 073A;SYRIAC HBASA ABOVE;Mn;230;NSM;;;;;N;;;;; 073B;SYRIAC HBASA BELOW;Mn;220;NSM;;;;;N;;;;; 073C;SYRIAC HBASA-ESASA DOTTED;Mn;220;NSM;;;;;N;;;;; 073D;SYRIAC ESASA ABOVE;Mn;230;NSM;;;;;N;;;;; 073E;SYRIAC ESASA BELOW;Mn;220;NSM;;;;;N;;;;; 073F;SYRIAC RWAHA;Mn;230;NSM;;;;;N;;;;; 0740;SYRIAC FEMININE DOT;Mn;230;NSM;;;;;N;;;;; 0741;SYRIAC QUSHSHAYA;Mn;230;NSM;;;;;N;;;;; 0742;SYRIAC RUKKAKHA;Mn;220;NSM;;;;;N;;;;; 0743;SYRIAC TWO VERTICAL DOTS ABOVE;Mn;230;NSM;;;;;N;;;;; 0744;SYRIAC TWO VERTICAL DOTS BELOW;Mn;220;NSM;;;;;N;;;;; 0745;SYRIAC THREE DOTS ABOVE;Mn;230;NSM;;;;;N;;;;; 0746;SYRIAC THREE DOTS BELOW;Mn;220;NSM;;;;;N;;;;; 0747;SYRIAC OBLIQUE LINE ABOVE;Mn;230;NSM;;;;;N;;;;; 0748;SYRIAC OBLIQUE LINE BELOW;Mn;220;NSM;;;;;N;;;;; 0749;SYRIAC MUSIC;Mn;230;NSM;;;;;N;;;;; 074A;SYRIAC BARREKH;Mn;230;NSM;;;;;N;;;;; 0780;THAANA LETTER HAA;Lo;0;AL;;;;;N;;;;; 0781;THAANA LETTER SHAVIYANI;Lo;0;AL;;;;;N;;;;; 0782;THAANA LETTER NOONU;Lo;0;AL;;;;;N;;;;; 0783;THAANA LETTER RAA;Lo;0;AL;;;;;N;;;;; 0784;THAANA LETTER BAA;Lo;0;AL;;;;;N;;;;; 0785;THAANA LETTER LHAVIYANI;Lo;0;AL;;;;;N;;;;; 0786;THAANA LETTER KAAFU;Lo;0;AL;;;;;N;;;;; 0787;THAANA LETTER ALIFU;Lo;0;AL;;;;;N;;;;; 0788;THAANA LETTER VAAVU;Lo;0;AL;;;;;N;;;;; 0789;THAANA LETTER MEEMU;Lo;0;AL;;;;;N;;;;; 078A;THAANA LETTER FAAFU;Lo;0;AL;;;;;N;;;;; 078B;THAANA LETTER DHAALU;Lo;0;AL;;;;;N;;;;; 078C;THAANA LETTER THAA;Lo;0;AL;;;;;N;;;;; 078D;THAANA LETTER LAAMU;Lo;0;AL;;;;;N;;;;; 078E;THAANA LETTER GAAFU;Lo;0;AL;;;;;N;;;;; 078F;THAANA LETTER GNAVIYANI;Lo;0;AL;;;;;N;;;;; 0790;THAANA LETTER SEENU;Lo;0;AL;;;;;N;;;;; 0791;THAANA LETTER DAVIYANI;Lo;0;AL;;;;;N;;;;; 0792;THAANA LETTER ZAVIYANI;Lo;0;AL;;;;;N;;;;; 0793;THAANA LETTER TAVIYANI;Lo;0;AL;;;;;N;;;;; 0794;THAANA LETTER YAA;Lo;0;AL;;;;;N;;;;; 0795;THAANA LETTER PAVIYANI;Lo;0;AL;;;;;N;;;;; 0796;THAANA LETTER JAVIYANI;Lo;0;AL;;;;;N;;;;; 0797;THAANA LETTER CHAVIYANI;Lo;0;AL;;;;;N;;;;; 0798;THAANA LETTER TTAA;Lo;0;AL;;;;;N;;;;; 0799;THAANA LETTER HHAA;Lo;0;AL;;;;;N;;;;; 079A;THAANA LETTER KHAA;Lo;0;AL;;;;;N;;;;; 079B;THAANA LETTER THAALU;Lo;0;AL;;;;;N;;;;; 079C;THAANA LETTER ZAA;Lo;0;AL;;;;;N;;;;; 079D;THAANA LETTER SHEENU;Lo;0;AL;;;;;N;;;;; 079E;THAANA LETTER SAADHU;Lo;0;AL;;;;;N;;;;; 079F;THAANA LETTER DAADHU;Lo;0;AL;;;;;N;;;;; 07A0;THAANA LETTER TO;Lo;0;AL;;;;;N;;;;; 07A1;THAANA LETTER ZO;Lo;0;AL;;;;;N;;;;; 07A2;THAANA LETTER AINU;Lo;0;AL;;;;;N;;;;; 07A3;THAANA LETTER GHAINU;Lo;0;AL;;;;;N;;;;; 07A4;THAANA LETTER QAAFU;Lo;0;AL;;;;;N;;;;; 07A5;THAANA LETTER WAAVU;Lo;0;AL;;;;;N;;;;; 07A6;THAANA ABAFILI;Mn;0;NSM;;;;;N;;;;; 07A7;THAANA AABAAFILI;Mn;0;NSM;;;;;N;;;;; 07A8;THAANA IBIFILI;Mn;0;NSM;;;;;N;;;;; 07A9;THAANA EEBEEFILI;Mn;0;NSM;;;;;N;;;;; 07AA;THAANA UBUFILI;Mn;0;NSM;;;;;N;;;;; 07AB;THAANA OOBOOFILI;Mn;0;NSM;;;;;N;;;;; 07AC;THAANA EBEFILI;Mn;0;NSM;;;;;N;;;;; 07AD;THAANA EYBEYFILI;Mn;0;NSM;;;;;N;;;;; 07AE;THAANA OBOFILI;Mn;0;NSM;;;;;N;;;;; 07AF;THAANA OABOAFILI;Mn;0;NSM;;;;;N;;;;; 07B0;THAANA SUKUN;Mn;0;NSM;;;;;N;;;;; 0901;DEVANAGARI SIGN CANDRABINDU;Mn;0;NSM;;;;;N;;;;; 0902;DEVANAGARI SIGN ANUSVARA;Mn;0;NSM;;;;;N;;;;; 0903;DEVANAGARI SIGN VISARGA;Mc;0;L;;;;;N;;;;; 0905;DEVANAGARI LETTER A;Lo;0;L;;;;;N;;;;; 0906;DEVANAGARI LETTER AA;Lo;0;L;;;;;N;;;;; 0907;DEVANAGARI LETTER I;Lo;0;L;;;;;N;;;;; 0908;DEVANAGARI LETTER II;Lo;0;L;;;;;N;;;;; 0909;DEVANAGARI LETTER U;Lo;0;L;;;;;N;;;;; 090A;DEVANAGARI LETTER UU;Lo;0;L;;;;;N;;;;; 090B;DEVANAGARI LETTER VOCALIC R;Lo;0;L;;;;;N;;;;; 090C;DEVANAGARI LETTER VOCALIC L;Lo;0;L;;;;;N;;;;; 090D;DEVANAGARI LETTER CANDRA E;Lo;0;L;;;;;N;;;;; 090E;DEVANAGARI LETTER SHORT E;Lo;0;L;;;;;N;;;;; 090F;DEVANAGARI LETTER E;Lo;0;L;;;;;N;;;;; 0910;DEVANAGARI LETTER AI;Lo;0;L;;;;;N;;;;; 0911;DEVANAGARI LETTER CANDRA O;Lo;0;L;;;;;N;;;;; 0912;DEVANAGARI LETTER SHORT O;Lo;0;L;;;;;N;;;;; 0913;DEVANAGARI LETTER O;Lo;0;L;;;;;N;;;;; 0914;DEVANAGARI LETTER AU;Lo;0;L;;;;;N;;;;; 0915;DEVANAGARI LETTER KA;Lo;0;L;;;;;N;;;;; 0916;DEVANAGARI LETTER KHA;Lo;0;L;;;;;N;;;;; 0917;DEVANAGARI LETTER GA;Lo;0;L;;;;;N;;;;; 0918;DEVANAGARI LETTER GHA;Lo;0;L;;;;;N;;;;; 0919;DEVANAGARI LETTER NGA;Lo;0;L;;;;;N;;;;; 091A;DEVANAGARI LETTER CA;Lo;0;L;;;;;N;;;;; 091B;DEVANAGARI LETTER CHA;Lo;0;L;;;;;N;;;;; 091C;DEVANAGARI LETTER JA;Lo;0;L;;;;;N;;;;; 091D;DEVANAGARI LETTER JHA;Lo;0;L;;;;;N;;;;; 091E;DEVANAGARI LETTER NYA;Lo;0;L;;;;;N;;;;; 091F;DEVANAGARI LETTER TTA;Lo;0;L;;;;;N;;;;; 0920;DEVANAGARI LETTER TTHA;Lo;0;L;;;;;N;;;;; 0921;DEVANAGARI LETTER DDA;Lo;0;L;;;;;N;;;;; 0922;DEVANAGARI LETTER DDHA;Lo;0;L;;;;;N;;;;; 0923;DEVANAGARI LETTER NNA;Lo;0;L;;;;;N;;;;; 0924;DEVANAGARI LETTER TA;Lo;0;L;;;;;N;;;;; 0925;DEVANAGARI LETTER THA;Lo;0;L;;;;;N;;;;; 0926;DEVANAGARI LETTER DA;Lo;0;L;;;;;N;;;;; 0927;DEVANAGARI LETTER DHA;Lo;0;L;;;;;N;;;;; 0928;DEVANAGARI LETTER NA;Lo;0;L;;;;;N;;;;; 0929;DEVANAGARI LETTER NNNA;Lo;0;L;0928 093C;;;;N;;;;; 092A;DEVANAGARI LETTER PA;Lo;0;L;;;;;N;;;;; 092B;DEVANAGARI LETTER PHA;Lo;0;L;;;;;N;;;;; 092C;DEVANAGARI LETTER BA;Lo;0;L;;;;;N;;;;; 092D;DEVANAGARI LETTER BHA;Lo;0;L;;;;;N;;;;; 092E;DEVANAGARI LETTER MA;Lo;0;L;;;;;N;;;;; 092F;DEVANAGARI LETTER YA;Lo;0;L;;;;;N;;;;; 0930;DEVANAGARI LETTER RA;Lo;0;L;;;;;N;;;;; 0931;DEVANAGARI LETTER RRA;Lo;0;L;0930 093C;;;;N;;;;; 0932;DEVANAGARI LETTER LA;Lo;0;L;;;;;N;;;;; 0933;DEVANAGARI LETTER LLA;Lo;0;L;;;;;N;;;;; 0934;DEVANAGARI LETTER LLLA;Lo;0;L;0933 093C;;;;N;;;;; 0935;DEVANAGARI LETTER VA;Lo;0;L;;;;;N;;;;; 0936;DEVANAGARI LETTER SHA;Lo;0;L;;;;;N;;;;; 0937;DEVANAGARI LETTER SSA;Lo;0;L;;;;;N;;;;; 0938;DEVANAGARI LETTER SA;Lo;0;L;;;;;N;;;;; 0939;DEVANAGARI LETTER HA;Lo;0;L;;;;;N;;;;; 093C;DEVANAGARI SIGN NUKTA;Mn;7;NSM;;;;;N;;;;; 093D;DEVANAGARI SIGN AVAGRAHA;Lo;0;L;;;;;N;;;;; 093E;DEVANAGARI VOWEL SIGN AA;Mc;0;L;;;;;N;;;;; 093F;DEVANAGARI VOWEL SIGN I;Mc;0;L;;;;;N;;;;; 0940;DEVANAGARI VOWEL SIGN II;Mc;0;L;;;;;N;;;;; 0941;DEVANAGARI VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;; 0942;DEVANAGARI VOWEL SIGN UU;Mn;0;NSM;;;;;N;;;;; 0943;DEVANAGARI VOWEL SIGN VOCALIC R;Mn;0;NSM;;;;;N;;;;; 0944;DEVANAGARI VOWEL SIGN VOCALIC RR;Mn;0;NSM;;;;;N;;;;; 0945;DEVANAGARI VOWEL SIGN CANDRA E;Mn;0;NSM;;;;;N;;;;; 0946;DEVANAGARI VOWEL SIGN SHORT E;Mn;0;NSM;;;;;N;;;;; 0947;DEVANAGARI VOWEL SIGN E;Mn;0;NSM;;;;;N;;;;; 0948;DEVANAGARI VOWEL SIGN AI;Mn;0;NSM;;;;;N;;;;; 0949;DEVANAGARI VOWEL SIGN CANDRA O;Mc;0;L;;;;;N;;;;; 094A;DEVANAGARI VOWEL SIGN SHORT O;Mc;0;L;;;;;N;;;;; 094B;DEVANAGARI VOWEL SIGN O;Mc;0;L;;;;;N;;;;; 094C;DEVANAGARI VOWEL SIGN AU;Mc;0;L;;;;;N;;;;; 094D;DEVANAGARI SIGN VIRAMA;Mn;9;NSM;;;;;N;;;;; 0950;DEVANAGARI OM;Lo;0;L;;;;;N;;;;; 0951;DEVANAGARI STRESS SIGN UDATTA;Mn;230;NSM;;;;;N;;;;; 0952;DEVANAGARI STRESS SIGN ANUDATTA;Mn;220;NSM;;;;;N;;;;; 0953;DEVANAGARI GRAVE ACCENT;Mn;230;NSM;;;;;N;;;;; 0954;DEVANAGARI ACUTE ACCENT;Mn;230;NSM;;;;;N;;;;; 0958;DEVANAGARI LETTER QA;Lo;0;L;0915 093C;;;;N;;;;; 0959;DEVANAGARI LETTER KHHA;Lo;0;L;0916 093C;;;;N;;;;; 095A;DEVANAGARI LETTER GHHA;Lo;0;L;0917 093C;;;;N;;;;; 095B;DEVANAGARI LETTER ZA;Lo;0;L;091C 093C;;;;N;;;;; 095C;DEVANAGARI LETTER DDDHA;Lo;0;L;0921 093C;;;;N;;;;; 095D;DEVANAGARI LETTER RHA;Lo;0;L;0922 093C;;;;N;;;;; 095E;DEVANAGARI LETTER FA;Lo;0;L;092B 093C;;;;N;;;;; 095F;DEVANAGARI LETTER YYA;Lo;0;L;092F 093C;;;;N;;;;; 0960;DEVANAGARI LETTER VOCALIC RR;Lo;0;L;;;;;N;;;;; 0961;DEVANAGARI LETTER VOCALIC LL;Lo;0;L;;;;;N;;;;; 0962;DEVANAGARI VOWEL SIGN VOCALIC L;Mn;0;NSM;;;;;N;;;;; 0963;DEVANAGARI VOWEL SIGN VOCALIC LL;Mn;0;NSM;;;;;N;;;;; 0964;DEVANAGARI DANDA;Po;0;L;;;;;N;;;;; 0965;DEVANAGARI DOUBLE DANDA;Po;0;L;;;;;N;;;;; 0966;DEVANAGARI DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;; 0967;DEVANAGARI DIGIT ONE;Nd;0;L;;1;1;1;N;;;;; 0968;DEVANAGARI DIGIT TWO;Nd;0;L;;2;2;2;N;;;;; 0969;DEVANAGARI DIGIT THREE;Nd;0;L;;3;3;3;N;;;;; 096A;DEVANAGARI DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;; 096B;DEVANAGARI DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;; 096C;DEVANAGARI DIGIT SIX;Nd;0;L;;6;6;6;N;;;;; 096D;DEVANAGARI DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;; 096E;DEVANAGARI DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;; 096F;DEVANAGARI DIGIT NINE;Nd;0;L;;9;9;9;N;;;;; 0970;DEVANAGARI ABBREVIATION SIGN;Po;0;L;;;;;N;;;;; 0981;BENGALI SIGN CANDRABINDU;Mn;0;NSM;;;;;N;;;;; 0982;BENGALI SIGN ANUSVARA;Mc;0;L;;;;;N;;;;; 0983;BENGALI SIGN VISARGA;Mc;0;L;;;;;N;;;;; 0985;BENGALI LETTER A;Lo;0;L;;;;;N;;;;; 0986;BENGALI LETTER AA;Lo;0;L;;;;;N;;;;; 0987;BENGALI LETTER I;Lo;0;L;;;;;N;;;;; 0988;BENGALI LETTER II;Lo;0;L;;;;;N;;;;; 0989;BENGALI LETTER U;Lo;0;L;;;;;N;;;;; 098A;BENGALI LETTER UU;Lo;0;L;;;;;N;;;;; 098B;BENGALI LETTER VOCALIC R;Lo;0;L;;;;;N;;;;; 098C;BENGALI LETTER VOCALIC L;Lo;0;L;;;;;N;;;;; 098F;BENGALI LETTER E;Lo;0;L;;;;;N;;;;; 0990;BENGALI LETTER AI;Lo;0;L;;;;;N;;;;; 0993;BENGALI LETTER O;Lo;0;L;;;;;N;;;;; 0994;BENGALI LETTER AU;Lo;0;L;;;;;N;;;;; 0995;BENGALI LETTER KA;Lo;0;L;;;;;N;;;;; 0996;BENGALI LETTER KHA;Lo;0;L;;;;;N;;;;; 0997;BENGALI LETTER GA;Lo;0;L;;;;;N;;;;; 0998;BENGALI LETTER GHA;Lo;0;L;;;;;N;;;;; 0999;BENGALI LETTER NGA;Lo;0;L;;;;;N;;;;; 099A;BENGALI LETTER CA;Lo;0;L;;;;;N;;;;; 099B;BENGALI LETTER CHA;Lo;0;L;;;;;N;;;;; 099C;BENGALI LETTER JA;Lo;0;L;;;;;N;;;;; 099D;BENGALI LETTER JHA;Lo;0;L;;;;;N;;;;; 099E;BENGALI LETTER NYA;Lo;0;L;;;;;N;;;;; 099F;BENGALI LETTER TTA;Lo;0;L;;;;;N;;;;; 09A0;BENGALI LETTER TTHA;Lo;0;L;;;;;N;;;;; 09A1;BENGALI LETTER DDA;Lo;0;L;;;;;N;;;;; 09A2;BENGALI LETTER DDHA;Lo;0;L;;;;;N;;;;; 09A3;BENGALI LETTER NNA;Lo;0;L;;;;;N;;;;; 09A4;BENGALI LETTER TA;Lo;0;L;;;;;N;;;;; 09A5;BENGALI LETTER THA;Lo;0;L;;;;;N;;;;; 09A6;BENGALI LETTER DA;Lo;0;L;;;;;N;;;;; 09A7;BENGALI LETTER DHA;Lo;0;L;;;;;N;;;;; 09A8;BENGALI LETTER NA;Lo;0;L;;;;;N;;;;; 09AA;BENGALI LETTER PA;Lo;0;L;;;;;N;;;;; 09AB;BENGALI LETTER PHA;Lo;0;L;;;;;N;;;;; 09AC;BENGALI LETTER BA;Lo;0;L;;;;;N;;;;; 09AD;BENGALI LETTER BHA;Lo;0;L;;;;;N;;;;; 09AE;BENGALI LETTER MA;Lo;0;L;;;;;N;;;;; 09AF;BENGALI LETTER YA;Lo;0;L;;;;;N;;;;; 09B0;BENGALI LETTER RA;Lo;0;L;;;;;N;;;;; 09B2;BENGALI LETTER LA;Lo;0;L;;;;;N;;;;; 09B6;BENGALI LETTER SHA;Lo;0;L;;;;;N;;;;; 09B7;BENGALI LETTER SSA;Lo;0;L;;;;;N;;;;; 09B8;BENGALI LETTER SA;Lo;0;L;;;;;N;;;;; 09B9;BENGALI LETTER HA;Lo;0;L;;;;;N;;;;; 09BC;BENGALI SIGN NUKTA;Mn;7;NSM;;;;;N;;;;; 09BE;BENGALI VOWEL SIGN AA;Mc;0;L;;;;;N;;;;; 09BF;BENGALI VOWEL SIGN I;Mc;0;L;;;;;N;;;;; 09C0;BENGALI VOWEL SIGN II;Mc;0;L;;;;;N;;;;; 09C1;BENGALI VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;; 09C2;BENGALI VOWEL SIGN UU;Mn;0;NSM;;;;;N;;;;; 09C3;BENGALI VOWEL SIGN VOCALIC R;Mn;0;NSM;;;;;N;;;;; 09C4;BENGALI VOWEL SIGN VOCALIC RR;Mn;0;NSM;;;;;N;;;;; 09C7;BENGALI VOWEL SIGN E;Mc;0;L;;;;;N;;;;; 09C8;BENGALI VOWEL SIGN AI;Mc;0;L;;;;;N;;;;; 09CB;BENGALI VOWEL SIGN O;Mc;0;L;09C7 09BE;;;;N;;;;; 09CC;BENGALI VOWEL SIGN AU;Mc;0;L;09C7 09D7;;;;N;;;;; 09CD;BENGALI SIGN VIRAMA;Mn;9;NSM;;;;;N;;;;; 09D7;BENGALI AU LENGTH MARK;Mc;0;L;;;;;N;;;;; 09DC;BENGALI LETTER RRA;Lo;0;L;09A1 09BC;;;;N;;;;; 09DD;BENGALI LETTER RHA;Lo;0;L;09A2 09BC;;;;N;;;;; 09DF;BENGALI LETTER YYA;Lo;0;L;09AF 09BC;;;;N;;;;; 09E0;BENGALI LETTER VOCALIC RR;Lo;0;L;;;;;N;;;;; 09E1;BENGALI LETTER VOCALIC LL;Lo;0;L;;;;;N;;;;; 09E2;BENGALI VOWEL SIGN VOCALIC L;Mn;0;NSM;;;;;N;;;;; 09E3;BENGALI VOWEL SIGN VOCALIC LL;Mn;0;NSM;;;;;N;;;;; 09E6;BENGALI DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;; 09E7;BENGALI DIGIT ONE;Nd;0;L;;1;1;1;N;;;;; 09E8;BENGALI DIGIT TWO;Nd;0;L;;2;2;2;N;;;;; 09E9;BENGALI DIGIT THREE;Nd;0;L;;3;3;3;N;;;;; 09EA;BENGALI DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;; 09EB;BENGALI DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;; 09EC;BENGALI DIGIT SIX;Nd;0;L;;6;6;6;N;;;;; 09ED;BENGALI DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;; 09EE;BENGALI DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;; 09EF;BENGALI DIGIT NINE;Nd;0;L;;9;9;9;N;;;;; 09F0;BENGALI LETTER RA WITH MIDDLE DIAGONAL;Lo;0;L;;;;;N;;Assamese;;; 09F1;BENGALI LETTER RA WITH LOWER DIAGONAL;Lo;0;L;;;;;N;BENGALI LETTER VA WITH LOWER DIAGONAL;Assamese;;; 09F2;BENGALI RUPEE MARK;Sc;0;ET;;;;;N;;;;; 09F3;BENGALI RUPEE SIGN;Sc;0;ET;;;;;N;;;;; 09F4;BENGALI CURRENCY NUMERATOR ONE;No;0;L;;;;1;N;;;;; 09F5;BENGALI CURRENCY NUMERATOR TWO;No;0;L;;;;2;N;;;;; 09F6;BENGALI CURRENCY NUMERATOR THREE;No;0;L;;;;3;N;;;;; 09F7;BENGALI CURRENCY NUMERATOR FOUR;No;0;L;;;;4;N;;;;; 09F8;BENGALI CURRENCY NUMERATOR ONE LESS THAN THE DENOMINATOR;No;0;L;;;;;N;;;;; 09F9;BENGALI CURRENCY DENOMINATOR SIXTEEN;No;0;L;;;;16;N;;;;; 09FA;BENGALI ISSHAR;So;0;L;;;;;N;;;;; 0A02;GURMUKHI SIGN BINDI;Mn;0;NSM;;;;;N;;;;; 0A05;GURMUKHI LETTER A;Lo;0;L;;;;;N;;;;; 0A06;GURMUKHI LETTER AA;Lo;0;L;;;;;N;;;;; 0A07;GURMUKHI LETTER I;Lo;0;L;;;;;N;;;;; 0A08;GURMUKHI LETTER II;Lo;0;L;;;;;N;;;;; 0A09;GURMUKHI LETTER U;Lo;0;L;;;;;N;;;;; 0A0A;GURMUKHI LETTER UU;Lo;0;L;;;;;N;;;;; 0A0F;GURMUKHI LETTER EE;Lo;0;L;;;;;N;;;;; 0A10;GURMUKHI LETTER AI;Lo;0;L;;;;;N;;;;; 0A13;GURMUKHI LETTER OO;Lo;0;L;;;;;N;;;;; 0A14;GURMUKHI LETTER AU;Lo;0;L;;;;;N;;;;; 0A15;GURMUKHI LETTER KA;Lo;0;L;;;;;N;;;;; 0A16;GURMUKHI LETTER KHA;Lo;0;L;;;;;N;;;;; 0A17;GURMUKHI LETTER GA;Lo;0;L;;;;;N;;;;; 0A18;GURMUKHI LETTER GHA;Lo;0;L;;;;;N;;;;; 0A19;GURMUKHI LETTER NGA;Lo;0;L;;;;;N;;;;; 0A1A;GURMUKHI LETTER CA;Lo;0;L;;;;;N;;;;; 0A1B;GURMUKHI LETTER CHA;Lo;0;L;;;;;N;;;;; 0A1C;GURMUKHI LETTER JA;Lo;0;L;;;;;N;;;;; 0A1D;GURMUKHI LETTER JHA;Lo;0;L;;;;;N;;;;; 0A1E;GURMUKHI LETTER NYA;Lo;0;L;;;;;N;;;;; 0A1F;GURMUKHI LETTER TTA;Lo;0;L;;;;;N;;;;; 0A20;GURMUKHI LETTER TTHA;Lo;0;L;;;;;N;;;;; 0A21;GURMUKHI LETTER DDA;Lo;0;L;;;;;N;;;;; 0A22;GURMUKHI LETTER DDHA;Lo;0;L;;;;;N;;;;; 0A23;GURMUKHI LETTER NNA;Lo;0;L;;;;;N;;;;; 0A24;GURMUKHI LETTER TA;Lo;0;L;;;;;N;;;;; 0A25;GURMUKHI LETTER THA;Lo;0;L;;;;;N;;;;; 0A26;GURMUKHI LETTER DA;Lo;0;L;;;;;N;;;;; 0A27;GURMUKHI LETTER DHA;Lo;0;L;;;;;N;;;;; 0A28;GURMUKHI LETTER NA;Lo;0;L;;;;;N;;;;; 0A2A;GURMUKHI LETTER PA;Lo;0;L;;;;;N;;;;; 0A2B;GURMUKHI LETTER PHA;Lo;0;L;;;;;N;;;;; 0A2C;GURMUKHI LETTER BA;Lo;0;L;;;;;N;;;;; 0A2D;GURMUKHI LETTER BHA;Lo;0;L;;;;;N;;;;; 0A2E;GURMUKHI LETTER MA;Lo;0;L;;;;;N;;;;; 0A2F;GURMUKHI LETTER YA;Lo;0;L;;;;;N;;;;; 0A30;GURMUKHI LETTER RA;Lo;0;L;;;;;N;;;;; 0A32;GURMUKHI LETTER LA;Lo;0;L;;;;;N;;;;; 0A33;GURMUKHI LETTER LLA;Lo;0;L;0A32 0A3C;;;;N;;;;; 0A35;GURMUKHI LETTER VA;Lo;0;L;;;;;N;;;;; 0A36;GURMUKHI LETTER SHA;Lo;0;L;0A38 0A3C;;;;N;;;;; 0A38;GURMUKHI LETTER SA;Lo;0;L;;;;;N;;;;; 0A39;GURMUKHI LETTER HA;Lo;0;L;;;;;N;;;;; 0A3C;GURMUKHI SIGN NUKTA;Mn;7;NSM;;;;;N;;;;; 0A3E;GURMUKHI VOWEL SIGN AA;Mc;0;L;;;;;N;;;;; 0A3F;GURMUKHI VOWEL SIGN I;Mc;0;L;;;;;N;;;;; 0A40;GURMUKHI VOWEL SIGN II;Mc;0;L;;;;;N;;;;; 0A41;GURMUKHI VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;; 0A42;GURMUKHI VOWEL SIGN UU;Mn;0;NSM;;;;;N;;;;; 0A47;GURMUKHI VOWEL SIGN EE;Mn;0;NSM;;;;;N;;;;; 0A48;GURMUKHI VOWEL SIGN AI;Mn;0;NSM;;;;;N;;;;; 0A4B;GURMUKHI VOWEL SIGN OO;Mn;0;NSM;;;;;N;;;;; 0A4C;GURMUKHI VOWEL SIGN AU;Mn;0;NSM;;;;;N;;;;; 0A4D;GURMUKHI SIGN VIRAMA;Mn;9;NSM;;;;;N;;;;; 0A59;GURMUKHI LETTER KHHA;Lo;0;L;0A16 0A3C;;;;N;;;;; 0A5A;GURMUKHI LETTER GHHA;Lo;0;L;0A17 0A3C;;;;N;;;;; 0A5B;GURMUKHI LETTER ZA;Lo;0;L;0A1C 0A3C;;;;N;;;;; 0A5C;GURMUKHI LETTER RRA;Lo;0;L;;;;;N;;;;; 0A5E;GURMUKHI LETTER FA;Lo;0;L;0A2B 0A3C;;;;N;;;;; 0A66;GURMUKHI DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;; 0A67;GURMUKHI DIGIT ONE;Nd;0;L;;1;1;1;N;;;;; 0A68;GURMUKHI DIGIT TWO;Nd;0;L;;2;2;2;N;;;;; 0A69;GURMUKHI DIGIT THREE;Nd;0;L;;3;3;3;N;;;;; 0A6A;GURMUKHI DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;; 0A6B;GURMUKHI DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;; 0A6C;GURMUKHI DIGIT SIX;Nd;0;L;;6;6;6;N;;;;; 0A6D;GURMUKHI DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;; 0A6E;GURMUKHI DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;; 0A6F;GURMUKHI DIGIT NINE;Nd;0;L;;9;9;9;N;;;;; 0A70;GURMUKHI TIPPI;Mn;0;NSM;;;;;N;;;;; 0A71;GURMUKHI ADDAK;Mn;0;NSM;;;;;N;;;;; 0A72;GURMUKHI IRI;Lo;0;L;;;;;N;;;;; 0A73;GURMUKHI URA;Lo;0;L;;;;;N;;;;; 0A74;GURMUKHI EK ONKAR;Lo;0;L;;;;;N;;;;; 0A81;GUJARATI SIGN CANDRABINDU;Mn;0;NSM;;;;;N;;;;; 0A82;GUJARATI SIGN ANUSVARA;Mn;0;NSM;;;;;N;;;;; 0A83;GUJARATI SIGN VISARGA;Mc;0;L;;;;;N;;;;; 0A85;GUJARATI LETTER A;Lo;0;L;;;;;N;;;;; 0A86;GUJARATI LETTER AA;Lo;0;L;;;;;N;;;;; 0A87;GUJARATI LETTER I;Lo;0;L;;;;;N;;;;; 0A88;GUJARATI LETTER II;Lo;0;L;;;;;N;;;;; 0A89;GUJARATI LETTER U;Lo;0;L;;;;;N;;;;; 0A8A;GUJARATI LETTER UU;Lo;0;L;;;;;N;;;;; 0A8B;GUJARATI LETTER VOCALIC R;Lo;0;L;;;;;N;;;;; 0A8D;GUJARATI VOWEL CANDRA E;Lo;0;L;;;;;N;;;;; 0A8F;GUJARATI LETTER E;Lo;0;L;;;;;N;;;;; 0A90;GUJARATI LETTER AI;Lo;0;L;;;;;N;;;;; 0A91;GUJARATI VOWEL CANDRA O;Lo;0;L;;;;;N;;;;; 0A93;GUJARATI LETTER O;Lo;0;L;;;;;N;;;;; 0A94;GUJARATI LETTER AU;Lo;0;L;;;;;N;;;;; 0A95;GUJARATI LETTER KA;Lo;0;L;;;;;N;;;;; 0A96;GUJARATI LETTER KHA;Lo;0;L;;;;;N;;;;; 0A97;GUJARATI LETTER GA;Lo;0;L;;;;;N;;;;; 0A98;GUJARATI LETTER GHA;Lo;0;L;;;;;N;;;;; 0A99;GUJARATI LETTER NGA;Lo;0;L;;;;;N;;;;; 0A9A;GUJARATI LETTER CA;Lo;0;L;;;;;N;;;;; 0A9B;GUJARATI LETTER CHA;Lo;0;L;;;;;N;;;;; 0A9C;GUJARATI LETTER JA;Lo;0;L;;;;;N;;;;; 0A9D;GUJARATI LETTER JHA;Lo;0;L;;;;;N;;;;; 0A9E;GUJARATI LETTER NYA;Lo;0;L;;;;;N;;;;; 0A9F;GUJARATI LETTER TTA;Lo;0;L;;;;;N;;;;; 0AA0;GUJARATI LETTER TTHA;Lo;0;L;;;;;N;;;;; 0AA1;GUJARATI LETTER DDA;Lo;0;L;;;;;N;;;;; 0AA2;GUJARATI LETTER DDHA;Lo;0;L;;;;;N;;;;; 0AA3;GUJARATI LETTER NNA;Lo;0;L;;;;;N;;;;; 0AA4;GUJARATI LETTER TA;Lo;0;L;;;;;N;;;;; 0AA5;GUJARATI LETTER THA;Lo;0;L;;;;;N;;;;; 0AA6;GUJARATI LETTER DA;Lo;0;L;;;;;N;;;;; 0AA7;GUJARATI LETTER DHA;Lo;0;L;;;;;N;;;;; 0AA8;GUJARATI LETTER NA;Lo;0;L;;;;;N;;;;; 0AAA;GUJARATI LETTER PA;Lo;0;L;;;;;N;;;;; 0AAB;GUJARATI LETTER PHA;Lo;0;L;;;;;N;;;;; 0AAC;GUJARATI LETTER BA;Lo;0;L;;;;;N;;;;; 0AAD;GUJARATI LETTER BHA;Lo;0;L;;;;;N;;;;; 0AAE;GUJARATI LETTER MA;Lo;0;L;;;;;N;;;;; 0AAF;GUJARATI LETTER YA;Lo;0;L;;;;;N;;;;; 0AB0;GUJARATI LETTER RA;Lo;0;L;;;;;N;;;;; 0AB2;GUJARATI LETTER LA;Lo;0;L;;;;;N;;;;; 0AB3;GUJARATI LETTER LLA;Lo;0;L;;;;;N;;;;; 0AB5;GUJARATI LETTER VA;Lo;0;L;;;;;N;;;;; 0AB6;GUJARATI LETTER SHA;Lo;0;L;;;;;N;;;;; 0AB7;GUJARATI LETTER SSA;Lo;0;L;;;;;N;;;;; 0AB8;GUJARATI LETTER SA;Lo;0;L;;;;;N;;;;; 0AB9;GUJARATI LETTER HA;Lo;0;L;;;;;N;;;;; 0ABC;GUJARATI SIGN NUKTA;Mn;7;NSM;;;;;N;;;;; 0ABD;GUJARATI SIGN AVAGRAHA;Lo;0;L;;;;;N;;;;; 0ABE;GUJARATI VOWEL SIGN AA;Mc;0;L;;;;;N;;;;; 0ABF;GUJARATI VOWEL SIGN I;Mc;0;L;;;;;N;;;;; 0AC0;GUJARATI VOWEL SIGN II;Mc;0;L;;;;;N;;;;; 0AC1;GUJARATI VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;; 0AC2;GUJARATI VOWEL SIGN UU;Mn;0;NSM;;;;;N;;;;; 0AC3;GUJARATI VOWEL SIGN VOCALIC R;Mn;0;NSM;;;;;N;;;;; 0AC4;GUJARATI VOWEL SIGN VOCALIC RR;Mn;0;NSM;;;;;N;;;;; 0AC5;GUJARATI VOWEL SIGN CANDRA E;Mn;0;NSM;;;;;N;;;;; 0AC7;GUJARATI VOWEL SIGN E;Mn;0;NSM;;;;;N;;;;; 0AC8;GUJARATI VOWEL SIGN AI;Mn;0;NSM;;;;;N;;;;; 0AC9;GUJARATI VOWEL SIGN CANDRA O;Mc;0;L;;;;;N;;;;; 0ACB;GUJARATI VOWEL SIGN O;Mc;0;L;;;;;N;;;;; 0ACC;GUJARATI VOWEL SIGN AU;Mc;0;L;;;;;N;;;;; 0ACD;GUJARATI SIGN VIRAMA;Mn;9;NSM;;;;;N;;;;; 0AD0;GUJARATI OM;Lo;0;L;;;;;N;;;;; 0AE0;GUJARATI LETTER VOCALIC RR;Lo;0;L;;;;;N;;;;; 0AE6;GUJARATI DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;; 0AE7;GUJARATI DIGIT ONE;Nd;0;L;;1;1;1;N;;;;; 0AE8;GUJARATI DIGIT TWO;Nd;0;L;;2;2;2;N;;;;; 0AE9;GUJARATI DIGIT THREE;Nd;0;L;;3;3;3;N;;;;; 0AEA;GUJARATI DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;; 0AEB;GUJARATI DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;; 0AEC;GUJARATI DIGIT SIX;Nd;0;L;;6;6;6;N;;;;; 0AED;GUJARATI DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;; 0AEE;GUJARATI DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;; 0AEF;GUJARATI DIGIT NINE;Nd;0;L;;9;9;9;N;;;;; 0B01;ORIYA SIGN CANDRABINDU;Mn;0;NSM;;;;;N;;;;; 0B02;ORIYA SIGN ANUSVARA;Mc;0;L;;;;;N;;;;; 0B03;ORIYA SIGN VISARGA;Mc;0;L;;;;;N;;;;; 0B05;ORIYA LETTER A;Lo;0;L;;;;;N;;;;; 0B06;ORIYA LETTER AA;Lo;0;L;;;;;N;;;;; 0B07;ORIYA LETTER I;Lo;0;L;;;;;N;;;;; 0B08;ORIYA LETTER II;Lo;0;L;;;;;N;;;;; 0B09;ORIYA LETTER U;Lo;0;L;;;;;N;;;;; 0B0A;ORIYA LETTER UU;Lo;0;L;;;;;N;;;;; 0B0B;ORIYA LETTER VOCALIC R;Lo;0;L;;;;;N;;;;; 0B0C;ORIYA LETTER VOCALIC L;Lo;0;L;;;;;N;;;;; 0B0F;ORIYA LETTER E;Lo;0;L;;;;;N;;;;; 0B10;ORIYA LETTER AI;Lo;0;L;;;;;N;;;;; 0B13;ORIYA LETTER O;Lo;0;L;;;;;N;;;;; 0B14;ORIYA LETTER AU;Lo;0;L;;;;;N;;;;; 0B15;ORIYA LETTER KA;Lo;0;L;;;;;N;;;;; 0B16;ORIYA LETTER KHA;Lo;0;L;;;;;N;;;;; 0B17;ORIYA LETTER GA;Lo;0;L;;;;;N;;;;; 0B18;ORIYA LETTER GHA;Lo;0;L;;;;;N;;;;; 0B19;ORIYA LETTER NGA;Lo;0;L;;;;;N;;;;; 0B1A;ORIYA LETTER CA;Lo;0;L;;;;;N;;;;; 0B1B;ORIYA LETTER CHA;Lo;0;L;;;;;N;;;;; 0B1C;ORIYA LETTER JA;Lo;0;L;;;;;N;;;;; 0B1D;ORIYA LETTER JHA;Lo;0;L;;;;;N;;;;; 0B1E;ORIYA LETTER NYA;Lo;0;L;;;;;N;;;;; 0B1F;ORIYA LETTER TTA;Lo;0;L;;;;;N;;;;; 0B20;ORIYA LETTER TTHA;Lo;0;L;;;;;N;;;;; 0B21;ORIYA LETTER DDA;Lo;0;L;;;;;N;;;;; 0B22;ORIYA LETTER DDHA;Lo;0;L;;;;;N;;;;; 0B23;ORIYA LETTER NNA;Lo;0;L;;;;;N;;;;; 0B24;ORIYA LETTER TA;Lo;0;L;;;;;N;;;;; 0B25;ORIYA LETTER THA;Lo;0;L;;;;;N;;;;; 0B26;ORIYA LETTER DA;Lo;0;L;;;;;N;;;;; 0B27;ORIYA LETTER DHA;Lo;0;L;;;;;N;;;;; 0B28;ORIYA LETTER NA;Lo;0;L;;;;;N;;;;; 0B2A;ORIYA LETTER PA;Lo;0;L;;;;;N;;;;; 0B2B;ORIYA LETTER PHA;Lo;0;L;;;;;N;;;;; 0B2C;ORIYA LETTER BA;Lo;0;L;;;;;N;;;;; 0B2D;ORIYA LETTER BHA;Lo;0;L;;;;;N;;;;; 0B2E;ORIYA LETTER MA;Lo;0;L;;;;;N;;;;; 0B2F;ORIYA LETTER YA;Lo;0;L;;;;;N;;;;; 0B30;ORIYA LETTER RA;Lo;0;L;;;;;N;;;;; 0B32;ORIYA LETTER LA;Lo;0;L;;;;;N;;;;; 0B33;ORIYA LETTER LLA;Lo;0;L;;;;;N;;;;; 0B36;ORIYA LETTER SHA;Lo;0;L;;;;;N;;;;; 0B37;ORIYA LETTER SSA;Lo;0;L;;;;;N;;;;; 0B38;ORIYA LETTER SA;Lo;0;L;;;;;N;;;;; 0B39;ORIYA LETTER HA;Lo;0;L;;;;;N;;;;; 0B3C;ORIYA SIGN NUKTA;Mn;7;NSM;;;;;N;;;;; 0B3D;ORIYA SIGN AVAGRAHA;Lo;0;L;;;;;N;;;;; 0B3E;ORIYA VOWEL SIGN AA;Mc;0;L;;;;;N;;;;; 0B3F;ORIYA VOWEL SIGN I;Mn;0;NSM;;;;;N;;;;; 0B40;ORIYA VOWEL SIGN II;Mc;0;L;;;;;N;;;;; 0B41;ORIYA VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;; 0B42;ORIYA VOWEL SIGN UU;Mn;0;NSM;;;;;N;;;;; 0B43;ORIYA VOWEL SIGN VOCALIC R;Mn;0;NSM;;;;;N;;;;; 0B47;ORIYA VOWEL SIGN E;Mc;0;L;;;;;N;;;;; 0B48;ORIYA VOWEL SIGN AI;Mc;0;L;0B47 0B56;;;;N;;;;; 0B4B;ORIYA VOWEL SIGN O;Mc;0;L;0B47 0B3E;;;;N;;;;; 0B4C;ORIYA VOWEL SIGN AU;Mc;0;L;0B47 0B57;;;;N;;;;; 0B4D;ORIYA SIGN VIRAMA;Mn;9;NSM;;;;;N;;;;; 0B56;ORIYA AI LENGTH MARK;Mn;0;NSM;;;;;N;;;;; 0B57;ORIYA AU LENGTH MARK;Mc;0;L;;;;;N;;;;; 0B5C;ORIYA LETTER RRA;Lo;0;L;0B21 0B3C;;;;N;;;;; 0B5D;ORIYA LETTER RHA;Lo;0;L;0B22 0B3C;;;;N;;;;; 0B5F;ORIYA LETTER YYA;Lo;0;L;;;;;N;;;;; 0B60;ORIYA LETTER VOCALIC RR;Lo;0;L;;;;;N;;;;; 0B61;ORIYA LETTER VOCALIC LL;Lo;0;L;;;;;N;;;;; 0B66;ORIYA DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;; 0B67;ORIYA DIGIT ONE;Nd;0;L;;1;1;1;N;;;;; 0B68;ORIYA DIGIT TWO;Nd;0;L;;2;2;2;N;;;;; 0B69;ORIYA DIGIT THREE;Nd;0;L;;3;3;3;N;;;;; 0B6A;ORIYA DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;; 0B6B;ORIYA DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;; 0B6C;ORIYA DIGIT SIX;Nd;0;L;;6;6;6;N;;;;; 0B6D;ORIYA DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;; 0B6E;ORIYA DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;; 0B6F;ORIYA DIGIT NINE;Nd;0;L;;9;9;9;N;;;;; 0B70;ORIYA ISSHAR;So;0;L;;;;;N;;;;; 0B82;TAMIL SIGN ANUSVARA;Mn;0;NSM;;;;;N;;;;; 0B83;TAMIL SIGN VISARGA;Mc;0;L;;;;;N;;;;; 0B85;TAMIL LETTER A;Lo;0;L;;;;;N;;;;; 0B86;TAMIL LETTER AA;Lo;0;L;;;;;N;;;;; 0B87;TAMIL LETTER I;Lo;0;L;;;;;N;;;;; 0B88;TAMIL LETTER II;Lo;0;L;;;;;N;;;;; 0B89;TAMIL LETTER U;Lo;0;L;;;;;N;;;;; 0B8A;TAMIL LETTER UU;Lo;0;L;;;;;N;;;;; 0B8E;TAMIL LETTER E;Lo;0;L;;;;;N;;;;; 0B8F;TAMIL LETTER EE;Lo;0;L;;;;;N;;;;; 0B90;TAMIL LETTER AI;Lo;0;L;;;;;N;;;;; 0B92;TAMIL LETTER O;Lo;0;L;;;;;N;;;;; 0B93;TAMIL LETTER OO;Lo;0;L;;;;;N;;;;; 0B94;TAMIL LETTER AU;Lo;0;L;0B92 0BD7;;;;N;;;;; 0B95;TAMIL LETTER KA;Lo;0;L;;;;;N;;;;; 0B99;TAMIL LETTER NGA;Lo;0;L;;;;;N;;;;; 0B9A;TAMIL LETTER CA;Lo;0;L;;;;;N;;;;; 0B9C;TAMIL LETTER JA;Lo;0;L;;;;;N;;;;; 0B9E;TAMIL LETTER NYA;Lo;0;L;;;;;N;;;;; 0B9F;TAMIL LETTER TTA;Lo;0;L;;;;;N;;;;; 0BA3;TAMIL LETTER NNA;Lo;0;L;;;;;N;;;;; 0BA4;TAMIL LETTER TA;Lo;0;L;;;;;N;;;;; 0BA8;TAMIL LETTER NA;Lo;0;L;;;;;N;;;;; 0BA9;TAMIL LETTER NNNA;Lo;0;L;;;;;N;;;;; 0BAA;TAMIL LETTER PA;Lo;0;L;;;;;N;;;;; 0BAE;TAMIL LETTER MA;Lo;0;L;;;;;N;;;;; 0BAF;TAMIL LETTER YA;Lo;0;L;;;;;N;;;;; 0BB0;TAMIL LETTER RA;Lo;0;L;;;;;N;;;;; 0BB1;TAMIL LETTER RRA;Lo;0;L;;;;;N;;;;; 0BB2;TAMIL LETTER LA;Lo;0;L;;;;;N;;;;; 0BB3;TAMIL LETTER LLA;Lo;0;L;;;;;N;;;;; 0BB4;TAMIL LETTER LLLA;Lo;0;L;;;;;N;;;;; 0BB5;TAMIL LETTER VA;Lo;0;L;;;;;N;;;;; 0BB7;TAMIL LETTER SSA;Lo;0;L;;;;;N;;;;; 0BB8;TAMIL LETTER SA;Lo;0;L;;;;;N;;;;; 0BB9;TAMIL LETTER HA;Lo;0;L;;;;;N;;;;; 0BBE;TAMIL VOWEL SIGN AA;Mc;0;L;;;;;N;;;;; 0BBF;TAMIL VOWEL SIGN I;Mc;0;L;;;;;N;;;;; 0BC0;TAMIL VOWEL SIGN II;Mn;0;NSM;;;;;N;;;;; 0BC1;TAMIL VOWEL SIGN U;Mc;0;L;;;;;N;;;;; 0BC2;TAMIL VOWEL SIGN UU;Mc;0;L;;;;;N;;;;; 0BC6;TAMIL VOWEL SIGN E;Mc;0;L;;;;;N;;;;; 0BC7;TAMIL VOWEL SIGN EE;Mc;0;L;;;;;N;;;;; 0BC8;TAMIL VOWEL SIGN AI;Mc;0;L;;;;;N;;;;; 0BCA;TAMIL VOWEL SIGN O;Mc;0;L;0BC6 0BBE;;;;N;;;;; 0BCB;TAMIL VOWEL SIGN OO;Mc;0;L;0BC7 0BBE;;;;N;;;;; 0BCC;TAMIL VOWEL SIGN AU;Mc;0;L;0BC6 0BD7;;;;N;;;;; 0BCD;TAMIL SIGN VIRAMA;Mn;9;NSM;;;;;N;;;;; 0BD7;TAMIL AU LENGTH MARK;Mc;0;L;;;;;N;;;;; 0BE7;TAMIL DIGIT ONE;Nd;0;L;;1;1;1;N;;;;; 0BE8;TAMIL DIGIT TWO;Nd;0;L;;2;2;2;N;;;;; 0BE9;TAMIL DIGIT THREE;Nd;0;L;;3;3;3;N;;;;; 0BEA;TAMIL DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;; 0BEB;TAMIL DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;; 0BEC;TAMIL DIGIT SIX;Nd;0;L;;6;6;6;N;;;;; 0BED;TAMIL DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;; 0BEE;TAMIL DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;; 0BEF;TAMIL DIGIT NINE;Nd;0;L;;9;9;9;N;;;;; 0BF0;TAMIL NUMBER TEN;No;0;L;;;;10;N;;;;; 0BF1;TAMIL NUMBER ONE HUNDRED;No;0;L;;;;100;N;;;;; 0BF2;TAMIL NUMBER ONE THOUSAND;No;0;L;;;;1000;N;;;;; 0C01;TELUGU SIGN CANDRABINDU;Mc;0;L;;;;;N;;;;; 0C02;TELUGU SIGN ANUSVARA;Mc;0;L;;;;;N;;;;; 0C03;TELUGU SIGN VISARGA;Mc;0;L;;;;;N;;;;; 0C05;TELUGU LETTER A;Lo;0;L;;;;;N;;;;; 0C06;TELUGU LETTER AA;Lo;0;L;;;;;N;;;;; 0C07;TELUGU LETTER I;Lo;0;L;;;;;N;;;;; 0C08;TELUGU LETTER II;Lo;0;L;;;;;N;;;;; 0C09;TELUGU LETTER U;Lo;0;L;;;;;N;;;;; 0C0A;TELUGU LETTER UU;Lo;0;L;;;;;N;;;;; 0C0B;TELUGU LETTER VOCALIC R;Lo;0;L;;;;;N;;;;; 0C0C;TELUGU LETTER VOCALIC L;Lo;0;L;;;;;N;;;;; 0C0E;TELUGU LETTER E;Lo;0;L;;;;;N;;;;; 0C0F;TELUGU LETTER EE;Lo;0;L;;;;;N;;;;; 0C10;TELUGU LETTER AI;Lo;0;L;;;;;N;;;;; 0C12;TELUGU LETTER O;Lo;0;L;;;;;N;;;;; 0C13;TELUGU LETTER OO;Lo;0;L;;;;;N;;;;; 0C14;TELUGU LETTER AU;Lo;0;L;;;;;N;;;;; 0C15;TELUGU LETTER KA;Lo;0;L;;;;;N;;;;; 0C16;TELUGU LETTER KHA;Lo;0;L;;;;;N;;;;; 0C17;TELUGU LETTER GA;Lo;0;L;;;;;N;;;;; 0C18;TELUGU LETTER GHA;Lo;0;L;;;;;N;;;;; 0C19;TELUGU LETTER NGA;Lo;0;L;;;;;N;;;;; 0C1A;TELUGU LETTER CA;Lo;0;L;;;;;N;;;;; 0C1B;TELUGU LETTER CHA;Lo;0;L;;;;;N;;;;; 0C1C;TELUGU LETTER JA;Lo;0;L;;;;;N;;;;; 0C1D;TELUGU LETTER JHA;Lo;0;L;;;;;N;;;;; 0C1E;TELUGU LETTER NYA;Lo;0;L;;;;;N;;;;; 0C1F;TELUGU LETTER TTA;Lo;0;L;;;;;N;;;;; 0C20;TELUGU LETTER TTHA;Lo;0;L;;;;;N;;;;; 0C21;TELUGU LETTER DDA;Lo;0;L;;;;;N;;;;; 0C22;TELUGU LETTER DDHA;Lo;0;L;;;;;N;;;;; 0C23;TELUGU LETTER NNA;Lo;0;L;;;;;N;;;;; 0C24;TELUGU LETTER TA;Lo;0;L;;;;;N;;;;; 0C25;TELUGU LETTER THA;Lo;0;L;;;;;N;;;;; 0C26;TELUGU LETTER DA;Lo;0;L;;;;;N;;;;; 0C27;TELUGU LETTER DHA;Lo;0;L;;;;;N;;;;; 0C28;TELUGU LETTER NA;Lo;0;L;;;;;N;;;;; 0C2A;TELUGU LETTER PA;Lo;0;L;;;;;N;;;;; 0C2B;TELUGU LETTER PHA;Lo;0;L;;;;;N;;;;; 0C2C;TELUGU LETTER BA;Lo;0;L;;;;;N;;;;; 0C2D;TELUGU LETTER BHA;Lo;0;L;;;;;N;;;;; 0C2E;TELUGU LETTER MA;Lo;0;L;;;;;N;;;;; 0C2F;TELUGU LETTER YA;Lo;0;L;;;;;N;;;;; 0C30;TELUGU LETTER RA;Lo;0;L;;;;;N;;;;; 0C31;TELUGU LETTER RRA;Lo;0;L;;;;;N;;;;; 0C32;TELUGU LETTER LA;Lo;0;L;;;;;N;;;;; 0C33;TELUGU LETTER LLA;Lo;0;L;;;;;N;;;;; 0C35;TELUGU LETTER VA;Lo;0;L;;;;;N;;;;; 0C36;TELUGU LETTER SHA;Lo;0;L;;;;;N;;;;; 0C37;TELUGU LETTER SSA;Lo;0;L;;;;;N;;;;; 0C38;TELUGU LETTER SA;Lo;0;L;;;;;N;;;;; 0C39;TELUGU LETTER HA;Lo;0;L;;;;;N;;;;; 0C3E;TELUGU VOWEL SIGN AA;Mn;0;NSM;;;;;N;;;;; 0C3F;TELUGU VOWEL SIGN I;Mn;0;NSM;;;;;N;;;;; 0C40;TELUGU VOWEL SIGN II;Mn;0;NSM;;;;;N;;;;; 0C41;TELUGU VOWEL SIGN U;Mc;0;L;;;;;N;;;;; 0C42;TELUGU VOWEL SIGN UU;Mc;0;L;;;;;N;;;;; 0C43;TELUGU VOWEL SIGN VOCALIC R;Mc;0;L;;;;;N;;;;; 0C44;TELUGU VOWEL SIGN VOCALIC RR;Mc;0;L;;;;;N;;;;; 0C46;TELUGU VOWEL SIGN E;Mn;0;NSM;;;;;N;;;;; 0C47;TELUGU VOWEL SIGN EE;Mn;0;NSM;;;;;N;;;;; 0C48;TELUGU VOWEL SIGN AI;Mn;0;NSM;0C46 0C56;;;;N;;;;; 0C4A;TELUGU VOWEL SIGN O;Mn;0;NSM;;;;;N;;;;; 0C4B;TELUGU VOWEL SIGN OO;Mn;0;NSM;;;;;N;;;;; 0C4C;TELUGU VOWEL SIGN AU;Mn;0;NSM;;;;;N;;;;; 0C4D;TELUGU SIGN VIRAMA;Mn;9;NSM;;;;;N;;;;; 0C55;TELUGU LENGTH MARK;Mn;84;NSM;;;;;N;;;;; 0C56;TELUGU AI LENGTH MARK;Mn;91;NSM;;;;;N;;;;; 0C60;TELUGU LETTER VOCALIC RR;Lo;0;L;;;;;N;;;;; 0C61;TELUGU LETTER VOCALIC LL;Lo;0;L;;;;;N;;;;; 0C66;TELUGU DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;; 0C67;TELUGU DIGIT ONE;Nd;0;L;;1;1;1;N;;;;; 0C68;TELUGU DIGIT TWO;Nd;0;L;;2;2;2;N;;;;; 0C69;TELUGU DIGIT THREE;Nd;0;L;;3;3;3;N;;;;; 0C6A;TELUGU DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;; 0C6B;TELUGU DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;; 0C6C;TELUGU DIGIT SIX;Nd;0;L;;6;6;6;N;;;;; 0C6D;TELUGU DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;; 0C6E;TELUGU DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;; 0C6F;TELUGU DIGIT NINE;Nd;0;L;;9;9;9;N;;;;; 0C82;KANNADA SIGN ANUSVARA;Mc;0;L;;;;;N;;;;; 0C83;KANNADA SIGN VISARGA;Mc;0;L;;;;;N;;;;; 0C85;KANNADA LETTER A;Lo;0;L;;;;;N;;;;; 0C86;KANNADA LETTER AA;Lo;0;L;;;;;N;;;;; 0C87;KANNADA LETTER I;Lo;0;L;;;;;N;;;;; 0C88;KANNADA LETTER II;Lo;0;L;;;;;N;;;;; 0C89;KANNADA LETTER U;Lo;0;L;;;;;N;;;;; 0C8A;KANNADA LETTER UU;Lo;0;L;;;;;N;;;;; 0C8B;KANNADA LETTER VOCALIC R;Lo;0;L;;;;;N;;;;; 0C8C;KANNADA LETTER VOCALIC L;Lo;0;L;;;;;N;;;;; 0C8E;KANNADA LETTER E;Lo;0;L;;;;;N;;;;; 0C8F;KANNADA LETTER EE;Lo;0;L;;;;;N;;;;; 0C90;KANNADA LETTER AI;Lo;0;L;;;;;N;;;;; 0C92;KANNADA LETTER O;Lo;0;L;;;;;N;;;;; 0C93;KANNADA LETTER OO;Lo;0;L;;;;;N;;;;; 0C94;KANNADA LETTER AU;Lo;0;L;;;;;N;;;;; 0C95;KANNADA LETTER KA;Lo;0;L;;;;;N;;;;; 0C96;KANNADA LETTER KHA;Lo;0;L;;;;;N;;;;; 0C97;KANNADA LETTER GA;Lo;0;L;;;;;N;;;;; 0C98;KANNADA LETTER GHA;Lo;0;L;;;;;N;;;;; 0C99;KANNADA LETTER NGA;Lo;0;L;;;;;N;;;;; 0C9A;KANNADA LETTER CA;Lo;0;L;;;;;N;;;;; 0C9B;KANNADA LETTER CHA;Lo;0;L;;;;;N;;;;; 0C9C;KANNADA LETTER JA;Lo;0;L;;;;;N;;;;; 0C9D;KANNADA LETTER JHA;Lo;0;L;;;;;N;;;;; 0C9E;KANNADA LETTER NYA;Lo;0;L;;;;;N;;;;; 0C9F;KANNADA LETTER TTA;Lo;0;L;;;;;N;;;;; 0CA0;KANNADA LETTER TTHA;Lo;0;L;;;;;N;;;;; 0CA1;KANNADA LETTER DDA;Lo;0;L;;;;;N;;;;; 0CA2;KANNADA LETTER DDHA;Lo;0;L;;;;;N;;;;; 0CA3;KANNADA LETTER NNA;Lo;0;L;;;;;N;;;;; 0CA4;KANNADA LETTER TA;Lo;0;L;;;;;N;;;;; 0CA5;KANNADA LETTER THA;Lo;0;L;;;;;N;;;;; 0CA6;KANNADA LETTER DA;Lo;0;L;;;;;N;;;;; 0CA7;KANNADA LETTER DHA;Lo;0;L;;;;;N;;;;; 0CA8;KANNADA LETTER NA;Lo;0;L;;;;;N;;;;; 0CAA;KANNADA LETTER PA;Lo;0;L;;;;;N;;;;; 0CAB;KANNADA LETTER PHA;Lo;0;L;;;;;N;;;;; 0CAC;KANNADA LETTER BA;Lo;0;L;;;;;N;;;;; 0CAD;KANNADA LETTER BHA;Lo;0;L;;;;;N;;;;; 0CAE;KANNADA LETTER MA;Lo;0;L;;;;;N;;;;; 0CAF;KANNADA LETTER YA;Lo;0;L;;;;;N;;;;; 0CB0;KANNADA LETTER RA;Lo;0;L;;;;;N;;;;; 0CB1;KANNADA LETTER RRA;Lo;0;L;;;;;N;;;;; 0CB2;KANNADA LETTER LA;Lo;0;L;;;;;N;;;;; 0CB3;KANNADA LETTER LLA;Lo;0;L;;;;;N;;;;; 0CB5;KANNADA LETTER VA;Lo;0;L;;;;;N;;;;; 0CB6;KANNADA LETTER SHA;Lo;0;L;;;;;N;;;;; 0CB7;KANNADA LETTER SSA;Lo;0;L;;;;;N;;;;; 0CB8;KANNADA LETTER SA;Lo;0;L;;;;;N;;;;; 0CB9;KANNADA LETTER HA;Lo;0;L;;;;;N;;;;; 0CBE;KANNADA VOWEL SIGN AA;Mc;0;L;;;;;N;;;;; 0CBF;KANNADA VOWEL SIGN I;Mn;0;NSM;;;;;N;;;;; 0CC0;KANNADA VOWEL SIGN II;Mc;0;L;0CBF 0CD5;;;;N;;;;; 0CC1;KANNADA VOWEL SIGN U;Mc;0;L;;;;;N;;;;; 0CC2;KANNADA VOWEL SIGN UU;Mc;0;L;;;;;N;;;;; 0CC3;KANNADA VOWEL SIGN VOCALIC R;Mc;0;L;;;;;N;;;;; 0CC4;KANNADA VOWEL SIGN VOCALIC RR;Mc;0;L;;;;;N;;;;; 0CC6;KANNADA VOWEL SIGN E;Mn;0;NSM;;;;;N;;;;; 0CC7;KANNADA VOWEL SIGN EE;Mc;0;L;0CC6 0CD5;;;;N;;;;; 0CC8;KANNADA VOWEL SIGN AI;Mc;0;L;0CC6 0CD6;;;;N;;;;; 0CCA;KANNADA VOWEL SIGN O;Mc;0;L;0CC6 0CC2;;;;N;;;;; 0CCB;KANNADA VOWEL SIGN OO;Mc;0;L;0CCA 0CD5;;;;N;;;;; 0CCC;KANNADA VOWEL SIGN AU;Mn;0;NSM;;;;;N;;;;; 0CCD;KANNADA SIGN VIRAMA;Mn;9;NSM;;;;;N;;;;; 0CD5;KANNADA LENGTH MARK;Mc;0;L;;;;;N;;;;; 0CD6;KANNADA AI LENGTH MARK;Mc;0;L;;;;;N;;;;; 0CDE;KANNADA LETTER FA;Lo;0;L;;;;;N;;;;; 0CE0;KANNADA LETTER VOCALIC RR;Lo;0;L;;;;;N;;;;; 0CE1;KANNADA LETTER VOCALIC LL;Lo;0;L;;;;;N;;;;; 0CE6;KANNADA DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;; 0CE7;KANNADA DIGIT ONE;Nd;0;L;;1;1;1;N;;;;; 0CE8;KANNADA DIGIT TWO;Nd;0;L;;2;2;2;N;;;;; 0CE9;KANNADA DIGIT THREE;Nd;0;L;;3;3;3;N;;;;; 0CEA;KANNADA DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;; 0CEB;KANNADA DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;; 0CEC;KANNADA DIGIT SIX;Nd;0;L;;6;6;6;N;;;;; 0CED;KANNADA DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;; 0CEE;KANNADA DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;; 0CEF;KANNADA DIGIT NINE;Nd;0;L;;9;9;9;N;;;;; 0D02;MALAYALAM SIGN ANUSVARA;Mc;0;L;;;;;N;;;;; 0D03;MALAYALAM SIGN VISARGA;Mc;0;L;;;;;N;;;;; 0D05;MALAYALAM LETTER A;Lo;0;L;;;;;N;;;;; 0D06;MALAYALAM LETTER AA;Lo;0;L;;;;;N;;;;; 0D07;MALAYALAM LETTER I;Lo;0;L;;;;;N;;;;; 0D08;MALAYALAM LETTER II;Lo;0;L;;;;;N;;;;; 0D09;MALAYALAM LETTER U;Lo;0;L;;;;;N;;;;; 0D0A;MALAYALAM LETTER UU;Lo;0;L;;;;;N;;;;; 0D0B;MALAYALAM LETTER VOCALIC R;Lo;0;L;;;;;N;;;;; 0D0C;MALAYALAM LETTER VOCALIC L;Lo;0;L;;;;;N;;;;; 0D0E;MALAYALAM LETTER E;Lo;0;L;;;;;N;;;;; 0D0F;MALAYALAM LETTER EE;Lo;0;L;;;;;N;;;;; 0D10;MALAYALAM LETTER AI;Lo;0;L;;;;;N;;;;; 0D12;MALAYALAM LETTER O;Lo;0;L;;;;;N;;;;; 0D13;MALAYALAM LETTER OO;Lo;0;L;;;;;N;;;;; 0D14;MALAYALAM LETTER AU;Lo;0;L;;;;;N;;;;; 0D15;MALAYALAM LETTER KA;Lo;0;L;;;;;N;;;;; 0D16;MALAYALAM LETTER KHA;Lo;0;L;;;;;N;;;;; 0D17;MALAYALAM LETTER GA;Lo;0;L;;;;;N;;;;; 0D18;MALAYALAM LETTER GHA;Lo;0;L;;;;;N;;;;; 0D19;MALAYALAM LETTER NGA;Lo;0;L;;;;;N;;;;; 0D1A;MALAYALAM LETTER CA;Lo;0;L;;;;;N;;;;; 0D1B;MALAYALAM LETTER CHA;Lo;0;L;;;;;N;;;;; 0D1C;MALAYALAM LETTER JA;Lo;0;L;;;;;N;;;;; 0D1D;MALAYALAM LETTER JHA;Lo;0;L;;;;;N;;;;; 0D1E;MALAYALAM LETTER NYA;Lo;0;L;;;;;N;;;;; 0D1F;MALAYALAM LETTER TTA;Lo;0;L;;;;;N;;;;; 0D20;MALAYALAM LETTER TTHA;Lo;0;L;;;;;N;;;;; 0D21;MALAYALAM LETTER DDA;Lo;0;L;;;;;N;;;;; 0D22;MALAYALAM LETTER DDHA;Lo;0;L;;;;;N;;;;; 0D23;MALAYALAM LETTER NNA;Lo;0;L;;;;;N;;;;; 0D24;MALAYALAM LETTER TA;Lo;0;L;;;;;N;;;;; 0D25;MALAYALAM LETTER THA;Lo;0;L;;;;;N;;;;; 0D26;MALAYALAM LETTER DA;Lo;0;L;;;;;N;;;;; 0D27;MALAYALAM LETTER DHA;Lo;0;L;;;;;N;;;;; 0D28;MALAYALAM LETTER NA;Lo;0;L;;;;;N;;;;; 0D2A;MALAYALAM LETTER PA;Lo;0;L;;;;;N;;;;; 0D2B;MALAYALAM LETTER PHA;Lo;0;L;;;;;N;;;;; 0D2C;MALAYALAM LETTER BA;Lo;0;L;;;;;N;;;;; 0D2D;MALAYALAM LETTER BHA;Lo;0;L;;;;;N;;;;; 0D2E;MALAYALAM LETTER MA;Lo;0;L;;;;;N;;;;; 0D2F;MALAYALAM LETTER YA;Lo;0;L;;;;;N;;;;; 0D30;MALAYALAM LETTER RA;Lo;0;L;;;;;N;;;;; 0D31;MALAYALAM LETTER RRA;Lo;0;L;;;;;N;;;;; 0D32;MALAYALAM LETTER LA;Lo;0;L;;;;;N;;;;; 0D33;MALAYALAM LETTER LLA;Lo;0;L;;;;;N;;;;; 0D34;MALAYALAM LETTER LLLA;Lo;0;L;;;;;N;;;;; 0D35;MALAYALAM LETTER VA;Lo;0;L;;;;;N;;;;; 0D36;MALAYALAM LETTER SHA;Lo;0;L;;;;;N;;;;; 0D37;MALAYALAM LETTER SSA;Lo;0;L;;;;;N;;;;; 0D38;MALAYALAM LETTER SA;Lo;0;L;;;;;N;;;;; 0D39;MALAYALAM LETTER HA;Lo;0;L;;;;;N;;;;; 0D3E;MALAYALAM VOWEL SIGN AA;Mc;0;L;;;;;N;;;;; 0D3F;MALAYALAM VOWEL SIGN I;Mc;0;L;;;;;N;;;;; 0D40;MALAYALAM VOWEL SIGN II;Mc;0;L;;;;;N;;;;; 0D41;MALAYALAM VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;; 0D42;MALAYALAM VOWEL SIGN UU;Mn;0;NSM;;;;;N;;;;; 0D43;MALAYALAM VOWEL SIGN VOCALIC R;Mn;0;NSM;;;;;N;;;;; 0D46;MALAYALAM VOWEL SIGN E;Mc;0;L;;;;;N;;;;; 0D47;MALAYALAM VOWEL SIGN EE;Mc;0;L;;;;;N;;;;; 0D48;MALAYALAM VOWEL SIGN AI;Mc;0;L;;;;;N;;;;; 0D4A;MALAYALAM VOWEL SIGN O;Mc;0;L;0D46 0D3E;;;;N;;;;; 0D4B;MALAYALAM VOWEL SIGN OO;Mc;0;L;0D47 0D3E;;;;N;;;;; 0D4C;MALAYALAM VOWEL SIGN AU;Mc;0;L;0D46 0D57;;;;N;;;;; 0D4D;MALAYALAM SIGN VIRAMA;Mn;9;NSM;;;;;N;;;;; 0D57;MALAYALAM AU LENGTH MARK;Mc;0;L;;;;;N;;;;; 0D60;MALAYALAM LETTER VOCALIC RR;Lo;0;L;;;;;N;;;;; 0D61;MALAYALAM LETTER VOCALIC LL;Lo;0;L;;;;;N;;;;; 0D66;MALAYALAM DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;; 0D67;MALAYALAM DIGIT ONE;Nd;0;L;;1;1;1;N;;;;; 0D68;MALAYALAM DIGIT TWO;Nd;0;L;;2;2;2;N;;;;; 0D69;MALAYALAM DIGIT THREE;Nd;0;L;;3;3;3;N;;;;; 0D6A;MALAYALAM DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;; 0D6B;MALAYALAM DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;; 0D6C;MALAYALAM DIGIT SIX;Nd;0;L;;6;6;6;N;;;;; 0D6D;MALAYALAM DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;; 0D6E;MALAYALAM DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;; 0D6F;MALAYALAM DIGIT NINE;Nd;0;L;;9;9;9;N;;;;; 0D82;SINHALA SIGN ANUSVARAYA;Mc;0;L;;;;;N;;;;; 0D83;SINHALA SIGN VISARGAYA;Mc;0;L;;;;;N;;;;; 0D85;SINHALA LETTER AYANNA;Lo;0;L;;;;;N;;;;; 0D86;SINHALA LETTER AAYANNA;Lo;0;L;;;;;N;;;;; 0D87;SINHALA LETTER AEYANNA;Lo;0;L;;;;;N;;;;; 0D88;SINHALA LETTER AEEYANNA;Lo;0;L;;;;;N;;;;; 0D89;SINHALA LETTER IYANNA;Lo;0;L;;;;;N;;;;; 0D8A;SINHALA LETTER IIYANNA;Lo;0;L;;;;;N;;;;; 0D8B;SINHALA LETTER UYANNA;Lo;0;L;;;;;N;;;;; 0D8C;SINHALA LETTER UUYANNA;Lo;0;L;;;;;N;;;;; 0D8D;SINHALA LETTER IRUYANNA;Lo;0;L;;;;;N;;;;; 0D8E;SINHALA LETTER IRUUYANNA;Lo;0;L;;;;;N;;;;; 0D8F;SINHALA LETTER ILUYANNA;Lo;0;L;;;;;N;;;;; 0D90;SINHALA LETTER ILUUYANNA;Lo;0;L;;;;;N;;;;; 0D91;SINHALA LETTER EYANNA;Lo;0;L;;;;;N;;;;; 0D92;SINHALA LETTER EEYANNA;Lo;0;L;;;;;N;;;;; 0D93;SINHALA LETTER AIYANNA;Lo;0;L;;;;;N;;;;; 0D94;SINHALA LETTER OYANNA;Lo;0;L;;;;;N;;;;; 0D95;SINHALA LETTER OOYANNA;Lo;0;L;;;;;N;;;;; 0D96;SINHALA LETTER AUYANNA;Lo;0;L;;;;;N;;;;; 0D9A;SINHALA LETTER ALPAPRAANA KAYANNA;Lo;0;L;;;;;N;;;;; 0D9B;SINHALA LETTER MAHAAPRAANA KAYANNA;Lo;0;L;;;;;N;;;;; 0D9C;SINHALA LETTER ALPAPRAANA GAYANNA;Lo;0;L;;;;;N;;;;; 0D9D;SINHALA LETTER MAHAAPRAANA GAYANNA;Lo;0;L;;;;;N;;;;; 0D9E;SINHALA LETTER KANTAJA NAASIKYAYA;Lo;0;L;;;;;N;;;;; 0D9F;SINHALA LETTER SANYAKA GAYANNA;Lo;0;L;;;;;N;;;;; 0DA0;SINHALA LETTER ALPAPRAANA CAYANNA;Lo;0;L;;;;;N;;;;; 0DA1;SINHALA LETTER MAHAAPRAANA CAYANNA;Lo;0;L;;;;;N;;;;; 0DA2;SINHALA LETTER ALPAPRAANA JAYANNA;Lo;0;L;;;;;N;;;;; 0DA3;SINHALA LETTER MAHAAPRAANA JAYANNA;Lo;0;L;;;;;N;;;;; 0DA4;SINHALA LETTER TAALUJA NAASIKYAYA;Lo;0;L;;;;;N;;;;; 0DA5;SINHALA LETTER TAALUJA SANYOOGA NAAKSIKYAYA;Lo;0;L;;;;;N;;;;; 0DA6;SINHALA LETTER SANYAKA JAYANNA;Lo;0;L;;;;;N;;;;; 0DA7;SINHALA LETTER ALPAPRAANA TTAYANNA;Lo;0;L;;;;;N;;;;; 0DA8;SINHALA LETTER MAHAAPRAANA TTAYANNA;Lo;0;L;;;;;N;;;;; 0DA9;SINHALA LETTER ALPAPRAANA DDAYANNA;Lo;0;L;;;;;N;;;;; 0DAA;SINHALA LETTER MAHAAPRAANA DDAYANNA;Lo;0;L;;;;;N;;;;; 0DAB;SINHALA LETTER MUURDHAJA NAYANNA;Lo;0;L;;;;;N;;;;; 0DAC;SINHALA LETTER SANYAKA DDAYANNA;Lo;0;L;;;;;N;;;;; 0DAD;SINHALA LETTER ALPAPRAANA TAYANNA;Lo;0;L;;;;;N;;;;; 0DAE;SINHALA LETTER MAHAAPRAANA TAYANNA;Lo;0;L;;;;;N;;;;; 0DAF;SINHALA LETTER ALPAPRAANA DAYANNA;Lo;0;L;;;;;N;;;;; 0DB0;SINHALA LETTER MAHAAPRAANA DAYANNA;Lo;0;L;;;;;N;;;;; 0DB1;SINHALA LETTER DANTAJA NAYANNA;Lo;0;L;;;;;N;;;;; 0DB3;SINHALA LETTER SANYAKA DAYANNA;Lo;0;L;;;;;N;;;;; 0DB4;SINHALA LETTER ALPAPRAANA PAYANNA;Lo;0;L;;;;;N;;;;; 0DB5;SINHALA LETTER MAHAAPRAANA PAYANNA;Lo;0;L;;;;;N;;;;; 0DB6;SINHALA LETTER ALPAPRAANA BAYANNA;Lo;0;L;;;;;N;;;;; 0DB7;SINHALA LETTER MAHAAPRAANA BAYANNA;Lo;0;L;;;;;N;;;;; 0DB8;SINHALA LETTER MAYANNA;Lo;0;L;;;;;N;;;;; 0DB9;SINHALA LETTER AMBA BAYANNA;Lo;0;L;;;;;N;;;;; 0DBA;SINHALA LETTER YAYANNA;Lo;0;L;;;;;N;;;;; 0DBB;SINHALA LETTER RAYANNA;Lo;0;L;;;;;N;;;;; 0DBD;SINHALA LETTER DANTAJA LAYANNA;Lo;0;L;;;;;N;;;;; 0DC0;SINHALA LETTER VAYANNA;Lo;0;L;;;;;N;;;;; 0DC1;SINHALA LETTER TAALUJA SAYANNA;Lo;0;L;;;;;N;;;;; 0DC2;SINHALA LETTER MUURDHAJA SAYANNA;Lo;0;L;;;;;N;;;;; 0DC3;SINHALA LETTER DANTAJA SAYANNA;Lo;0;L;;;;;N;;;;; 0DC4;SINHALA LETTER HAYANNA;Lo;0;L;;;;;N;;;;; 0DC5;SINHALA LETTER MUURDHAJA LAYANNA;Lo;0;L;;;;;N;;;;; 0DC6;SINHALA LETTER FAYANNA;Lo;0;L;;;;;N;;;;; 0DCA;SINHALA SIGN AL-LAKUNA;Mn;9;NSM;;;;;N;;;;; 0DCF;SINHALA VOWEL SIGN AELA-PILLA;Mc;0;L;;;;;N;;;;; 0DD0;SINHALA VOWEL SIGN KETTI AEDA-PILLA;Mc;0;L;;;;;N;;;;; 0DD1;SINHALA VOWEL SIGN DIGA AEDA-PILLA;Mc;0;L;;;;;N;;;;; 0DD2;SINHALA VOWEL SIGN KETTI IS-PILLA;Mn;0;NSM;;;;;N;;;;; 0DD3;SINHALA VOWEL SIGN DIGA IS-PILLA;Mn;0;NSM;;;;;N;;;;; 0DD4;SINHALA VOWEL SIGN KETTI PAA-PILLA;Mn;0;NSM;;;;;N;;;;; 0DD6;SINHALA VOWEL SIGN DIGA PAA-PILLA;Mn;0;NSM;;;;;N;;;;; 0DD8;SINHALA VOWEL SIGN GAETTA-PILLA;Mc;0;L;;;;;N;;;;; 0DD9;SINHALA VOWEL SIGN KOMBUVA;Mc;0;L;;;;;N;;;;; 0DDA;SINHALA VOWEL SIGN DIGA KOMBUVA;Mc;0;L;0DD9 0DCA;;;;N;;;;; 0DDB;SINHALA VOWEL SIGN KOMBU DEKA;Mc;0;L;;;;;N;;;;; 0DDC;SINHALA VOWEL SIGN KOMBUVA HAA AELA-PILLA;Mc;0;L;0DD9 0DCF;;;;N;;;;; 0DDD;SINHALA VOWEL SIGN KOMBUVA HAA DIGA AELA-PILLA;Mc;0;L;0DDC 0DCA;;;;N;;;;; 0DDE;SINHALA VOWEL SIGN KOMBUVA HAA GAYANUKITTA;Mc;0;L;0DD9 0DDF;;;;N;;;;; 0DDF;SINHALA VOWEL SIGN GAYANUKITTA;Mc;0;L;;;;;N;;;;; 0DF2;SINHALA VOWEL SIGN DIGA GAETTA-PILLA;Mc;0;L;;;;;N;;;;; 0DF3;SINHALA VOWEL SIGN DIGA GAYANUKITTA;Mc;0;L;;;;;N;;;;; 0DF4;SINHALA PUNCTUATION KUNDDALIYA;Po;0;L;;;;;N;;;;; 0E01;THAI CHARACTER KO KAI;Lo;0;L;;;;;N;THAI LETTER KO KAI;;;; 0E02;THAI CHARACTER KHO KHAI;Lo;0;L;;;;;N;THAI LETTER KHO KHAI;;;; 0E03;THAI CHARACTER KHO KHUAT;Lo;0;L;;;;;N;THAI LETTER KHO KHUAT;;;; 0E04;THAI CHARACTER KHO KHWAI;Lo;0;L;;;;;N;THAI LETTER KHO KHWAI;;;; 0E05;THAI CHARACTER KHO KHON;Lo;0;L;;;;;N;THAI LETTER KHO KHON;;;; 0E06;THAI CHARACTER KHO RAKHANG;Lo;0;L;;;;;N;THAI LETTER KHO RAKHANG;;;; 0E07;THAI CHARACTER NGO NGU;Lo;0;L;;;;;N;THAI LETTER NGO NGU;;;; 0E08;THAI CHARACTER CHO CHAN;Lo;0;L;;;;;N;THAI LETTER CHO CHAN;;;; 0E09;THAI CHARACTER CHO CHING;Lo;0;L;;;;;N;THAI LETTER CHO CHING;;;; 0E0A;THAI CHARACTER CHO CHANG;Lo;0;L;;;;;N;THAI LETTER CHO CHANG;;;; 0E0B;THAI CHARACTER SO SO;Lo;0;L;;;;;N;THAI LETTER SO SO;;;; 0E0C;THAI CHARACTER CHO CHOE;Lo;0;L;;;;;N;THAI LETTER CHO CHOE;;;; 0E0D;THAI CHARACTER YO YING;Lo;0;L;;;;;N;THAI LETTER YO YING;;;; 0E0E;THAI CHARACTER DO CHADA;Lo;0;L;;;;;N;THAI LETTER DO CHADA;;;; 0E0F;THAI CHARACTER TO PATAK;Lo;0;L;;;;;N;THAI LETTER TO PATAK;;;; 0E10;THAI CHARACTER THO THAN;Lo;0;L;;;;;N;THAI LETTER THO THAN;;;; 0E11;THAI CHARACTER THO NANGMONTHO;Lo;0;L;;;;;N;THAI LETTER THO NANGMONTHO;;;; 0E12;THAI CHARACTER THO PHUTHAO;Lo;0;L;;;;;N;THAI LETTER THO PHUTHAO;;;; 0E13;THAI CHARACTER NO NEN;Lo;0;L;;;;;N;THAI LETTER NO NEN;;;; 0E14;THAI CHARACTER DO DEK;Lo;0;L;;;;;N;THAI LETTER DO DEK;;;; 0E15;THAI CHARACTER TO TAO;Lo;0;L;;;;;N;THAI LETTER TO TAO;;;; 0E16;THAI CHARACTER THO THUNG;Lo;0;L;;;;;N;THAI LETTER THO THUNG;;;; 0E17;THAI CHARACTER THO THAHAN;Lo;0;L;;;;;N;THAI LETTER THO THAHAN;;;; 0E18;THAI CHARACTER THO THONG;Lo;0;L;;;;;N;THAI LETTER THO THONG;;;; 0E19;THAI CHARACTER NO NU;Lo;0;L;;;;;N;THAI LETTER NO NU;;;; 0E1A;THAI CHARACTER BO BAIMAI;Lo;0;L;;;;;N;THAI LETTER BO BAIMAI;;;; 0E1B;THAI CHARACTER PO PLA;Lo;0;L;;;;;N;THAI LETTER PO PLA;;;; 0E1C;THAI CHARACTER PHO PHUNG;Lo;0;L;;;;;N;THAI LETTER PHO PHUNG;;;; 0E1D;THAI CHARACTER FO FA;Lo;0;L;;;;;N;THAI LETTER FO FA;;;; 0E1E;THAI CHARACTER PHO PHAN;Lo;0;L;;;;;N;THAI LETTER PHO PHAN;;;; 0E1F;THAI CHARACTER FO FAN;Lo;0;L;;;;;N;THAI LETTER FO FAN;;;; 0E20;THAI CHARACTER PHO SAMPHAO;Lo;0;L;;;;;N;THAI LETTER PHO SAMPHAO;;;; 0E21;THAI CHARACTER MO MA;Lo;0;L;;;;;N;THAI LETTER MO MA;;;; 0E22;THAI CHARACTER YO YAK;Lo;0;L;;;;;N;THAI LETTER YO YAK;;;; 0E23;THAI CHARACTER RO RUA;Lo;0;L;;;;;N;THAI LETTER RO RUA;;;; 0E24;THAI CHARACTER RU;Lo;0;L;;;;;N;THAI LETTER RU;;;; 0E25;THAI CHARACTER LO LING;Lo;0;L;;;;;N;THAI LETTER LO LING;;;; 0E26;THAI CHARACTER LU;Lo;0;L;;;;;N;THAI LETTER LU;;;; 0E27;THAI CHARACTER WO WAEN;Lo;0;L;;;;;N;THAI LETTER WO WAEN;;;; 0E28;THAI CHARACTER SO SALA;Lo;0;L;;;;;N;THAI LETTER SO SALA;;;; 0E29;THAI CHARACTER SO RUSI;Lo;0;L;;;;;N;THAI LETTER SO RUSI;;;; 0E2A;THAI CHARACTER SO SUA;Lo;0;L;;;;;N;THAI LETTER SO SUA;;;; 0E2B;THAI CHARACTER HO HIP;Lo;0;L;;;;;N;THAI LETTER HO HIP;;;; 0E2C;THAI CHARACTER LO CHULA;Lo;0;L;;;;;N;THAI LETTER LO CHULA;;;; 0E2D;THAI CHARACTER O ANG;Lo;0;L;;;;;N;THAI LETTER O ANG;;;; 0E2E;THAI CHARACTER HO NOKHUK;Lo;0;L;;;;;N;THAI LETTER HO NOK HUK;;;; 0E2F;THAI CHARACTER PAIYANNOI;Lo;0;L;;;;;N;THAI PAI YAN NOI;paiyan noi;;; 0E30;THAI CHARACTER SARA A;Lo;0;L;;;;;N;THAI VOWEL SIGN SARA A;;;; 0E31;THAI CHARACTER MAI HAN-AKAT;Mn;0;NSM;;;;;N;THAI VOWEL SIGN MAI HAN-AKAT;;;; 0E32;THAI CHARACTER SARA AA;Lo;0;L;;;;;N;THAI VOWEL SIGN SARA AA;;;; 0E33;THAI CHARACTER SARA AM;Lo;0;L; 0E4D 0E32;;;;N;THAI VOWEL SIGN SARA AM;;;; 0E34;THAI CHARACTER SARA I;Mn;0;NSM;;;;;N;THAI VOWEL SIGN SARA I;;;; 0E35;THAI CHARACTER SARA II;Mn;0;NSM;;;;;N;THAI VOWEL SIGN SARA II;;;; 0E36;THAI CHARACTER SARA UE;Mn;0;NSM;;;;;N;THAI VOWEL SIGN SARA UE;;;; 0E37;THAI CHARACTER SARA UEE;Mn;0;NSM;;;;;N;THAI VOWEL SIGN SARA UEE;sara uue;;; 0E38;THAI CHARACTER SARA U;Mn;103;NSM;;;;;N;THAI VOWEL SIGN SARA U;;;; 0E39;THAI CHARACTER SARA UU;Mn;103;NSM;;;;;N;THAI VOWEL SIGN SARA UU;;;; 0E3A;THAI CHARACTER PHINTHU;Mn;9;NSM;;;;;N;THAI VOWEL SIGN PHINTHU;;;; 0E3F;THAI CURRENCY SYMBOL BAHT;Sc;0;ET;;;;;N;THAI BAHT SIGN;;;; 0E40;THAI CHARACTER SARA E;Lo;0;L;;;;;N;THAI VOWEL SIGN SARA E;;;; 0E41;THAI CHARACTER SARA AE;Lo;0;L;;;;;N;THAI VOWEL SIGN SARA AE;;;; 0E42;THAI CHARACTER SARA O;Lo;0;L;;;;;N;THAI VOWEL SIGN SARA O;;;; 0E43;THAI CHARACTER SARA AI MAIMUAN;Lo;0;L;;;;;N;THAI VOWEL SIGN SARA MAI MUAN;sara ai mai muan;;; 0E44;THAI CHARACTER SARA AI MAIMALAI;Lo;0;L;;;;;N;THAI VOWEL SIGN SARA MAI MALAI;sara ai mai malai;;; 0E45;THAI CHARACTER LAKKHANGYAO;Lo;0;L;;;;;N;THAI LAK KHANG YAO;lakkhang yao;;; 0E46;THAI CHARACTER MAIYAMOK;Lm;0;L;;;;;N;THAI MAI YAMOK;mai yamok;;; 0E47;THAI CHARACTER MAITAIKHU;Mn;0;NSM;;;;;N;THAI VOWEL SIGN MAI TAI KHU;mai taikhu;;; 0E48;THAI CHARACTER MAI EK;Mn;107;NSM;;;;;N;THAI TONE MAI EK;;;; 0E49;THAI CHARACTER MAI THO;Mn;107;NSM;;;;;N;THAI TONE MAI THO;;;; 0E4A;THAI CHARACTER MAI TRI;Mn;107;NSM;;;;;N;THAI TONE MAI TRI;;;; 0E4B;THAI CHARACTER MAI CHATTAWA;Mn;107;NSM;;;;;N;THAI TONE MAI CHATTAWA;;;; 0E4C;THAI CHARACTER THANTHAKHAT;Mn;0;NSM;;;;;N;THAI THANTHAKHAT;;;; 0E4D;THAI CHARACTER NIKHAHIT;Mn;0;NSM;;;;;N;THAI NIKKHAHIT;nikkhahit;;; 0E4E;THAI CHARACTER YAMAKKAN;Mn;0;NSM;;;;;N;THAI YAMAKKAN;;;; 0E4F;THAI CHARACTER FONGMAN;Po;0;L;;;;;N;THAI FONGMAN;;;; 0E50;THAI DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;; 0E51;THAI DIGIT ONE;Nd;0;L;;1;1;1;N;;;;; 0E52;THAI DIGIT TWO;Nd;0;L;;2;2;2;N;;;;; 0E53;THAI DIGIT THREE;Nd;0;L;;3;3;3;N;;;;; 0E54;THAI DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;; 0E55;THAI DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;; 0E56;THAI DIGIT SIX;Nd;0;L;;6;6;6;N;;;;; 0E57;THAI DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;; 0E58;THAI DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;; 0E59;THAI DIGIT NINE;Nd;0;L;;9;9;9;N;;;;; 0E5A;THAI CHARACTER ANGKHANKHU;Po;0;L;;;;;N;THAI ANGKHANKHU;;;; 0E5B;THAI CHARACTER KHOMUT;Po;0;L;;;;;N;THAI KHOMUT;;;; 0E81;LAO LETTER KO;Lo;0;L;;;;;N;;;;; 0E82;LAO LETTER KHO SUNG;Lo;0;L;;;;;N;;;;; 0E84;LAO LETTER KHO TAM;Lo;0;L;;;;;N;;;;; 0E87;LAO LETTER NGO;Lo;0;L;;;;;N;;;;; 0E88;LAO LETTER CO;Lo;0;L;;;;;N;;;;; 0E8A;LAO LETTER SO TAM;Lo;0;L;;;;;N;;;;; 0E8D;LAO LETTER NYO;Lo;0;L;;;;;N;;;;; 0E94;LAO LETTER DO;Lo;0;L;;;;;N;;;;; 0E95;LAO LETTER TO;Lo;0;L;;;;;N;;;;; 0E96;LAO LETTER THO SUNG;Lo;0;L;;;;;N;;;;; 0E97;LAO LETTER THO TAM;Lo;0;L;;;;;N;;;;; 0E99;LAO LETTER NO;Lo;0;L;;;;;N;;;;; 0E9A;LAO LETTER BO;Lo;0;L;;;;;N;;;;; 0E9B;LAO LETTER PO;Lo;0;L;;;;;N;;;;; 0E9C;LAO LETTER PHO SUNG;Lo;0;L;;;;;N;;;;; 0E9D;LAO LETTER FO TAM;Lo;0;L;;;;;N;;;;; 0E9E;LAO LETTER PHO TAM;Lo;0;L;;;;;N;;;;; 0E9F;LAO LETTER FO SUNG;Lo;0;L;;;;;N;;;;; 0EA1;LAO LETTER MO;Lo;0;L;;;;;N;;;;; 0EA2;LAO LETTER YO;Lo;0;L;;;;;N;;;;; 0EA3;LAO LETTER LO LING;Lo;0;L;;;;;N;;;;; 0EA5;LAO LETTER LO LOOT;Lo;0;L;;;;;N;;;;; 0EA7;LAO LETTER WO;Lo;0;L;;;;;N;;;;; 0EAA;LAO LETTER SO SUNG;Lo;0;L;;;;;N;;;;; 0EAB;LAO LETTER HO SUNG;Lo;0;L;;;;;N;;;;; 0EAD;LAO LETTER O;Lo;0;L;;;;;N;;;;; 0EAE;LAO LETTER HO TAM;Lo;0;L;;;;;N;;;;; 0EAF;LAO ELLIPSIS;Lo;0;L;;;;;N;;;;; 0EB0;LAO VOWEL SIGN A;Lo;0;L;;;;;N;;;;; 0EB1;LAO VOWEL SIGN MAI KAN;Mn;0;NSM;;;;;N;;;;; 0EB2;LAO VOWEL SIGN AA;Lo;0;L;;;;;N;;;;; 0EB3;LAO VOWEL SIGN AM;Lo;0;L; 0ECD 0EB2;;;;N;;;;; 0EB4;LAO VOWEL SIGN I;Mn;0;NSM;;;;;N;;;;; 0EB5;LAO VOWEL SIGN II;Mn;0;NSM;;;;;N;;;;; 0EB6;LAO VOWEL SIGN Y;Mn;0;NSM;;;;;N;;;;; 0EB7;LAO VOWEL SIGN YY;Mn;0;NSM;;;;;N;;;;; 0EB8;LAO VOWEL SIGN U;Mn;118;NSM;;;;;N;;;;; 0EB9;LAO VOWEL SIGN UU;Mn;118;NSM;;;;;N;;;;; 0EBB;LAO VOWEL SIGN MAI KON;Mn;0;NSM;;;;;N;;;;; 0EBC;LAO SEMIVOWEL SIGN LO;Mn;0;NSM;;;;;N;;;;; 0EBD;LAO SEMIVOWEL SIGN NYO;Lo;0;L;;;;;N;;;;; 0EC0;LAO VOWEL SIGN E;Lo;0;L;;;;;N;;;;; 0EC1;LAO VOWEL SIGN EI;Lo;0;L;;;;;N;;;;; 0EC2;LAO VOWEL SIGN O;Lo;0;L;;;;;N;;;;; 0EC3;LAO VOWEL SIGN AY;Lo;0;L;;;;;N;;;;; 0EC4;LAO VOWEL SIGN AI;Lo;0;L;;;;;N;;;;; 0EC6;LAO KO LA;Lm;0;L;;;;;N;;;;; 0EC8;LAO TONE MAI EK;Mn;122;NSM;;;;;N;;;;; 0EC9;LAO TONE MAI THO;Mn;122;NSM;;;;;N;;;;; 0ECA;LAO TONE MAI TI;Mn;122;NSM;;;;;N;;;;; 0ECB;LAO TONE MAI CATAWA;Mn;122;NSM;;;;;N;;;;; 0ECC;LAO CANCELLATION MARK;Mn;0;NSM;;;;;N;;;;; 0ECD;LAO NIGGAHITA;Mn;0;NSM;;;;;N;;;;; 0ED0;LAO DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;; 0ED1;LAO DIGIT ONE;Nd;0;L;;1;1;1;N;;;;; 0ED2;LAO DIGIT TWO;Nd;0;L;;2;2;2;N;;;;; 0ED3;LAO DIGIT THREE;Nd;0;L;;3;3;3;N;;;;; 0ED4;LAO DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;; 0ED5;LAO DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;; 0ED6;LAO DIGIT SIX;Nd;0;L;;6;6;6;N;;;;; 0ED7;LAO DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;; 0ED8;LAO DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;; 0ED9;LAO DIGIT NINE;Nd;0;L;;9;9;9;N;;;;; 0EDC;LAO HO NO;Lo;0;L; 0EAB 0E99;;;;N;;;;; 0EDD;LAO HO MO;Lo;0;L; 0EAB 0EA1;;;;N;;;;; 0F00;TIBETAN SYLLABLE OM;Lo;0;L;;;;;N;;;;; 0F01;TIBETAN MARK GTER YIG MGO TRUNCATED A;So;0;L;;;;;N;;ter yik go a thung;;; 0F02;TIBETAN MARK GTER YIG MGO -UM RNAM BCAD MA;So;0;L;;;;;N;;ter yik go wum nam chey ma;;; 0F03;TIBETAN MARK GTER YIG MGO -UM GTER TSHEG MA;So;0;L;;;;;N;;ter yik go wum ter tsek ma;;; 0F04;TIBETAN MARK INITIAL YIG MGO MDUN MA;Po;0;L;;;;;N;TIBETAN SINGLE ORNAMENT;yik go dun ma;;; 0F05;TIBETAN MARK CLOSING YIG MGO SGAB MA;Po;0;L;;;;;N;;yik go kab ma;;; 0F06;TIBETAN MARK CARET YIG MGO PHUR SHAD MA;Po;0;L;;;;;N;;yik go pur shey ma;;; 0F07;TIBETAN MARK YIG MGO TSHEG SHAD MA;Po;0;L;;;;;N;;yik go tsek shey ma;;; 0F08;TIBETAN MARK SBRUL SHAD;Po;0;L;;;;;N;TIBETAN RGYANSHAD;drul shey;;; 0F09;TIBETAN MARK BSKUR YIG MGO;Po;0;L;;;;;N;;kur yik go;;; 0F0A;TIBETAN MARK BKA- SHOG YIG MGO;Po;0;L;;;;;N;;ka sho yik go;;; 0F0B;TIBETAN MARK INTERSYLLABIC TSHEG;Po;0;L;;;;;N;TIBETAN TSEG;tsek;;; 0F0C;TIBETAN MARK DELIMITER TSHEG BSTAR;Po;0;L; 0F0B;;;;N;;tsek tar;;; 0F0D;TIBETAN MARK SHAD;Po;0;L;;;;;N;TIBETAN SHAD;shey;;; 0F0E;TIBETAN MARK NYIS SHAD;Po;0;L;;;;;N;TIBETAN DOUBLE SHAD;nyi shey;;; 0F0F;TIBETAN MARK TSHEG SHAD;Po;0;L;;;;;N;;tsek shey;;; 0F10;TIBETAN MARK NYIS TSHEG SHAD;Po;0;L;;;;;N;;nyi tsek shey;;; 0F11;TIBETAN MARK RIN CHEN SPUNGS SHAD;Po;0;L;;;;;N;TIBETAN RINCHANPHUNGSHAD;rinchen pung shey;;; 0F12;TIBETAN MARK RGYA GRAM SHAD;Po;0;L;;;;;N;;gya tram shey;;; 0F13;TIBETAN MARK CARET -DZUD RTAGS ME LONG CAN;So;0;L;;;;;N;;dzu ta me long chen;;; 0F14;TIBETAN MARK GTER TSHEG;So;0;L;;;;;N;TIBETAN COMMA;ter tsek;;; 0F15;TIBETAN LOGOTYPE SIGN CHAD RTAGS;So;0;L;;;;;N;;che ta;;; 0F16;TIBETAN LOGOTYPE SIGN LHAG RTAGS;So;0;L;;;;;N;;hlak ta;;; 0F17;TIBETAN ASTROLOGICAL SIGN SGRA GCAN -CHAR RTAGS;So;0;L;;;;;N;;trachen char ta;;; 0F18;TIBETAN ASTROLOGICAL SIGN -KHYUD PA;Mn;220;NSM;;;;;N;;kyu pa;;; 0F19;TIBETAN ASTROLOGICAL SIGN SDONG TSHUGS;Mn;220;NSM;;;;;N;;dong tsu;;; 0F1A;TIBETAN SIGN RDEL DKAR GCIG;So;0;L;;;;;N;;deka chig;;; 0F1B;TIBETAN SIGN RDEL DKAR GNYIS;So;0;L;;;;;N;;deka nyi;;; 0F1C;TIBETAN SIGN RDEL DKAR GSUM;So;0;L;;;;;N;;deka sum;;; 0F1D;TIBETAN SIGN RDEL NAG GCIG;So;0;L;;;;;N;;dena chig;;; 0F1E;TIBETAN SIGN RDEL NAG GNYIS;So;0;L;;;;;N;;dena nyi;;; 0F1F;TIBETAN SIGN RDEL DKAR RDEL NAG;So;0;L;;;;;N;;deka dena;;; 0F20;TIBETAN DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;; 0F21;TIBETAN DIGIT ONE;Nd;0;L;;1;1;1;N;;;;; 0F22;TIBETAN DIGIT TWO;Nd;0;L;;2;2;2;N;;;;; 0F23;TIBETAN DIGIT THREE;Nd;0;L;;3;3;3;N;;;;; 0F24;TIBETAN DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;; 0F25;TIBETAN DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;; 0F26;TIBETAN DIGIT SIX;Nd;0;L;;6;6;6;N;;;;; 0F27;TIBETAN DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;; 0F28;TIBETAN DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;; 0F29;TIBETAN DIGIT NINE;Nd;0;L;;9;9;9;N;;;;; 0F2A;TIBETAN DIGIT HALF ONE;No;0;L;;;;1/2;N;;;;; 0F2B;TIBETAN DIGIT HALF TWO;No;0;L;;;;3/2;N;;;;; 0F2C;TIBETAN DIGIT HALF THREE;No;0;L;;;;5/2;N;;;;; 0F2D;TIBETAN DIGIT HALF FOUR;No;0;L;;;;7/2;N;;;;; 0F2E;TIBETAN DIGIT HALF FIVE;No;0;L;;;;9/2;N;;;;; 0F2F;TIBETAN DIGIT HALF SIX;No;0;L;;;;11/2;N;;;;; 0F30;TIBETAN DIGIT HALF SEVEN;No;0;L;;;;13/2;N;;;;; 0F31;TIBETAN DIGIT HALF EIGHT;No;0;L;;;;15/2;N;;;;; 0F32;TIBETAN DIGIT HALF NINE;No;0;L;;;;17/2;N;;;;; 0F33;TIBETAN DIGIT HALF ZERO;No;0;L;;;;-1/2;N;;;;; 0F34;TIBETAN MARK BSDUS RTAGS;So;0;L;;;;;N;;du ta;;; 0F35;TIBETAN MARK NGAS BZUNG NYI ZLA;Mn;220;NSM;;;;;N;TIBETAN HONORIFIC UNDER RING;nge zung nyi da;;; 0F36;TIBETAN MARK CARET -DZUD RTAGS BZHI MIG CAN;So;0;L;;;;;N;;dzu ta shi mig chen;;; 0F37;TIBETAN MARK NGAS BZUNG SGOR RTAGS;Mn;220;NSM;;;;;N;TIBETAN UNDER RING;nge zung gor ta;;; 0F38;TIBETAN MARK CHE MGO;So;0;L;;;;;N;;che go;;; 0F39;TIBETAN MARK TSA -PHRU;Mn;216;NSM;;;;;N;TIBETAN LENITION MARK;tsa tru;;; 0F3A;TIBETAN MARK GUG RTAGS GYON;Ps;0;ON;;;;;N;;gug ta yun;;; 0F3B;TIBETAN MARK GUG RTAGS GYAS;Pe;0;ON;;;;;N;;gug ta ye;;; 0F3C;TIBETAN MARK ANG KHANG GYON;Ps;0;ON;;;;;N;TIBETAN LEFT BRACE;ang kang yun;;; 0F3D;TIBETAN MARK ANG KHANG GYAS;Pe;0;ON;;;;;N;TIBETAN RIGHT BRACE;ang kang ye;;; 0F3E;TIBETAN SIGN YAR TSHES;Mc;0;L;;;;;N;;yar tse;;; 0F3F;TIBETAN SIGN MAR TSHES;Mc;0;L;;;;;N;;mar tse;;; 0F40;TIBETAN LETTER KA;Lo;0;L;;;;;N;;;;; 0F41;TIBETAN LETTER KHA;Lo;0;L;;;;;N;;;;; 0F42;TIBETAN LETTER GA;Lo;0;L;;;;;N;;;;; 0F43;TIBETAN LETTER GHA;Lo;0;L;0F42 0FB7;;;;N;;;;; 0F44;TIBETAN LETTER NGA;Lo;0;L;;;;;N;;;;; 0F45;TIBETAN LETTER CA;Lo;0;L;;;;;N;;;;; 0F46;TIBETAN LETTER CHA;Lo;0;L;;;;;N;;;;; 0F47;TIBETAN LETTER JA;Lo;0;L;;;;;N;;;;; 0F49;TIBETAN LETTER NYA;Lo;0;L;;;;;N;;;;; 0F4A;TIBETAN LETTER TTA;Lo;0;L;;;;;N;TIBETAN LETTER REVERSED TA;;;; 0F4B;TIBETAN LETTER TTHA;Lo;0;L;;;;;N;TIBETAN LETTER REVERSED THA;;;; 0F4C;TIBETAN LETTER DDA;Lo;0;L;;;;;N;TIBETAN LETTER REVERSED DA;;;; 0F4D;TIBETAN LETTER DDHA;Lo;0;L;0F4C 0FB7;;;;N;;;;; 0F4E;TIBETAN LETTER NNA;Lo;0;L;;;;;N;TIBETAN LETTER REVERSED NA;;;; 0F4F;TIBETAN LETTER TA;Lo;0;L;;;;;N;;;;; 0F50;TIBETAN LETTER THA;Lo;0;L;;;;;N;;;;; 0F51;TIBETAN LETTER DA;Lo;0;L;;;;;N;;;;; 0F52;TIBETAN LETTER DHA;Lo;0;L;0F51 0FB7;;;;N;;;;; 0F53;TIBETAN LETTER NA;Lo;0;L;;;;;N;;;;; 0F54;TIBETAN LETTER PA;Lo;0;L;;;;;N;;;;; 0F55;TIBETAN LETTER PHA;Lo;0;L;;;;;N;;;;; 0F56;TIBETAN LETTER BA;Lo;0;L;;;;;N;;;;; 0F57;TIBETAN LETTER BHA;Lo;0;L;0F56 0FB7;;;;N;;;;; 0F58;TIBETAN LETTER MA;Lo;0;L;;;;;N;;;;; 0F59;TIBETAN LETTER TSA;Lo;0;L;;;;;N;;;;; 0F5A;TIBETAN LETTER TSHA;Lo;0;L;;;;;N;;;;; 0F5B;TIBETAN LETTER DZA;Lo;0;L;;;;;N;;;;; 0F5C;TIBETAN LETTER DZHA;Lo;0;L;0F5B 0FB7;;;;N;;;;; 0F5D;TIBETAN LETTER WA;Lo;0;L;;;;;N;;;;; 0F5E;TIBETAN LETTER ZHA;Lo;0;L;;;;;N;;;;; 0F5F;TIBETAN LETTER ZA;Lo;0;L;;;;;N;;;;; 0F60;TIBETAN LETTER -A;Lo;0;L;;;;;N;TIBETAN LETTER AA;;;; 0F61;TIBETAN LETTER YA;Lo;0;L;;;;;N;;;;; 0F62;TIBETAN LETTER RA;Lo;0;L;;;;;N;;*;;; 0F63;TIBETAN LETTER LA;Lo;0;L;;;;;N;;;;; 0F64;TIBETAN LETTER SHA;Lo;0;L;;;;;N;;;;; 0F65;TIBETAN LETTER SSA;Lo;0;L;;;;;N;TIBETAN LETTER REVERSED SHA;;;; 0F66;TIBETAN LETTER SA;Lo;0;L;;;;;N;;;;; 0F67;TIBETAN LETTER HA;Lo;0;L;;;;;N;;;;; 0F68;TIBETAN LETTER A;Lo;0;L;;;;;N;;;;; 0F69;TIBETAN LETTER KSSA;Lo;0;L;0F40 0FB5;;;;N;;;;; 0F6A;TIBETAN LETTER FIXED-FORM RA;Lo;0;L;;;;;N;;*;;; 0F71;TIBETAN VOWEL SIGN AA;Mn;129;NSM;;;;;N;;;;; 0F72;TIBETAN VOWEL SIGN I;Mn;130;NSM;;;;;N;;;;; 0F73;TIBETAN VOWEL SIGN II;Mn;0;NSM;0F71 0F72;;;;N;;;;; 0F74;TIBETAN VOWEL SIGN U;Mn;132;NSM;;;;;N;;;;; 0F75;TIBETAN VOWEL SIGN UU;Mn;0;NSM;0F71 0F74;;;;N;;;;; 0F76;TIBETAN VOWEL SIGN VOCALIC R;Mn;0;NSM;0FB2 0F80;;;;N;;;;; 0F77;TIBETAN VOWEL SIGN VOCALIC RR;Mn;0;NSM; 0FB2 0F81;;;;N;;;;; 0F78;TIBETAN VOWEL SIGN VOCALIC L;Mn;0;NSM;0FB3 0F80;;;;N;;;;; 0F79;TIBETAN VOWEL SIGN VOCALIC LL;Mn;0;NSM; 0FB3 0F81;;;;N;;;;; 0F7A;TIBETAN VOWEL SIGN E;Mn;130;NSM;;;;;N;;;;; 0F7B;TIBETAN VOWEL SIGN EE;Mn;130;NSM;;;;;N;TIBETAN VOWEL SIGN AI;;;; 0F7C;TIBETAN VOWEL SIGN O;Mn;130;NSM;;;;;N;;;;; 0F7D;TIBETAN VOWEL SIGN OO;Mn;130;NSM;;;;;N;TIBETAN VOWEL SIGN AU;;;; 0F7E;TIBETAN SIGN RJES SU NGA RO;Mn;0;NSM;;;;;N;TIBETAN ANUSVARA;je su nga ro;;; 0F7F;TIBETAN SIGN RNAM BCAD;Mc;0;L;;;;;N;TIBETAN VISARGA;nam chey;;; 0F80;TIBETAN VOWEL SIGN REVERSED I;Mn;130;NSM;;;;;N;TIBETAN VOWEL SIGN SHORT I;;;; 0F81;TIBETAN VOWEL SIGN REVERSED II;Mn;0;NSM;0F71 0F80;;;;N;;;;; 0F82;TIBETAN SIGN NYI ZLA NAA DA;Mn;230;NSM;;;;;N;TIBETAN CANDRABINDU WITH ORNAMENT;nyi da na da;;; 0F83;TIBETAN SIGN SNA LDAN;Mn;230;NSM;;;;;N;TIBETAN CANDRABINDU;nan de;;; 0F84;TIBETAN MARK HALANTA;Mn;9;NSM;;;;;N;TIBETAN VIRAMA;;;; 0F85;TIBETAN MARK PALUTA;Po;0;L;;;;;N;TIBETAN CHUCHENYIGE;;;; 0F86;TIBETAN SIGN LCI RTAGS;Mn;230;NSM;;;;;N;;ji ta;;; 0F87;TIBETAN SIGN YANG RTAGS;Mn;230;NSM;;;;;N;;yang ta;;; 0F88;TIBETAN SIGN LCE TSA CAN;Lo;0;L;;;;;N;;che tsa chen;;; 0F89;TIBETAN SIGN MCHU CAN;Lo;0;L;;;;;N;;chu chen;;; 0F8A;TIBETAN SIGN GRU CAN RGYINGS;Lo;0;L;;;;;N;;tru chen ging;;; 0F8B;TIBETAN SIGN GRU MED RGYINGS;Lo;0;L;;;;;N;;tru me ging;;; 0F90;TIBETAN SUBJOINED LETTER KA;Mn;0;NSM;;;;;N;;;;; 0F91;TIBETAN SUBJOINED LETTER KHA;Mn;0;NSM;;;;;N;;;;; 0F92;TIBETAN SUBJOINED LETTER GA;Mn;0;NSM;;;;;N;;;;; 0F93;TIBETAN SUBJOINED LETTER GHA;Mn;0;NSM;0F92 0FB7;;;;N;;;;; 0F94;TIBETAN SUBJOINED LETTER NGA;Mn;0;NSM;;;;;N;;;;; 0F95;TIBETAN SUBJOINED LETTER CA;Mn;0;NSM;;;;;N;;;;; 0F96;TIBETAN SUBJOINED LETTER CHA;Mn;0;NSM;;;;;N;;;;; 0F97;TIBETAN SUBJOINED LETTER JA;Mn;0;NSM;;;;;N;;;;; 0F99;TIBETAN SUBJOINED LETTER NYA;Mn;0;NSM;;;;;N;;;;; 0F9A;TIBETAN SUBJOINED LETTER TTA;Mn;0;NSM;;;;;N;;;;; 0F9B;TIBETAN SUBJOINED LETTER TTHA;Mn;0;NSM;;;;;N;;;;; 0F9C;TIBETAN SUBJOINED LETTER DDA;Mn;0;NSM;;;;;N;;;;; 0F9D;TIBETAN SUBJOINED LETTER DDHA;Mn;0;NSM;0F9C 0FB7;;;;N;;;;; 0F9E;TIBETAN SUBJOINED LETTER NNA;Mn;0;NSM;;;;;N;;;;; 0F9F;TIBETAN SUBJOINED LETTER TA;Mn;0;NSM;;;;;N;;;;; 0FA0;TIBETAN SUBJOINED LETTER THA;Mn;0;NSM;;;;;N;;;;; 0FA1;TIBETAN SUBJOINED LETTER DA;Mn;0;NSM;;;;;N;;;;; 0FA2;TIBETAN SUBJOINED LETTER DHA;Mn;0;NSM;0FA1 0FB7;;;;N;;;;; 0FA3;TIBETAN SUBJOINED LETTER NA;Mn;0;NSM;;;;;N;;;;; 0FA4;TIBETAN SUBJOINED LETTER PA;Mn;0;NSM;;;;;N;;;;; 0FA5;TIBETAN SUBJOINED LETTER PHA;Mn;0;NSM;;;;;N;;;;; 0FA6;TIBETAN SUBJOINED LETTER BA;Mn;0;NSM;;;;;N;;;;; 0FA7;TIBETAN SUBJOINED LETTER BHA;Mn;0;NSM;0FA6 0FB7;;;;N;;;;; 0FA8;TIBETAN SUBJOINED LETTER MA;Mn;0;NSM;;;;;N;;;;; 0FA9;TIBETAN SUBJOINED LETTER TSA;Mn;0;NSM;;;;;N;;;;; 0FAA;TIBETAN SUBJOINED LETTER TSHA;Mn;0;NSM;;;;;N;;;;; 0FAB;TIBETAN SUBJOINED LETTER DZA;Mn;0;NSM;;;;;N;;;;; 0FAC;TIBETAN SUBJOINED LETTER DZHA;Mn;0;NSM;0FAB 0FB7;;;;N;;;;; 0FAD;TIBETAN SUBJOINED LETTER WA;Mn;0;NSM;;;;;N;;*;;; 0FAE;TIBETAN SUBJOINED LETTER ZHA;Mn;0;NSM;;;;;N;;;;; 0FAF;TIBETAN SUBJOINED LETTER ZA;Mn;0;NSM;;;;;N;;;;; 0FB0;TIBETAN SUBJOINED LETTER -A;Mn;0;NSM;;;;;N;;;;; 0FB1;TIBETAN SUBJOINED LETTER YA;Mn;0;NSM;;;;;N;;*;;; 0FB2;TIBETAN SUBJOINED LETTER RA;Mn;0;NSM;;;;;N;;*;;; 0FB3;TIBETAN SUBJOINED LETTER LA;Mn;0;NSM;;;;;N;;;;; 0FB4;TIBETAN SUBJOINED LETTER SHA;Mn;0;NSM;;;;;N;;;;; 0FB5;TIBETAN SUBJOINED LETTER SSA;Mn;0;NSM;;;;;N;;;;; 0FB6;TIBETAN SUBJOINED LETTER SA;Mn;0;NSM;;;;;N;;;;; 0FB7;TIBETAN SUBJOINED LETTER HA;Mn;0;NSM;;;;;N;;;;; 0FB8;TIBETAN SUBJOINED LETTER A;Mn;0;NSM;;;;;N;;;;; 0FB9;TIBETAN SUBJOINED LETTER KSSA;Mn;0;NSM;0F90 0FB5;;;;N;;;;; 0FBA;TIBETAN SUBJOINED LETTER FIXED-FORM WA;Mn;0;NSM;;;;;N;;*;;; 0FBB;TIBETAN SUBJOINED LETTER FIXED-FORM YA;Mn;0;NSM;;;;;N;;*;;; 0FBC;TIBETAN SUBJOINED LETTER FIXED-FORM RA;Mn;0;NSM;;;;;N;;*;;; 0FBE;TIBETAN KU RU KHA;So;0;L;;;;;N;;kuruka;;; 0FBF;TIBETAN KU RU KHA BZHI MIG CAN;So;0;L;;;;;N;;kuruka shi mik chen;;; 0FC0;TIBETAN CANTILLATION SIGN HEAVY BEAT;So;0;L;;;;;N;;;;; 0FC1;TIBETAN CANTILLATION SIGN LIGHT BEAT;So;0;L;;;;;N;;;;; 0FC2;TIBETAN CANTILLATION SIGN CANG TE-U;So;0;L;;;;;N;;chang tyu;;; 0FC3;TIBETAN CANTILLATION SIGN SBUB -CHAL;So;0;L;;;;;N;;bub chey;;; 0FC4;TIBETAN SYMBOL DRIL BU;So;0;L;;;;;N;;drilbu;;; 0FC5;TIBETAN SYMBOL RDO RJE;So;0;L;;;;;N;;dorje;;; 0FC6;TIBETAN SYMBOL PADMA GDAN;Mn;220;NSM;;;;;N;;pema den;;; 0FC7;TIBETAN SYMBOL RDO RJE RGYA GRAM;So;0;L;;;;;N;;dorje gya dram;;; 0FC8;TIBETAN SYMBOL PHUR PA;So;0;L;;;;;N;;phurba;;; 0FC9;TIBETAN SYMBOL NOR BU;So;0;L;;;;;N;;norbu;;; 0FCA;TIBETAN SYMBOL NOR BU NYIS -KHYIL;So;0;L;;;;;N;;norbu nyi khyi;;; 0FCB;TIBETAN SYMBOL NOR BU GSUM -KHYIL;So;0;L;;;;;N;;norbu sum khyi;;; 0FCC;TIBETAN SYMBOL NOR BU BZHI -KHYIL;So;0;L;;;;;N;;norbu shi khyi;;; 0FCF;TIBETAN SIGN RDEL NAG GSUM;So;0;L;;;;;N;;dena sum;;; 1000;MYANMAR LETTER KA;Lo;0;L;;;;;N;;;;; 1001;MYANMAR LETTER KHA;Lo;0;L;;;;;N;;;;; 1002;MYANMAR LETTER GA;Lo;0;L;;;;;N;;;;; 1003;MYANMAR LETTER GHA;Lo;0;L;;;;;N;;;;; 1004;MYANMAR LETTER NGA;Lo;0;L;;;;;N;;;;; 1005;MYANMAR LETTER CA;Lo;0;L;;;;;N;;;;; 1006;MYANMAR LETTER CHA;Lo;0;L;;;;;N;;;;; 1007;MYANMAR LETTER JA;Lo;0;L;;;;;N;;;;; 1008;MYANMAR LETTER JHA;Lo;0;L;;;;;N;;;;; 1009;MYANMAR LETTER NYA;Lo;0;L;;;;;N;;;;; 100A;MYANMAR LETTER NNYA;Lo;0;L;;;;;N;;;;; 100B;MYANMAR LETTER TTA;Lo;0;L;;;;;N;;;;; 100C;MYANMAR LETTER TTHA;Lo;0;L;;;;;N;;;;; 100D;MYANMAR LETTER DDA;Lo;0;L;;;;;N;;;;; 100E;MYANMAR LETTER DDHA;Lo;0;L;;;;;N;;;;; 100F;MYANMAR LETTER NNA;Lo;0;L;;;;;N;;;;; 1010;MYANMAR LETTER TA;Lo;0;L;;;;;N;;;;; 1011;MYANMAR LETTER THA;Lo;0;L;;;;;N;;;;; 1012;MYANMAR LETTER DA;Lo;0;L;;;;;N;;;;; 1013;MYANMAR LETTER DHA;Lo;0;L;;;;;N;;;;; 1014;MYANMAR LETTER NA;Lo;0;L;;;;;N;;;;; 1015;MYANMAR LETTER PA;Lo;0;L;;;;;N;;;;; 1016;MYANMAR LETTER PHA;Lo;0;L;;;;;N;;;;; 1017;MYANMAR LETTER BA;Lo;0;L;;;;;N;;;;; 1018;MYANMAR LETTER BHA;Lo;0;L;;;;;N;;;;; 1019;MYANMAR LETTER MA;Lo;0;L;;;;;N;;;;; 101A;MYANMAR LETTER YA;Lo;0;L;;;;;N;;;;; 101B;MYANMAR LETTER RA;Lo;0;L;;;;;N;;;;; 101C;MYANMAR LETTER LA;Lo;0;L;;;;;N;;;;; 101D;MYANMAR LETTER WA;Lo;0;L;;;;;N;;;;; 101E;MYANMAR LETTER SA;Lo;0;L;;;;;N;;;;; 101F;MYANMAR LETTER HA;Lo;0;L;;;;;N;;;;; 1020;MYANMAR LETTER LLA;Lo;0;L;;;;;N;;;;; 1021;MYANMAR LETTER A;Lo;0;L;;;;;N;;;;; 1023;MYANMAR LETTER I;Lo;0;L;;;;;N;;;;; 1024;MYANMAR LETTER II;Lo;0;L;;;;;N;;;;; 1025;MYANMAR LETTER U;Lo;0;L;;;;;N;;;;; 1026;MYANMAR LETTER UU;Lo;0;L;1025 102E;;;;N;;;;; 1027;MYANMAR LETTER E;Lo;0;L;;;;;N;;;;; 1029;MYANMAR LETTER O;Lo;0;L;;;;;N;;;;; 102A;MYANMAR LETTER AU;Lo;0;L;;;;;N;;;;; 102C;MYANMAR VOWEL SIGN AA;Mc;0;L;;;;;N;;;;; 102D;MYANMAR VOWEL SIGN I;Mn;0;NSM;;;;;N;;;;; 102E;MYANMAR VOWEL SIGN II;Mn;0;NSM;;;;;N;;;;; 102F;MYANMAR VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;; 1030;MYANMAR VOWEL SIGN UU;Mn;0;NSM;;;;;N;;;;; 1031;MYANMAR VOWEL SIGN E;Mc;0;L;;;;;N;;;;; 1032;MYANMAR VOWEL SIGN AI;Mn;0;NSM;;;;;N;;;;; 1036;MYANMAR SIGN ANUSVARA;Mn;0;NSM;;;;;N;;;;; 1037;MYANMAR SIGN DOT BELOW;Mn;7;NSM;;;;;N;;;;; 1038;MYANMAR SIGN VISARGA;Mc;0;L;;;;;N;;;;; 1039;MYANMAR SIGN VIRAMA;Mn;9;NSM;;;;;N;;;;; 1040;MYANMAR DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;; 1041;MYANMAR DIGIT ONE;Nd;0;L;;1;1;1;N;;;;; 1042;MYANMAR DIGIT TWO;Nd;0;L;;2;2;2;N;;;;; 1043;MYANMAR DIGIT THREE;Nd;0;L;;3;3;3;N;;;;; 1044;MYANMAR DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;; 1045;MYANMAR DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;; 1046;MYANMAR DIGIT SIX;Nd;0;L;;6;6;6;N;;;;; 1047;MYANMAR DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;; 1048;MYANMAR DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;; 1049;MYANMAR DIGIT NINE;Nd;0;L;;9;9;9;N;;;;; 104A;MYANMAR SIGN LITTLE SECTION;Po;0;L;;;;;N;;;;; 104B;MYANMAR SIGN SECTION;Po;0;L;;;;;N;;;;; 104C;MYANMAR SYMBOL LOCATIVE;Po;0;L;;;;;N;;;;; 104D;MYANMAR SYMBOL COMPLETED;Po;0;L;;;;;N;;;;; 104E;MYANMAR SYMBOL AFOREMENTIONED;Po;0;L;;;;;N;;;;; 104F;MYANMAR SYMBOL GENITIVE;Po;0;L;;;;;N;;;;; 1050;MYANMAR LETTER SHA;Lo;0;L;;;;;N;;;;; 1051;MYANMAR LETTER SSA;Lo;0;L;;;;;N;;;;; 1052;MYANMAR LETTER VOCALIC R;Lo;0;L;;;;;N;;;;; 1053;MYANMAR LETTER VOCALIC RR;Lo;0;L;;;;;N;;;;; 1054;MYANMAR LETTER VOCALIC L;Lo;0;L;;;;;N;;;;; 1055;MYANMAR LETTER VOCALIC LL;Lo;0;L;;;;;N;;;;; 1056;MYANMAR VOWEL SIGN VOCALIC R;Mc;0;L;;;;;N;;;;; 1057;MYANMAR VOWEL SIGN VOCALIC RR;Mc;0;L;;;;;N;;;;; 1058;MYANMAR VOWEL SIGN VOCALIC L;Mn;0;NSM;;;;;N;;;;; 1059;MYANMAR VOWEL SIGN VOCALIC LL;Mn;0;NSM;;;;;N;;;;; 10A0;GEORGIAN CAPITAL LETTER AN;Lu;0;L;;;;;N;;Khutsuri;;; 10A1;GEORGIAN CAPITAL LETTER BAN;Lu;0;L;;;;;N;;Khutsuri;;; 10A2;GEORGIAN CAPITAL LETTER GAN;Lu;0;L;;;;;N;;Khutsuri;;; 10A3;GEORGIAN CAPITAL LETTER DON;Lu;0;L;;;;;N;;Khutsuri;;; 10A4;GEORGIAN CAPITAL LETTER EN;Lu;0;L;;;;;N;;Khutsuri;;; 10A5;GEORGIAN CAPITAL LETTER VIN;Lu;0;L;;;;;N;;Khutsuri;;; 10A6;GEORGIAN CAPITAL LETTER ZEN;Lu;0;L;;;;;N;;Khutsuri;;; 10A7;GEORGIAN CAPITAL LETTER TAN;Lu;0;L;;;;;N;;Khutsuri;;; 10A8;GEORGIAN CAPITAL LETTER IN;Lu;0;L;;;;;N;;Khutsuri;;; 10A9;GEORGIAN CAPITAL LETTER KAN;Lu;0;L;;;;;N;;Khutsuri;;; 10AA;GEORGIAN CAPITAL LETTER LAS;Lu;0;L;;;;;N;;Khutsuri;;; 10AB;GEORGIAN CAPITAL LETTER MAN;Lu;0;L;;;;;N;;Khutsuri;;; 10AC;GEORGIAN CAPITAL LETTER NAR;Lu;0;L;;;;;N;;Khutsuri;;; 10AD;GEORGIAN CAPITAL LETTER ON;Lu;0;L;;;;;N;;Khutsuri;;; 10AE;GEORGIAN CAPITAL LETTER PAR;Lu;0;L;;;;;N;;Khutsuri;;; 10AF;GEORGIAN CAPITAL LETTER ZHAR;Lu;0;L;;;;;N;;Khutsuri;;; 10B0;GEORGIAN CAPITAL LETTER RAE;Lu;0;L;;;;;N;;Khutsuri;;; 10B1;GEORGIAN CAPITAL LETTER SAN;Lu;0;L;;;;;N;;Khutsuri;;; 10B2;GEORGIAN CAPITAL LETTER TAR;Lu;0;L;;;;;N;;Khutsuri;;; 10B3;GEORGIAN CAPITAL LETTER UN;Lu;0;L;;;;;N;;Khutsuri;;; 10B4;GEORGIAN CAPITAL LETTER PHAR;Lu;0;L;;;;;N;;Khutsuri;;; 10B5;GEORGIAN CAPITAL LETTER KHAR;Lu;0;L;;;;;N;;Khutsuri;;; 10B6;GEORGIAN CAPITAL LETTER GHAN;Lu;0;L;;;;;N;;Khutsuri;;; 10B7;GEORGIAN CAPITAL LETTER QAR;Lu;0;L;;;;;N;;Khutsuri;;; 10B8;GEORGIAN CAPITAL LETTER SHIN;Lu;0;L;;;;;N;;Khutsuri;;; 10B9;GEORGIAN CAPITAL LETTER CHIN;Lu;0;L;;;;;N;;Khutsuri;;; 10BA;GEORGIAN CAPITAL LETTER CAN;Lu;0;L;;;;;N;;Khutsuri;;; 10BB;GEORGIAN CAPITAL LETTER JIL;Lu;0;L;;;;;N;;Khutsuri;;; 10BC;GEORGIAN CAPITAL LETTER CIL;Lu;0;L;;;;;N;;Khutsuri;;; 10BD;GEORGIAN CAPITAL LETTER CHAR;Lu;0;L;;;;;N;;Khutsuri;;; 10BE;GEORGIAN CAPITAL LETTER XAN;Lu;0;L;;;;;N;;Khutsuri;;; 10BF;GEORGIAN CAPITAL LETTER JHAN;Lu;0;L;;;;;N;;Khutsuri;;; 10C0;GEORGIAN CAPITAL LETTER HAE;Lu;0;L;;;;;N;;Khutsuri;;; 10C1;GEORGIAN CAPITAL LETTER HE;Lu;0;L;;;;;N;;Khutsuri;;; 10C2;GEORGIAN CAPITAL LETTER HIE;Lu;0;L;;;;;N;;Khutsuri;;; 10C3;GEORGIAN CAPITAL LETTER WE;Lu;0;L;;;;;N;;Khutsuri;;; 10C4;GEORGIAN CAPITAL LETTER HAR;Lu;0;L;;;;;N;;Khutsuri;;; 10C5;GEORGIAN CAPITAL LETTER HOE;Lu;0;L;;;;;N;;Khutsuri;;; 10D0;GEORGIAN LETTER AN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER AN;;;; 10D1;GEORGIAN LETTER BAN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER BAN;;;; 10D2;GEORGIAN LETTER GAN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER GAN;;;; 10D3;GEORGIAN LETTER DON;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER DON;;;; 10D4;GEORGIAN LETTER EN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER EN;;;; 10D5;GEORGIAN LETTER VIN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER VIN;;;; 10D6;GEORGIAN LETTER ZEN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER ZEN;;;; 10D7;GEORGIAN LETTER TAN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER TAN;;;; 10D8;GEORGIAN LETTER IN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER IN;;;; 10D9;GEORGIAN LETTER KAN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER KAN;;;; 10DA;GEORGIAN LETTER LAS;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER LAS;;;; 10DB;GEORGIAN LETTER MAN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER MAN;;;; 10DC;GEORGIAN LETTER NAR;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER NAR;;;; 10DD;GEORGIAN LETTER ON;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER ON;;;; 10DE;GEORGIAN LETTER PAR;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER PAR;;;; 10DF;GEORGIAN LETTER ZHAR;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER ZHAR;;;; 10E0;GEORGIAN LETTER RAE;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER RAE;;;; 10E1;GEORGIAN LETTER SAN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER SAN;;;; 10E2;GEORGIAN LETTER TAR;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER TAR;;;; 10E3;GEORGIAN LETTER UN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER UN;;;; 10E4;GEORGIAN LETTER PHAR;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER PHAR;;;; 10E5;GEORGIAN LETTER KHAR;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER KHAR;;;; 10E6;GEORGIAN LETTER GHAN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER GHAN;;;; 10E7;GEORGIAN LETTER QAR;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER QAR;;;; 10E8;GEORGIAN LETTER SHIN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER SHIN;;;; 10E9;GEORGIAN LETTER CHIN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER CHIN;;;; 10EA;GEORGIAN LETTER CAN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER CAN;;;; 10EB;GEORGIAN LETTER JIL;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER JIL;;;; 10EC;GEORGIAN LETTER CIL;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER CIL;;;; 10ED;GEORGIAN LETTER CHAR;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER CHAR;;;; 10EE;GEORGIAN LETTER XAN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER XAN;;;; 10EF;GEORGIAN LETTER JHAN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER JHAN;;;; 10F0;GEORGIAN LETTER HAE;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER HAE;;;; 10F1;GEORGIAN LETTER HE;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER HE;;;; 10F2;GEORGIAN LETTER HIE;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER HIE;;;; 10F3;GEORGIAN LETTER WE;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER WE;;;; 10F4;GEORGIAN LETTER HAR;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER HAR;;;; 10F5;GEORGIAN LETTER HOE;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER HOE;;;; 10F6;GEORGIAN LETTER FI;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER FI;;;; 10FB;GEORGIAN PARAGRAPH SEPARATOR;Po;0;L;;;;;N;;;;; 1100;HANGUL CHOSEONG KIYEOK;Lo;0;L;;;;;N;;g *;;; 1101;HANGUL CHOSEONG SSANGKIYEOK;Lo;0;L;;;;;N;;gg *;;; 1102;HANGUL CHOSEONG NIEUN;Lo;0;L;;;;;N;;n *;;; 1103;HANGUL CHOSEONG TIKEUT;Lo;0;L;;;;;N;;d *;;; 1104;HANGUL CHOSEONG SSANGTIKEUT;Lo;0;L;;;;;N;;dd *;;; 1105;HANGUL CHOSEONG RIEUL;Lo;0;L;;;;;N;;r *;;; 1106;HANGUL CHOSEONG MIEUM;Lo;0;L;;;;;N;;m *;;; 1107;HANGUL CHOSEONG PIEUP;Lo;0;L;;;;;N;;b *;;; 1108;HANGUL CHOSEONG SSANGPIEUP;Lo;0;L;;;;;N;;bb *;;; 1109;HANGUL CHOSEONG SIOS;Lo;0;L;;;;;N;;s *;;; 110A;HANGUL CHOSEONG SSANGSIOS;Lo;0;L;;;;;N;;ss *;;; 110B;HANGUL CHOSEONG IEUNG;Lo;0;L;;;;;N;;;;; 110C;HANGUL CHOSEONG CIEUC;Lo;0;L;;;;;N;;j *;;; 110D;HANGUL CHOSEONG SSANGCIEUC;Lo;0;L;;;;;N;;jj *;;; 110E;HANGUL CHOSEONG CHIEUCH;Lo;0;L;;;;;N;;c *;;; 110F;HANGUL CHOSEONG KHIEUKH;Lo;0;L;;;;;N;;k *;;; 1110;HANGUL CHOSEONG THIEUTH;Lo;0;L;;;;;N;;t *;;; 1111;HANGUL CHOSEONG PHIEUPH;Lo;0;L;;;;;N;;p *;;; 1112;HANGUL CHOSEONG HIEUH;Lo;0;L;;;;;N;;h *;;; 1113;HANGUL CHOSEONG NIEUN-KIYEOK;Lo;0;L;;;;;N;;;;; 1114;HANGUL CHOSEONG SSANGNIEUN;Lo;0;L;;;;;N;;;;; 1115;HANGUL CHOSEONG NIEUN-TIKEUT;Lo;0;L;;;;;N;;;;; 1116;HANGUL CHOSEONG NIEUN-PIEUP;Lo;0;L;;;;;N;;;;; 1117;HANGUL CHOSEONG TIKEUT-KIYEOK;Lo;0;L;;;;;N;;;;; 1118;HANGUL CHOSEONG RIEUL-NIEUN;Lo;0;L;;;;;N;;;;; 1119;HANGUL CHOSEONG SSANGRIEUL;Lo;0;L;;;;;N;;;;; 111A;HANGUL CHOSEONG RIEUL-HIEUH;Lo;0;L;;;;;N;;;;; 111B;HANGUL CHOSEONG KAPYEOUNRIEUL;Lo;0;L;;;;;N;;;;; 111C;HANGUL CHOSEONG MIEUM-PIEUP;Lo;0;L;;;;;N;;;;; 111D;HANGUL CHOSEONG KAPYEOUNMIEUM;Lo;0;L;;;;;N;;;;; 111E;HANGUL CHOSEONG PIEUP-KIYEOK;Lo;0;L;;;;;N;;;;; 111F;HANGUL CHOSEONG PIEUP-NIEUN;Lo;0;L;;;;;N;;;;; 1120;HANGUL CHOSEONG PIEUP-TIKEUT;Lo;0;L;;;;;N;;;;; 1121;HANGUL CHOSEONG PIEUP-SIOS;Lo;0;L;;;;;N;;;;; 1122;HANGUL CHOSEONG PIEUP-SIOS-KIYEOK;Lo;0;L;;;;;N;;;;; 1123;HANGUL CHOSEONG PIEUP-SIOS-TIKEUT;Lo;0;L;;;;;N;;;;; 1124;HANGUL CHOSEONG PIEUP-SIOS-PIEUP;Lo;0;L;;;;;N;;;;; 1125;HANGUL CHOSEONG PIEUP-SSANGSIOS;Lo;0;L;;;;;N;;;;; 1126;HANGUL CHOSEONG PIEUP-SIOS-CIEUC;Lo;0;L;;;;;N;;;;; 1127;HANGUL CHOSEONG PIEUP-CIEUC;Lo;0;L;;;;;N;;;;; 1128;HANGUL CHOSEONG PIEUP-CHIEUCH;Lo;0;L;;;;;N;;;;; 1129;HANGUL CHOSEONG PIEUP-THIEUTH;Lo;0;L;;;;;N;;;;; 112A;HANGUL CHOSEONG PIEUP-PHIEUPH;Lo;0;L;;;;;N;;;;; 112B;HANGUL CHOSEONG KAPYEOUNPIEUP;Lo;0;L;;;;;N;;;;; 112C;HANGUL CHOSEONG KAPYEOUNSSANGPIEUP;Lo;0;L;;;;;N;;;;; 112D;HANGUL CHOSEONG SIOS-KIYEOK;Lo;0;L;;;;;N;;;;; 112E;HANGUL CHOSEONG SIOS-NIEUN;Lo;0;L;;;;;N;;;;; 112F;HANGUL CHOSEONG SIOS-TIKEUT;Lo;0;L;;;;;N;;;;; 1130;HANGUL CHOSEONG SIOS-RIEUL;Lo;0;L;;;;;N;;;;; 1131;HANGUL CHOSEONG SIOS-MIEUM;Lo;0;L;;;;;N;;;;; 1132;HANGUL CHOSEONG SIOS-PIEUP;Lo;0;L;;;;;N;;;;; 1133;HANGUL CHOSEONG SIOS-PIEUP-KIYEOK;Lo;0;L;;;;;N;;;;; 1134;HANGUL CHOSEONG SIOS-SSANGSIOS;Lo;0;L;;;;;N;;;;; 1135;HANGUL CHOSEONG SIOS-IEUNG;Lo;0;L;;;;;N;;;;; 1136;HANGUL CHOSEONG SIOS-CIEUC;Lo;0;L;;;;;N;;;;; 1137;HANGUL CHOSEONG SIOS-CHIEUCH;Lo;0;L;;;;;N;;;;; 1138;HANGUL CHOSEONG SIOS-KHIEUKH;Lo;0;L;;;;;N;;;;; 1139;HANGUL CHOSEONG SIOS-THIEUTH;Lo;0;L;;;;;N;;;;; 113A;HANGUL CHOSEONG SIOS-PHIEUPH;Lo;0;L;;;;;N;;;;; 113B;HANGUL CHOSEONG SIOS-HIEUH;Lo;0;L;;;;;N;;;;; 113C;HANGUL CHOSEONG CHITUEUMSIOS;Lo;0;L;;;;;N;;;;; 113D;HANGUL CHOSEONG CHITUEUMSSANGSIOS;Lo;0;L;;;;;N;;;;; 113E;HANGUL CHOSEONG CEONGCHIEUMSIOS;Lo;0;L;;;;;N;;;;; 113F;HANGUL CHOSEONG CEONGCHIEUMSSANGSIOS;Lo;0;L;;;;;N;;;;; 1140;HANGUL CHOSEONG PANSIOS;Lo;0;L;;;;;N;;;;; 1141;HANGUL CHOSEONG IEUNG-KIYEOK;Lo;0;L;;;;;N;;;;; 1142;HANGUL CHOSEONG IEUNG-TIKEUT;Lo;0;L;;;;;N;;;;; 1143;HANGUL CHOSEONG IEUNG-MIEUM;Lo;0;L;;;;;N;;;;; 1144;HANGUL CHOSEONG IEUNG-PIEUP;Lo;0;L;;;;;N;;;;; 1145;HANGUL CHOSEONG IEUNG-SIOS;Lo;0;L;;;;;N;;;;; 1146;HANGUL CHOSEONG IEUNG-PANSIOS;Lo;0;L;;;;;N;;;;; 1147;HANGUL CHOSEONG SSANGIEUNG;Lo;0;L;;;;;N;;;;; 1148;HANGUL CHOSEONG IEUNG-CIEUC;Lo;0;L;;;;;N;;;;; 1149;HANGUL CHOSEONG IEUNG-CHIEUCH;Lo;0;L;;;;;N;;;;; 114A;HANGUL CHOSEONG IEUNG-THIEUTH;Lo;0;L;;;;;N;;;;; 114B;HANGUL CHOSEONG IEUNG-PHIEUPH;Lo;0;L;;;;;N;;;;; 114C;HANGUL CHOSEONG YESIEUNG;Lo;0;L;;;;;N;;;;; 114D;HANGUL CHOSEONG CIEUC-IEUNG;Lo;0;L;;;;;N;;;;; 114E;HANGUL CHOSEONG CHITUEUMCIEUC;Lo;0;L;;;;;N;;;;; 114F;HANGUL CHOSEONG CHITUEUMSSANGCIEUC;Lo;0;L;;;;;N;;;;; 1150;HANGUL CHOSEONG CEONGCHIEUMCIEUC;Lo;0;L;;;;;N;;;;; 1151;HANGUL CHOSEONG CEONGCHIEUMSSANGCIEUC;Lo;0;L;;;;;N;;;;; 1152;HANGUL CHOSEONG CHIEUCH-KHIEUKH;Lo;0;L;;;;;N;;;;; 1153;HANGUL CHOSEONG CHIEUCH-HIEUH;Lo;0;L;;;;;N;;;;; 1154;HANGUL CHOSEONG CHITUEUMCHIEUCH;Lo;0;L;;;;;N;;;;; 1155;HANGUL CHOSEONG CEONGCHIEUMCHIEUCH;Lo;0;L;;;;;N;;;;; 1156;HANGUL CHOSEONG PHIEUPH-PIEUP;Lo;0;L;;;;;N;;;;; 1157;HANGUL CHOSEONG KAPYEOUNPHIEUPH;Lo;0;L;;;;;N;;;;; 1158;HANGUL CHOSEONG SSANGHIEUH;Lo;0;L;;;;;N;;;;; 1159;HANGUL CHOSEONG YEORINHIEUH;Lo;0;L;;;;;N;;;;; 115F;HANGUL CHOSEONG FILLER;Lo;0;L;;;;;N;;;;; 1160;HANGUL JUNGSEONG FILLER;Lo;0;L;;;;;N;;;;; 1161;HANGUL JUNGSEONG A;Lo;0;L;;;;;N;;;;; 1162;HANGUL JUNGSEONG AE;Lo;0;L;;;;;N;;;;; 1163;HANGUL JUNGSEONG YA;Lo;0;L;;;;;N;;;;; 1164;HANGUL JUNGSEONG YAE;Lo;0;L;;;;;N;;;;; 1165;HANGUL JUNGSEONG EO;Lo;0;L;;;;;N;;;;; 1166;HANGUL JUNGSEONG E;Lo;0;L;;;;;N;;;;; 1167;HANGUL JUNGSEONG YEO;Lo;0;L;;;;;N;;;;; 1168;HANGUL JUNGSEONG YE;Lo;0;L;;;;;N;;;;; 1169;HANGUL JUNGSEONG O;Lo;0;L;;;;;N;;;;; 116A;HANGUL JUNGSEONG WA;Lo;0;L;;;;;N;;;;; 116B;HANGUL JUNGSEONG WAE;Lo;0;L;;;;;N;;;;; 116C;HANGUL JUNGSEONG OE;Lo;0;L;;;;;N;;;;; 116D;HANGUL JUNGSEONG YO;Lo;0;L;;;;;N;;;;; 116E;HANGUL JUNGSEONG U;Lo;0;L;;;;;N;;;;; 116F;HANGUL JUNGSEONG WEO;Lo;0;L;;;;;N;;;;; 1170;HANGUL JUNGSEONG WE;Lo;0;L;;;;;N;;;;; 1171;HANGUL JUNGSEONG WI;Lo;0;L;;;;;N;;;;; 1172;HANGUL JUNGSEONG YU;Lo;0;L;;;;;N;;;;; 1173;HANGUL JUNGSEONG EU;Lo;0;L;;;;;N;;;;; 1174;HANGUL JUNGSEONG YI;Lo;0;L;;;;;N;;;;; 1175;HANGUL JUNGSEONG I;Lo;0;L;;;;;N;;;;; 1176;HANGUL JUNGSEONG A-O;Lo;0;L;;;;;N;;;;; 1177;HANGUL JUNGSEONG A-U;Lo;0;L;;;;;N;;;;; 1178;HANGUL JUNGSEONG YA-O;Lo;0;L;;;;;N;;;;; 1179;HANGUL JUNGSEONG YA-YO;Lo;0;L;;;;;N;;;;; 117A;HANGUL JUNGSEONG EO-O;Lo;0;L;;;;;N;;;;; 117B;HANGUL JUNGSEONG EO-U;Lo;0;L;;;;;N;;;;; 117C;HANGUL JUNGSEONG EO-EU;Lo;0;L;;;;;N;;;;; 117D;HANGUL JUNGSEONG YEO-O;Lo;0;L;;;;;N;;;;; 117E;HANGUL JUNGSEONG YEO-U;Lo;0;L;;;;;N;;;;; 117F;HANGUL JUNGSEONG O-EO;Lo;0;L;;;;;N;;;;; 1180;HANGUL JUNGSEONG O-E;Lo;0;L;;;;;N;;;;; 1181;HANGUL JUNGSEONG O-YE;Lo;0;L;;;;;N;;;;; 1182;HANGUL JUNGSEONG O-O;Lo;0;L;;;;;N;;;;; 1183;HANGUL JUNGSEONG O-U;Lo;0;L;;;;;N;;;;; 1184;HANGUL JUNGSEONG YO-YA;Lo;0;L;;;;;N;;;;; 1185;HANGUL JUNGSEONG YO-YAE;Lo;0;L;;;;;N;;;;; 1186;HANGUL JUNGSEONG YO-YEO;Lo;0;L;;;;;N;;;;; 1187;HANGUL JUNGSEONG YO-O;Lo;0;L;;;;;N;;;;; 1188;HANGUL JUNGSEONG YO-I;Lo;0;L;;;;;N;;;;; 1189;HANGUL JUNGSEONG U-A;Lo;0;L;;;;;N;;;;; 118A;HANGUL JUNGSEONG U-AE;Lo;0;L;;;;;N;;;;; 118B;HANGUL JUNGSEONG U-EO-EU;Lo;0;L;;;;;N;;;;; 118C;HANGUL JUNGSEONG U-YE;Lo;0;L;;;;;N;;;;; 118D;HANGUL JUNGSEONG U-U;Lo;0;L;;;;;N;;;;; 118E;HANGUL JUNGSEONG YU-A;Lo;0;L;;;;;N;;;;; 118F;HANGUL JUNGSEONG YU-EO;Lo;0;L;;;;;N;;;;; 1190;HANGUL JUNGSEONG YU-E;Lo;0;L;;;;;N;;;;; 1191;HANGUL JUNGSEONG YU-YEO;Lo;0;L;;;;;N;;;;; 1192;HANGUL JUNGSEONG YU-YE;Lo;0;L;;;;;N;;;;; 1193;HANGUL JUNGSEONG YU-U;Lo;0;L;;;;;N;;;;; 1194;HANGUL JUNGSEONG YU-I;Lo;0;L;;;;;N;;;;; 1195;HANGUL JUNGSEONG EU-U;Lo;0;L;;;;;N;;;;; 1196;HANGUL JUNGSEONG EU-EU;Lo;0;L;;;;;N;;;;; 1197;HANGUL JUNGSEONG YI-U;Lo;0;L;;;;;N;;;;; 1198;HANGUL JUNGSEONG I-A;Lo;0;L;;;;;N;;;;; 1199;HANGUL JUNGSEONG I-YA;Lo;0;L;;;;;N;;;;; 119A;HANGUL JUNGSEONG I-O;Lo;0;L;;;;;N;;;;; 119B;HANGUL JUNGSEONG I-U;Lo;0;L;;;;;N;;;;; 119C;HANGUL JUNGSEONG I-EU;Lo;0;L;;;;;N;;;;; 119D;HANGUL JUNGSEONG I-ARAEA;Lo;0;L;;;;;N;;;;; 119E;HANGUL JUNGSEONG ARAEA;Lo;0;L;;;;;N;;;;; 119F;HANGUL JUNGSEONG ARAEA-EO;Lo;0;L;;;;;N;;;;; 11A0;HANGUL JUNGSEONG ARAEA-U;Lo;0;L;;;;;N;;;;; 11A1;HANGUL JUNGSEONG ARAEA-I;Lo;0;L;;;;;N;;;;; 11A2;HANGUL JUNGSEONG SSANGARAEA;Lo;0;L;;;;;N;;;;; 11A8;HANGUL JONGSEONG KIYEOK;Lo;0;L;;;;;N;;g *;;; 11A9;HANGUL JONGSEONG SSANGKIYEOK;Lo;0;L;;;;;N;;gg *;;; 11AA;HANGUL JONGSEONG KIYEOK-SIOS;Lo;0;L;;;;;N;;gs *;;; 11AB;HANGUL JONGSEONG NIEUN;Lo;0;L;;;;;N;;n *;;; 11AC;HANGUL JONGSEONG NIEUN-CIEUC;Lo;0;L;;;;;N;;nj *;;; 11AD;HANGUL JONGSEONG NIEUN-HIEUH;Lo;0;L;;;;;N;;nh *;;; 11AE;HANGUL JONGSEONG TIKEUT;Lo;0;L;;;;;N;;d *;;; 11AF;HANGUL JONGSEONG RIEUL;Lo;0;L;;;;;N;;l *;;; 11B0;HANGUL JONGSEONG RIEUL-KIYEOK;Lo;0;L;;;;;N;;lg *;;; 11B1;HANGUL JONGSEONG RIEUL-MIEUM;Lo;0;L;;;;;N;;lm *;;; 11B2;HANGUL JONGSEONG RIEUL-PIEUP;Lo;0;L;;;;;N;;lb *;;; 11B3;HANGUL JONGSEONG RIEUL-SIOS;Lo;0;L;;;;;N;;ls *;;; 11B4;HANGUL JONGSEONG RIEUL-THIEUTH;Lo;0;L;;;;;N;;lt *;;; 11B5;HANGUL JONGSEONG RIEUL-PHIEUPH;Lo;0;L;;;;;N;;lp *;;; 11B6;HANGUL JONGSEONG RIEUL-HIEUH;Lo;0;L;;;;;N;;lh *;;; 11B7;HANGUL JONGSEONG MIEUM;Lo;0;L;;;;;N;;m *;;; 11B8;HANGUL JONGSEONG PIEUP;Lo;0;L;;;;;N;;b *;;; 11B9;HANGUL JONGSEONG PIEUP-SIOS;Lo;0;L;;;;;N;;bs *;;; 11BA;HANGUL JONGSEONG SIOS;Lo;0;L;;;;;N;;s *;;; 11BB;HANGUL JONGSEONG SSANGSIOS;Lo;0;L;;;;;N;;ss *;;; 11BC;HANGUL JONGSEONG IEUNG;Lo;0;L;;;;;N;;ng *;;; 11BD;HANGUL JONGSEONG CIEUC;Lo;0;L;;;;;N;;j *;;; 11BE;HANGUL JONGSEONG CHIEUCH;Lo;0;L;;;;;N;;c *;;; 11BF;HANGUL JONGSEONG KHIEUKH;Lo;0;L;;;;;N;;k *;;; 11C0;HANGUL JONGSEONG THIEUTH;Lo;0;L;;;;;N;;t *;;; 11C1;HANGUL JONGSEONG PHIEUPH;Lo;0;L;;;;;N;;p *;;; 11C2;HANGUL JONGSEONG HIEUH;Lo;0;L;;;;;N;;h *;;; 11C3;HANGUL JONGSEONG KIYEOK-RIEUL;Lo;0;L;;;;;N;;;;; 11C4;HANGUL JONGSEONG KIYEOK-SIOS-KIYEOK;Lo;0;L;;;;;N;;;;; 11C5;HANGUL JONGSEONG NIEUN-KIYEOK;Lo;0;L;;;;;N;;;;; 11C6;HANGUL JONGSEONG NIEUN-TIKEUT;Lo;0;L;;;;;N;;;;; 11C7;HANGUL JONGSEONG NIEUN-SIOS;Lo;0;L;;;;;N;;;;; 11C8;HANGUL JONGSEONG NIEUN-PANSIOS;Lo;0;L;;;;;N;;;;; 11C9;HANGUL JONGSEONG NIEUN-THIEUTH;Lo;0;L;;;;;N;;;;; 11CA;HANGUL JONGSEONG TIKEUT-KIYEOK;Lo;0;L;;;;;N;;;;; 11CB;HANGUL JONGSEONG TIKEUT-RIEUL;Lo;0;L;;;;;N;;;;; 11CC;HANGUL JONGSEONG RIEUL-KIYEOK-SIOS;Lo;0;L;;;;;N;;;;; 11CD;HANGUL JONGSEONG RIEUL-NIEUN;Lo;0;L;;;;;N;;;;; 11CE;HANGUL JONGSEONG RIEUL-TIKEUT;Lo;0;L;;;;;N;;;;; 11CF;HANGUL JONGSEONG RIEUL-TIKEUT-HIEUH;Lo;0;L;;;;;N;;;;; 11D0;HANGUL JONGSEONG SSANGRIEUL;Lo;0;L;;;;;N;;;;; 11D1;HANGUL JONGSEONG RIEUL-MIEUM-KIYEOK;Lo;0;L;;;;;N;;;;; 11D2;HANGUL JONGSEONG RIEUL-MIEUM-SIOS;Lo;0;L;;;;;N;;;;; 11D3;HANGUL JONGSEONG RIEUL-PIEUP-SIOS;Lo;0;L;;;;;N;;;;; 11D4;HANGUL JONGSEONG RIEUL-PIEUP-HIEUH;Lo;0;L;;;;;N;;;;; 11D5;HANGUL JONGSEONG RIEUL-KAPYEOUNPIEUP;Lo;0;L;;;;;N;;;;; 11D6;HANGUL JONGSEONG RIEUL-SSANGSIOS;Lo;0;L;;;;;N;;;;; 11D7;HANGUL JONGSEONG RIEUL-PANSIOS;Lo;0;L;;;;;N;;;;; 11D8;HANGUL JONGSEONG RIEUL-KHIEUKH;Lo;0;L;;;;;N;;;;; 11D9;HANGUL JONGSEONG RIEUL-YEORINHIEUH;Lo;0;L;;;;;N;;;;; 11DA;HANGUL JONGSEONG MIEUM-KIYEOK;Lo;0;L;;;;;N;;;;; 11DB;HANGUL JONGSEONG MIEUM-RIEUL;Lo;0;L;;;;;N;;;;; 11DC;HANGUL JONGSEONG MIEUM-PIEUP;Lo;0;L;;;;;N;;;;; 11DD;HANGUL JONGSEONG MIEUM-SIOS;Lo;0;L;;;;;N;;;;; 11DE;HANGUL JONGSEONG MIEUM-SSANGSIOS;Lo;0;L;;;;;N;;;;; 11DF;HANGUL JONGSEONG MIEUM-PANSIOS;Lo;0;L;;;;;N;;;;; 11E0;HANGUL JONGSEONG MIEUM-CHIEUCH;Lo;0;L;;;;;N;;;;; 11E1;HANGUL JONGSEONG MIEUM-HIEUH;Lo;0;L;;;;;N;;;;; 11E2;HANGUL JONGSEONG KAPYEOUNMIEUM;Lo;0;L;;;;;N;;;;; 11E3;HANGUL JONGSEONG PIEUP-RIEUL;Lo;0;L;;;;;N;;;;; 11E4;HANGUL JONGSEONG PIEUP-PHIEUPH;Lo;0;L;;;;;N;;;;; 11E5;HANGUL JONGSEONG PIEUP-HIEUH;Lo;0;L;;;;;N;;;;; 11E6;HANGUL JONGSEONG KAPYEOUNPIEUP;Lo;0;L;;;;;N;;;;; 11E7;HANGUL JONGSEONG SIOS-KIYEOK;Lo;0;L;;;;;N;;;;; 11E8;HANGUL JONGSEONG SIOS-TIKEUT;Lo;0;L;;;;;N;;;;; 11E9;HANGUL JONGSEONG SIOS-RIEUL;Lo;0;L;;;;;N;;;;; 11EA;HANGUL JONGSEONG SIOS-PIEUP;Lo;0;L;;;;;N;;;;; 11EB;HANGUL JONGSEONG PANSIOS;Lo;0;L;;;;;N;;;;; 11EC;HANGUL JONGSEONG IEUNG-KIYEOK;Lo;0;L;;;;;N;;;;; 11ED;HANGUL JONGSEONG IEUNG-SSANGKIYEOK;Lo;0;L;;;;;N;;;;; 11EE;HANGUL JONGSEONG SSANGIEUNG;Lo;0;L;;;;;N;;;;; 11EF;HANGUL JONGSEONG IEUNG-KHIEUKH;Lo;0;L;;;;;N;;;;; 11F0;HANGUL JONGSEONG YESIEUNG;Lo;0;L;;;;;N;;;;; 11F1;HANGUL JONGSEONG YESIEUNG-SIOS;Lo;0;L;;;;;N;;;;; 11F2;HANGUL JONGSEONG YESIEUNG-PANSIOS;Lo;0;L;;;;;N;;;;; 11F3;HANGUL JONGSEONG PHIEUPH-PIEUP;Lo;0;L;;;;;N;;;;; 11F4;HANGUL JONGSEONG KAPYEOUNPHIEUPH;Lo;0;L;;;;;N;;;;; 11F5;HANGUL JONGSEONG HIEUH-NIEUN;Lo;0;L;;;;;N;;;;; 11F6;HANGUL JONGSEONG HIEUH-RIEUL;Lo;0;L;;;;;N;;;;; 11F7;HANGUL JONGSEONG HIEUH-MIEUM;Lo;0;L;;;;;N;;;;; 11F8;HANGUL JONGSEONG HIEUH-PIEUP;Lo;0;L;;;;;N;;;;; 11F9;HANGUL JONGSEONG YEORINHIEUH;Lo;0;L;;;;;N;;;;; 1200;ETHIOPIC SYLLABLE HA;Lo;0;L;;;;;N;;;;; 1201;ETHIOPIC SYLLABLE HU;Lo;0;L;;;;;N;;;;; 1202;ETHIOPIC SYLLABLE HI;Lo;0;L;;;;;N;;;;; 1203;ETHIOPIC SYLLABLE HAA;Lo;0;L;;;;;N;;;;; 1204;ETHIOPIC SYLLABLE HEE;Lo;0;L;;;;;N;;;;; 1205;ETHIOPIC SYLLABLE HE;Lo;0;L;;;;;N;;;;; 1206;ETHIOPIC SYLLABLE HO;Lo;0;L;;;;;N;;;;; 1208;ETHIOPIC SYLLABLE LA;Lo;0;L;;;;;N;;;;; 1209;ETHIOPIC SYLLABLE LU;Lo;0;L;;;;;N;;;;; 120A;ETHIOPIC SYLLABLE LI;Lo;0;L;;;;;N;;;;; 120B;ETHIOPIC SYLLABLE LAA;Lo;0;L;;;;;N;;;;; 120C;ETHIOPIC SYLLABLE LEE;Lo;0;L;;;;;N;;;;; 120D;ETHIOPIC SYLLABLE LE;Lo;0;L;;;;;N;;;;; 120E;ETHIOPIC SYLLABLE LO;Lo;0;L;;;;;N;;;;; 120F;ETHIOPIC SYLLABLE LWA;Lo;0;L;;;;;N;;;;; 1210;ETHIOPIC SYLLABLE HHA;Lo;0;L;;;;;N;;;;; 1211;ETHIOPIC SYLLABLE HHU;Lo;0;L;;;;;N;;;;; 1212;ETHIOPIC SYLLABLE HHI;Lo;0;L;;;;;N;;;;; 1213;ETHIOPIC SYLLABLE HHAA;Lo;0;L;;;;;N;;;;; 1214;ETHIOPIC SYLLABLE HHEE;Lo;0;L;;;;;N;;;;; 1215;ETHIOPIC SYLLABLE HHE;Lo;0;L;;;;;N;;;;; 1216;ETHIOPIC SYLLABLE HHO;Lo;0;L;;;;;N;;;;; 1217;ETHIOPIC SYLLABLE HHWA;Lo;0;L;;;;;N;;;;; 1218;ETHIOPIC SYLLABLE MA;Lo;0;L;;;;;N;;;;; 1219;ETHIOPIC SYLLABLE MU;Lo;0;L;;;;;N;;;;; 121A;ETHIOPIC SYLLABLE MI;Lo;0;L;;;;;N;;;;; 121B;ETHIOPIC SYLLABLE MAA;Lo;0;L;;;;;N;;;;; 121C;ETHIOPIC SYLLABLE MEE;Lo;0;L;;;;;N;;;;; 121D;ETHIOPIC SYLLABLE ME;Lo;0;L;;;;;N;;;;; 121E;ETHIOPIC SYLLABLE MO;Lo;0;L;;;;;N;;;;; 121F;ETHIOPIC SYLLABLE MWA;Lo;0;L;;;;;N;;;;; 1220;ETHIOPIC SYLLABLE SZA;Lo;0;L;;;;;N;;;;; 1221;ETHIOPIC SYLLABLE SZU;Lo;0;L;;;;;N;;;;; 1222;ETHIOPIC SYLLABLE SZI;Lo;0;L;;;;;N;;;;; 1223;ETHIOPIC SYLLABLE SZAA;Lo;0;L;;;;;N;;;;; 1224;ETHIOPIC SYLLABLE SZEE;Lo;0;L;;;;;N;;;;; 1225;ETHIOPIC SYLLABLE SZE;Lo;0;L;;;;;N;;;;; 1226;ETHIOPIC SYLLABLE SZO;Lo;0;L;;;;;N;;;;; 1227;ETHIOPIC SYLLABLE SZWA;Lo;0;L;;;;;N;;;;; 1228;ETHIOPIC SYLLABLE RA;Lo;0;L;;;;;N;;;;; 1229;ETHIOPIC SYLLABLE RU;Lo;0;L;;;;;N;;;;; 122A;ETHIOPIC SYLLABLE RI;Lo;0;L;;;;;N;;;;; 122B;ETHIOPIC SYLLABLE RAA;Lo;0;L;;;;;N;;;;; 122C;ETHIOPIC SYLLABLE REE;Lo;0;L;;;;;N;;;;; 122D;ETHIOPIC SYLLABLE RE;Lo;0;L;;;;;N;;;;; 122E;ETHIOPIC SYLLABLE RO;Lo;0;L;;;;;N;;;;; 122F;ETHIOPIC SYLLABLE RWA;Lo;0;L;;;;;N;;;;; 1230;ETHIOPIC SYLLABLE SA;Lo;0;L;;;;;N;;;;; 1231;ETHIOPIC SYLLABLE SU;Lo;0;L;;;;;N;;;;; 1232;ETHIOPIC SYLLABLE SI;Lo;0;L;;;;;N;;;;; 1233;ETHIOPIC SYLLABLE SAA;Lo;0;L;;;;;N;;;;; 1234;ETHIOPIC SYLLABLE SEE;Lo;0;L;;;;;N;;;;; 1235;ETHIOPIC SYLLABLE SE;Lo;0;L;;;;;N;;;;; 1236;ETHIOPIC SYLLABLE SO;Lo;0;L;;;;;N;;;;; 1237;ETHIOPIC SYLLABLE SWA;Lo;0;L;;;;;N;;;;; 1238;ETHIOPIC SYLLABLE SHA;Lo;0;L;;;;;N;;;;; 1239;ETHIOPIC SYLLABLE SHU;Lo;0;L;;;;;N;;;;; 123A;ETHIOPIC SYLLABLE SHI;Lo;0;L;;;;;N;;;;; 123B;ETHIOPIC SYLLABLE SHAA;Lo;0;L;;;;;N;;;;; 123C;ETHIOPIC SYLLABLE SHEE;Lo;0;L;;;;;N;;;;; 123D;ETHIOPIC SYLLABLE SHE;Lo;0;L;;;;;N;;;;; 123E;ETHIOPIC SYLLABLE SHO;Lo;0;L;;;;;N;;;;; 123F;ETHIOPIC SYLLABLE SHWA;Lo;0;L;;;;;N;;;;; 1240;ETHIOPIC SYLLABLE QA;Lo;0;L;;;;;N;;;;; 1241;ETHIOPIC SYLLABLE QU;Lo;0;L;;;;;N;;;;; 1242;ETHIOPIC SYLLABLE QI;Lo;0;L;;;;;N;;;;; 1243;ETHIOPIC SYLLABLE QAA;Lo;0;L;;;;;N;;;;; 1244;ETHIOPIC SYLLABLE QEE;Lo;0;L;;;;;N;;;;; 1245;ETHIOPIC SYLLABLE QE;Lo;0;L;;;;;N;;;;; 1246;ETHIOPIC SYLLABLE QO;Lo;0;L;;;;;N;;;;; 1248;ETHIOPIC SYLLABLE QWA;Lo;0;L;;;;;N;;;;; 124A;ETHIOPIC SYLLABLE QWI;Lo;0;L;;;;;N;;;;; 124B;ETHIOPIC SYLLABLE QWAA;Lo;0;L;;;;;N;;;;; 124C;ETHIOPIC SYLLABLE QWEE;Lo;0;L;;;;;N;;;;; 124D;ETHIOPIC SYLLABLE QWE;Lo;0;L;;;;;N;;;;; 1250;ETHIOPIC SYLLABLE QHA;Lo;0;L;;;;;N;;;;; 1251;ETHIOPIC SYLLABLE QHU;Lo;0;L;;;;;N;;;;; 1252;ETHIOPIC SYLLABLE QHI;Lo;0;L;;;;;N;;;;; 1253;ETHIOPIC SYLLABLE QHAA;Lo;0;L;;;;;N;;;;; 1254;ETHIOPIC SYLLABLE QHEE;Lo;0;L;;;;;N;;;;; 1255;ETHIOPIC SYLLABLE QHE;Lo;0;L;;;;;N;;;;; 1256;ETHIOPIC SYLLABLE QHO;Lo;0;L;;;;;N;;;;; 1258;ETHIOPIC SYLLABLE QHWA;Lo;0;L;;;;;N;;;;; 125A;ETHIOPIC SYLLABLE QHWI;Lo;0;L;;;;;N;;;;; 125B;ETHIOPIC SYLLABLE QHWAA;Lo;0;L;;;;;N;;;;; 125C;ETHIOPIC SYLLABLE QHWEE;Lo;0;L;;;;;N;;;;; 125D;ETHIOPIC SYLLABLE QHWE;Lo;0;L;;;;;N;;;;; 1260;ETHIOPIC SYLLABLE BA;Lo;0;L;;;;;N;;;;; 1261;ETHIOPIC SYLLABLE BU;Lo;0;L;;;;;N;;;;; 1262;ETHIOPIC SYLLABLE BI;Lo;0;L;;;;;N;;;;; 1263;ETHIOPIC SYLLABLE BAA;Lo;0;L;;;;;N;;;;; 1264;ETHIOPIC SYLLABLE BEE;Lo;0;L;;;;;N;;;;; 1265;ETHIOPIC SYLLABLE BE;Lo;0;L;;;;;N;;;;; 1266;ETHIOPIC SYLLABLE BO;Lo;0;L;;;;;N;;;;; 1267;ETHIOPIC SYLLABLE BWA;Lo;0;L;;;;;N;;;;; 1268;ETHIOPIC SYLLABLE VA;Lo;0;L;;;;;N;;;;; 1269;ETHIOPIC SYLLABLE VU;Lo;0;L;;;;;N;;;;; 126A;ETHIOPIC SYLLABLE VI;Lo;0;L;;;;;N;;;;; 126B;ETHIOPIC SYLLABLE VAA;Lo;0;L;;;;;N;;;;; 126C;ETHIOPIC SYLLABLE VEE;Lo;0;L;;;;;N;;;;; 126D;ETHIOPIC SYLLABLE VE;Lo;0;L;;;;;N;;;;; 126E;ETHIOPIC SYLLABLE VO;Lo;0;L;;;;;N;;;;; 126F;ETHIOPIC SYLLABLE VWA;Lo;0;L;;;;;N;;;;; 1270;ETHIOPIC SYLLABLE TA;Lo;0;L;;;;;N;;;;; 1271;ETHIOPIC SYLLABLE TU;Lo;0;L;;;;;N;;;;; 1272;ETHIOPIC SYLLABLE TI;Lo;0;L;;;;;N;;;;; 1273;ETHIOPIC SYLLABLE TAA;Lo;0;L;;;;;N;;;;; 1274;ETHIOPIC SYLLABLE TEE;Lo;0;L;;;;;N;;;;; 1275;ETHIOPIC SYLLABLE TE;Lo;0;L;;;;;N;;;;; 1276;ETHIOPIC SYLLABLE TO;Lo;0;L;;;;;N;;;;; 1277;ETHIOPIC SYLLABLE TWA;Lo;0;L;;;;;N;;;;; 1278;ETHIOPIC SYLLABLE CA;Lo;0;L;;;;;N;;;;; 1279;ETHIOPIC SYLLABLE CU;Lo;0;L;;;;;N;;;;; 127A;ETHIOPIC SYLLABLE CI;Lo;0;L;;;;;N;;;;; 127B;ETHIOPIC SYLLABLE CAA;Lo;0;L;;;;;N;;;;; 127C;ETHIOPIC SYLLABLE CEE;Lo;0;L;;;;;N;;;;; 127D;ETHIOPIC SYLLABLE CE;Lo;0;L;;;;;N;;;;; 127E;ETHIOPIC SYLLABLE CO;Lo;0;L;;;;;N;;;;; 127F;ETHIOPIC SYLLABLE CWA;Lo;0;L;;;;;N;;;;; 1280;ETHIOPIC SYLLABLE XA;Lo;0;L;;;;;N;;;;; 1281;ETHIOPIC SYLLABLE XU;Lo;0;L;;;;;N;;;;; 1282;ETHIOPIC SYLLABLE XI;Lo;0;L;;;;;N;;;;; 1283;ETHIOPIC SYLLABLE XAA;Lo;0;L;;;;;N;;;;; 1284;ETHIOPIC SYLLABLE XEE;Lo;0;L;;;;;N;;;;; 1285;ETHIOPIC SYLLABLE XE;Lo;0;L;;;;;N;;;;; 1286;ETHIOPIC SYLLABLE XO;Lo;0;L;;;;;N;;;;; 1288;ETHIOPIC SYLLABLE XWA;Lo;0;L;;;;;N;;;;; 128A;ETHIOPIC SYLLABLE XWI;Lo;0;L;;;;;N;;;;; 128B;ETHIOPIC SYLLABLE XWAA;Lo;0;L;;;;;N;;;;; 128C;ETHIOPIC SYLLABLE XWEE;Lo;0;L;;;;;N;;;;; 128D;ETHIOPIC SYLLABLE XWE;Lo;0;L;;;;;N;;;;; 1290;ETHIOPIC SYLLABLE NA;Lo;0;L;;;;;N;;;;; 1291;ETHIOPIC SYLLABLE NU;Lo;0;L;;;;;N;;;;; 1292;ETHIOPIC SYLLABLE NI;Lo;0;L;;;;;N;;;;; 1293;ETHIOPIC SYLLABLE NAA;Lo;0;L;;;;;N;;;;; 1294;ETHIOPIC SYLLABLE NEE;Lo;0;L;;;;;N;;;;; 1295;ETHIOPIC SYLLABLE NE;Lo;0;L;;;;;N;;;;; 1296;ETHIOPIC SYLLABLE NO;Lo;0;L;;;;;N;;;;; 1297;ETHIOPIC SYLLABLE NWA;Lo;0;L;;;;;N;;;;; 1298;ETHIOPIC SYLLABLE NYA;Lo;0;L;;;;;N;;;;; 1299;ETHIOPIC SYLLABLE NYU;Lo;0;L;;;;;N;;;;; 129A;ETHIOPIC SYLLABLE NYI;Lo;0;L;;;;;N;;;;; 129B;ETHIOPIC SYLLABLE NYAA;Lo;0;L;;;;;N;;;;; 129C;ETHIOPIC SYLLABLE NYEE;Lo;0;L;;;;;N;;;;; 129D;ETHIOPIC SYLLABLE NYE;Lo;0;L;;;;;N;;;;; 129E;ETHIOPIC SYLLABLE NYO;Lo;0;L;;;;;N;;;;; 129F;ETHIOPIC SYLLABLE NYWA;Lo;0;L;;;;;N;;;;; 12A0;ETHIOPIC SYLLABLE GLOTTAL A;Lo;0;L;;;;;N;;;;; 12A1;ETHIOPIC SYLLABLE GLOTTAL U;Lo;0;L;;;;;N;;;;; 12A2;ETHIOPIC SYLLABLE GLOTTAL I;Lo;0;L;;;;;N;;;;; 12A3;ETHIOPIC SYLLABLE GLOTTAL AA;Lo;0;L;;;;;N;;;;; 12A4;ETHIOPIC SYLLABLE GLOTTAL EE;Lo;0;L;;;;;N;;;;; 12A5;ETHIOPIC SYLLABLE GLOTTAL E;Lo;0;L;;;;;N;;;;; 12A6;ETHIOPIC SYLLABLE GLOTTAL O;Lo;0;L;;;;;N;;;;; 12A7;ETHIOPIC SYLLABLE GLOTTAL WA;Lo;0;L;;;;;N;;;;; 12A8;ETHIOPIC SYLLABLE KA;Lo;0;L;;;;;N;;;;; 12A9;ETHIOPIC SYLLABLE KU;Lo;0;L;;;;;N;;;;; 12AA;ETHIOPIC SYLLABLE KI;Lo;0;L;;;;;N;;;;; 12AB;ETHIOPIC SYLLABLE KAA;Lo;0;L;;;;;N;;;;; 12AC;ETHIOPIC SYLLABLE KEE;Lo;0;L;;;;;N;;;;; 12AD;ETHIOPIC SYLLABLE KE;Lo;0;L;;;;;N;;;;; 12AE;ETHIOPIC SYLLABLE KO;Lo;0;L;;;;;N;;;;; 12B0;ETHIOPIC SYLLABLE KWA;Lo;0;L;;;;;N;;;;; 12B2;ETHIOPIC SYLLABLE KWI;Lo;0;L;;;;;N;;;;; 12B3;ETHIOPIC SYLLABLE KWAA;Lo;0;L;;;;;N;;;;; 12B4;ETHIOPIC SYLLABLE KWEE;Lo;0;L;;;;;N;;;;; 12B5;ETHIOPIC SYLLABLE KWE;Lo;0;L;;;;;N;;;;; 12B8;ETHIOPIC SYLLABLE KXA;Lo;0;L;;;;;N;;;;; 12B9;ETHIOPIC SYLLABLE KXU;Lo;0;L;;;;;N;;;;; 12BA;ETHIOPIC SYLLABLE KXI;Lo;0;L;;;;;N;;;;; 12BB;ETHIOPIC SYLLABLE KXAA;Lo;0;L;;;;;N;;;;; 12BC;ETHIOPIC SYLLABLE KXEE;Lo;0;L;;;;;N;;;;; 12BD;ETHIOPIC SYLLABLE KXE;Lo;0;L;;;;;N;;;;; 12BE;ETHIOPIC SYLLABLE KXO;Lo;0;L;;;;;N;;;;; 12C0;ETHIOPIC SYLLABLE KXWA;Lo;0;L;;;;;N;;;;; 12C2;ETHIOPIC SYLLABLE KXWI;Lo;0;L;;;;;N;;;;; 12C3;ETHIOPIC SYLLABLE KXWAA;Lo;0;L;;;;;N;;;;; 12C4;ETHIOPIC SYLLABLE KXWEE;Lo;0;L;;;;;N;;;;; 12C5;ETHIOPIC SYLLABLE KXWE;Lo;0;L;;;;;N;;;;; 12C8;ETHIOPIC SYLLABLE WA;Lo;0;L;;;;;N;;;;; 12C9;ETHIOPIC SYLLABLE WU;Lo;0;L;;;;;N;;;;; 12CA;ETHIOPIC SYLLABLE WI;Lo;0;L;;;;;N;;;;; 12CB;ETHIOPIC SYLLABLE WAA;Lo;0;L;;;;;N;;;;; 12CC;ETHIOPIC SYLLABLE WEE;Lo;0;L;;;;;N;;;;; 12CD;ETHIOPIC SYLLABLE WE;Lo;0;L;;;;;N;;;;; 12CE;ETHIOPIC SYLLABLE WO;Lo;0;L;;;;;N;;;;; 12D0;ETHIOPIC SYLLABLE PHARYNGEAL A;Lo;0;L;;;;;N;;;;; 12D1;ETHIOPIC SYLLABLE PHARYNGEAL U;Lo;0;L;;;;;N;;;;; 12D2;ETHIOPIC SYLLABLE PHARYNGEAL I;Lo;0;L;;;;;N;;;;; 12D3;ETHIOPIC SYLLABLE PHARYNGEAL AA;Lo;0;L;;;;;N;;;;; 12D4;ETHIOPIC SYLLABLE PHARYNGEAL EE;Lo;0;L;;;;;N;;;;; 12D5;ETHIOPIC SYLLABLE PHARYNGEAL E;Lo;0;L;;;;;N;;;;; 12D6;ETHIOPIC SYLLABLE PHARYNGEAL O;Lo;0;L;;;;;N;;;;; 12D8;ETHIOPIC SYLLABLE ZA;Lo;0;L;;;;;N;;;;; 12D9;ETHIOPIC SYLLABLE ZU;Lo;0;L;;;;;N;;;;; 12DA;ETHIOPIC SYLLABLE ZI;Lo;0;L;;;;;N;;;;; 12DB;ETHIOPIC SYLLABLE ZAA;Lo;0;L;;;;;N;;;;; 12DC;ETHIOPIC SYLLABLE ZEE;Lo;0;L;;;;;N;;;;; 12DD;ETHIOPIC SYLLABLE ZE;Lo;0;L;;;;;N;;;;; 12DE;ETHIOPIC SYLLABLE ZO;Lo;0;L;;;;;N;;;;; 12DF;ETHIOPIC SYLLABLE ZWA;Lo;0;L;;;;;N;;;;; 12E0;ETHIOPIC SYLLABLE ZHA;Lo;0;L;;;;;N;;;;; 12E1;ETHIOPIC SYLLABLE ZHU;Lo;0;L;;;;;N;;;;; 12E2;ETHIOPIC SYLLABLE ZHI;Lo;0;L;;;;;N;;;;; 12E3;ETHIOPIC SYLLABLE ZHAA;Lo;0;L;;;;;N;;;;; 12E4;ETHIOPIC SYLLABLE ZHEE;Lo;0;L;;;;;N;;;;; 12E5;ETHIOPIC SYLLABLE ZHE;Lo;0;L;;;;;N;;;;; 12E6;ETHIOPIC SYLLABLE ZHO;Lo;0;L;;;;;N;;;;; 12E7;ETHIOPIC SYLLABLE ZHWA;Lo;0;L;;;;;N;;;;; 12E8;ETHIOPIC SYLLABLE YA;Lo;0;L;;;;;N;;;;; 12E9;ETHIOPIC SYLLABLE YU;Lo;0;L;;;;;N;;;;; 12EA;ETHIOPIC SYLLABLE YI;Lo;0;L;;;;;N;;;;; 12EB;ETHIOPIC SYLLABLE YAA;Lo;0;L;;;;;N;;;;; 12EC;ETHIOPIC SYLLABLE YEE;Lo;0;L;;;;;N;;;;; 12ED;ETHIOPIC SYLLABLE YE;Lo;0;L;;;;;N;;;;; 12EE;ETHIOPIC SYLLABLE YO;Lo;0;L;;;;;N;;;;; 12F0;ETHIOPIC SYLLABLE DA;Lo;0;L;;;;;N;;;;; 12F1;ETHIOPIC SYLLABLE DU;Lo;0;L;;;;;N;;;;; 12F2;ETHIOPIC SYLLABLE DI;Lo;0;L;;;;;N;;;;; 12F3;ETHIOPIC SYLLABLE DAA;Lo;0;L;;;;;N;;;;; 12F4;ETHIOPIC SYLLABLE DEE;Lo;0;L;;;;;N;;;;; 12F5;ETHIOPIC SYLLABLE DE;Lo;0;L;;;;;N;;;;; 12F6;ETHIOPIC SYLLABLE DO;Lo;0;L;;;;;N;;;;; 12F7;ETHIOPIC SYLLABLE DWA;Lo;0;L;;;;;N;;;;; 12F8;ETHIOPIC SYLLABLE DDA;Lo;0;L;;;;;N;;;;; 12F9;ETHIOPIC SYLLABLE DDU;Lo;0;L;;;;;N;;;;; 12FA;ETHIOPIC SYLLABLE DDI;Lo;0;L;;;;;N;;;;; 12FB;ETHIOPIC SYLLABLE DDAA;Lo;0;L;;;;;N;;;;; 12FC;ETHIOPIC SYLLABLE DDEE;Lo;0;L;;;;;N;;;;; 12FD;ETHIOPIC SYLLABLE DDE;Lo;0;L;;;;;N;;;;; 12FE;ETHIOPIC SYLLABLE DDO;Lo;0;L;;;;;N;;;;; 12FF;ETHIOPIC SYLLABLE DDWA;Lo;0;L;;;;;N;;;;; 1300;ETHIOPIC SYLLABLE JA;Lo;0;L;;;;;N;;;;; 1301;ETHIOPIC SYLLABLE JU;Lo;0;L;;;;;N;;;;; 1302;ETHIOPIC SYLLABLE JI;Lo;0;L;;;;;N;;;;; 1303;ETHIOPIC SYLLABLE JAA;Lo;0;L;;;;;N;;;;; 1304;ETHIOPIC SYLLABLE JEE;Lo;0;L;;;;;N;;;;; 1305;ETHIOPIC SYLLABLE JE;Lo;0;L;;;;;N;;;;; 1306;ETHIOPIC SYLLABLE JO;Lo;0;L;;;;;N;;;;; 1307;ETHIOPIC SYLLABLE JWA;Lo;0;L;;;;;N;;;;; 1308;ETHIOPIC SYLLABLE GA;Lo;0;L;;;;;N;;;;; 1309;ETHIOPIC SYLLABLE GU;Lo;0;L;;;;;N;;;;; 130A;ETHIOPIC SYLLABLE GI;Lo;0;L;;;;;N;;;;; 130B;ETHIOPIC SYLLABLE GAA;Lo;0;L;;;;;N;;;;; 130C;ETHIOPIC SYLLABLE GEE;Lo;0;L;;;;;N;;;;; 130D;ETHIOPIC SYLLABLE GE;Lo;0;L;;;;;N;;;;; 130E;ETHIOPIC SYLLABLE GO;Lo;0;L;;;;;N;;;;; 1310;ETHIOPIC SYLLABLE GWA;Lo;0;L;;;;;N;;;;; 1312;ETHIOPIC SYLLABLE GWI;Lo;0;L;;;;;N;;;;; 1313;ETHIOPIC SYLLABLE GWAA;Lo;0;L;;;;;N;;;;; 1314;ETHIOPIC SYLLABLE GWEE;Lo;0;L;;;;;N;;;;; 1315;ETHIOPIC SYLLABLE GWE;Lo;0;L;;;;;N;;;;; 1318;ETHIOPIC SYLLABLE GGA;Lo;0;L;;;;;N;;;;; 1319;ETHIOPIC SYLLABLE GGU;Lo;0;L;;;;;N;;;;; 131A;ETHIOPIC SYLLABLE GGI;Lo;0;L;;;;;N;;;;; 131B;ETHIOPIC SYLLABLE GGAA;Lo;0;L;;;;;N;;;;; 131C;ETHIOPIC SYLLABLE GGEE;Lo;0;L;;;;;N;;;;; 131D;ETHIOPIC SYLLABLE GGE;Lo;0;L;;;;;N;;;;; 131E;ETHIOPIC SYLLABLE GGO;Lo;0;L;;;;;N;;;;; 1320;ETHIOPIC SYLLABLE THA;Lo;0;L;;;;;N;;;;; 1321;ETHIOPIC SYLLABLE THU;Lo;0;L;;;;;N;;;;; 1322;ETHIOPIC SYLLABLE THI;Lo;0;L;;;;;N;;;;; 1323;ETHIOPIC SYLLABLE THAA;Lo;0;L;;;;;N;;;;; 1324;ETHIOPIC SYLLABLE THEE;Lo;0;L;;;;;N;;;;; 1325;ETHIOPIC SYLLABLE THE;Lo;0;L;;;;;N;;;;; 1326;ETHIOPIC SYLLABLE THO;Lo;0;L;;;;;N;;;;; 1327;ETHIOPIC SYLLABLE THWA;Lo;0;L;;;;;N;;;;; 1328;ETHIOPIC SYLLABLE CHA;Lo;0;L;;;;;N;;;;; 1329;ETHIOPIC SYLLABLE CHU;Lo;0;L;;;;;N;;;;; 132A;ETHIOPIC SYLLABLE CHI;Lo;0;L;;;;;N;;;;; 132B;ETHIOPIC SYLLABLE CHAA;Lo;0;L;;;;;N;;;;; 132C;ETHIOPIC SYLLABLE CHEE;Lo;0;L;;;;;N;;;;; 132D;ETHIOPIC SYLLABLE CHE;Lo;0;L;;;;;N;;;;; 132E;ETHIOPIC SYLLABLE CHO;Lo;0;L;;;;;N;;;;; 132F;ETHIOPIC SYLLABLE CHWA;Lo;0;L;;;;;N;;;;; 1330;ETHIOPIC SYLLABLE PHA;Lo;0;L;;;;;N;;;;; 1331;ETHIOPIC SYLLABLE PHU;Lo;0;L;;;;;N;;;;; 1332;ETHIOPIC SYLLABLE PHI;Lo;0;L;;;;;N;;;;; 1333;ETHIOPIC SYLLABLE PHAA;Lo;0;L;;;;;N;;;;; 1334;ETHIOPIC SYLLABLE PHEE;Lo;0;L;;;;;N;;;;; 1335;ETHIOPIC SYLLABLE PHE;Lo;0;L;;;;;N;;;;; 1336;ETHIOPIC SYLLABLE PHO;Lo;0;L;;;;;N;;;;; 1337;ETHIOPIC SYLLABLE PHWA;Lo;0;L;;;;;N;;;;; 1338;ETHIOPIC SYLLABLE TSA;Lo;0;L;;;;;N;;;;; 1339;ETHIOPIC SYLLABLE TSU;Lo;0;L;;;;;N;;;;; 133A;ETHIOPIC SYLLABLE TSI;Lo;0;L;;;;;N;;;;; 133B;ETHIOPIC SYLLABLE TSAA;Lo;0;L;;;;;N;;;;; 133C;ETHIOPIC SYLLABLE TSEE;Lo;0;L;;;;;N;;;;; 133D;ETHIOPIC SYLLABLE TSE;Lo;0;L;;;;;N;;;;; 133E;ETHIOPIC SYLLABLE TSO;Lo;0;L;;;;;N;;;;; 133F;ETHIOPIC SYLLABLE TSWA;Lo;0;L;;;;;N;;;;; 1340;ETHIOPIC SYLLABLE TZA;Lo;0;L;;;;;N;;;;; 1341;ETHIOPIC SYLLABLE TZU;Lo;0;L;;;;;N;;;;; 1342;ETHIOPIC SYLLABLE TZI;Lo;0;L;;;;;N;;;;; 1343;ETHIOPIC SYLLABLE TZAA;Lo;0;L;;;;;N;;;;; 1344;ETHIOPIC SYLLABLE TZEE;Lo;0;L;;;;;N;;;;; 1345;ETHIOPIC SYLLABLE TZE;Lo;0;L;;;;;N;;;;; 1346;ETHIOPIC SYLLABLE TZO;Lo;0;L;;;;;N;;;;; 1348;ETHIOPIC SYLLABLE FA;Lo;0;L;;;;;N;;;;; 1349;ETHIOPIC SYLLABLE FU;Lo;0;L;;;;;N;;;;; 134A;ETHIOPIC SYLLABLE FI;Lo;0;L;;;;;N;;;;; 134B;ETHIOPIC SYLLABLE FAA;Lo;0;L;;;;;N;;;;; 134C;ETHIOPIC SYLLABLE FEE;Lo;0;L;;;;;N;;;;; 134D;ETHIOPIC SYLLABLE FE;Lo;0;L;;;;;N;;;;; 134E;ETHIOPIC SYLLABLE FO;Lo;0;L;;;;;N;;;;; 134F;ETHIOPIC SYLLABLE FWA;Lo;0;L;;;;;N;;;;; 1350;ETHIOPIC SYLLABLE PA;Lo;0;L;;;;;N;;;;; 1351;ETHIOPIC SYLLABLE PU;Lo;0;L;;;;;N;;;;; 1352;ETHIOPIC SYLLABLE PI;Lo;0;L;;;;;N;;;;; 1353;ETHIOPIC SYLLABLE PAA;Lo;0;L;;;;;N;;;;; 1354;ETHIOPIC SYLLABLE PEE;Lo;0;L;;;;;N;;;;; 1355;ETHIOPIC SYLLABLE PE;Lo;0;L;;;;;N;;;;; 1356;ETHIOPIC SYLLABLE PO;Lo;0;L;;;;;N;;;;; 1357;ETHIOPIC SYLLABLE PWA;Lo;0;L;;;;;N;;;;; 1358;ETHIOPIC SYLLABLE RYA;Lo;0;L;;;;;N;;;;; 1359;ETHIOPIC SYLLABLE MYA;Lo;0;L;;;;;N;;;;; 135A;ETHIOPIC SYLLABLE FYA;Lo;0;L;;;;;N;;;;; 1361;ETHIOPIC WORDSPACE;Po;0;L;;;;;N;;;;; 1362;ETHIOPIC FULL STOP;Po;0;L;;;;;N;;;;; 1363;ETHIOPIC COMMA;Po;0;L;;;;;N;;;;; 1364;ETHIOPIC SEMICOLON;Po;0;L;;;;;N;;;;; 1365;ETHIOPIC COLON;Po;0;L;;;;;N;;;;; 1366;ETHIOPIC PREFACE COLON;Po;0;L;;;;;N;;;;; 1367;ETHIOPIC QUESTION MARK;Po;0;L;;;;;N;;;;; 1368;ETHIOPIC PARAGRAPH SEPARATOR;Po;0;L;;;;;N;;;;; 1369;ETHIOPIC DIGIT ONE;Nd;0;L;;1;1;1;N;;;;; 136A;ETHIOPIC DIGIT TWO;Nd;0;L;;2;2;2;N;;;;; 136B;ETHIOPIC DIGIT THREE;Nd;0;L;;3;3;3;N;;;;; 136C;ETHIOPIC DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;; 136D;ETHIOPIC DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;; 136E;ETHIOPIC DIGIT SIX;Nd;0;L;;6;6;6;N;;;;; 136F;ETHIOPIC DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;; 1370;ETHIOPIC DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;; 1371;ETHIOPIC DIGIT NINE;Nd;0;L;;9;9;9;N;;;;; 1372;ETHIOPIC NUMBER TEN;No;0;L;;;;10;N;;;;; 1373;ETHIOPIC NUMBER TWENTY;No;0;L;;;;20;N;;;;; 1374;ETHIOPIC NUMBER THIRTY;No;0;L;;;;30;N;;;;; 1375;ETHIOPIC NUMBER FORTY;No;0;L;;;;40;N;;;;; 1376;ETHIOPIC NUMBER FIFTY;No;0;L;;;;50;N;;;;; 1377;ETHIOPIC NUMBER SIXTY;No;0;L;;;;60;N;;;;; 1378;ETHIOPIC NUMBER SEVENTY;No;0;L;;;;70;N;;;;; 1379;ETHIOPIC NUMBER EIGHTY;No;0;L;;;;80;N;;;;; 137A;ETHIOPIC NUMBER NINETY;No;0;L;;;;90;N;;;;; 137B;ETHIOPIC NUMBER HUNDRED;No;0;L;;;;100;N;;;;; 137C;ETHIOPIC NUMBER TEN THOUSAND;No;0;L;;;;10000;N;;;;; 13A0;CHEROKEE LETTER A;Lo;0;L;;;;;N;;;;; 13A1;CHEROKEE LETTER E;Lo;0;L;;;;;N;;;;; 13A2;CHEROKEE LETTER I;Lo;0;L;;;;;N;;;;; 13A3;CHEROKEE LETTER O;Lo;0;L;;;;;N;;;;; 13A4;CHEROKEE LETTER U;Lo;0;L;;;;;N;;;;; 13A5;CHEROKEE LETTER V;Lo;0;L;;;;;N;;;;; 13A6;CHEROKEE LETTER GA;Lo;0;L;;;;;N;;;;; 13A7;CHEROKEE LETTER KA;Lo;0;L;;;;;N;;;;; 13A8;CHEROKEE LETTER GE;Lo;0;L;;;;;N;;;;; 13A9;CHEROKEE LETTER GI;Lo;0;L;;;;;N;;;;; 13AA;CHEROKEE LETTER GO;Lo;0;L;;;;;N;;;;; 13AB;CHEROKEE LETTER GU;Lo;0;L;;;;;N;;;;; 13AC;CHEROKEE LETTER GV;Lo;0;L;;;;;N;;;;; 13AD;CHEROKEE LETTER HA;Lo;0;L;;;;;N;;;;; 13AE;CHEROKEE LETTER HE;Lo;0;L;;;;;N;;;;; 13AF;CHEROKEE LETTER HI;Lo;0;L;;;;;N;;;;; 13B0;CHEROKEE LETTER HO;Lo;0;L;;;;;N;;;;; 13B1;CHEROKEE LETTER HU;Lo;0;L;;;;;N;;;;; 13B2;CHEROKEE LETTER HV;Lo;0;L;;;;;N;;;;; 13B3;CHEROKEE LETTER LA;Lo;0;L;;;;;N;;;;; 13B4;CHEROKEE LETTER LE;Lo;0;L;;;;;N;;;;; 13B5;CHEROKEE LETTER LI;Lo;0;L;;;;;N;;;;; 13B6;CHEROKEE LETTER LO;Lo;0;L;;;;;N;;;;; 13B7;CHEROKEE LETTER LU;Lo;0;L;;;;;N;;;;; 13B8;CHEROKEE LETTER LV;Lo;0;L;;;;;N;;;;; 13B9;CHEROKEE LETTER MA;Lo;0;L;;;;;N;;;;; 13BA;CHEROKEE LETTER ME;Lo;0;L;;;;;N;;;;; 13BB;CHEROKEE LETTER MI;Lo;0;L;;;;;N;;;;; 13BC;CHEROKEE LETTER MO;Lo;0;L;;;;;N;;;;; 13BD;CHEROKEE LETTER MU;Lo;0;L;;;;;N;;;;; 13BE;CHEROKEE LETTER NA;Lo;0;L;;;;;N;;;;; 13BF;CHEROKEE LETTER HNA;Lo;0;L;;;;;N;;;;; 13C0;CHEROKEE LETTER NAH;Lo;0;L;;;;;N;;;;; 13C1;CHEROKEE LETTER NE;Lo;0;L;;;;;N;;;;; 13C2;CHEROKEE LETTER NI;Lo;0;L;;;;;N;;;;; 13C3;CHEROKEE LETTER NO;Lo;0;L;;;;;N;;;;; 13C4;CHEROKEE LETTER NU;Lo;0;L;;;;;N;;;;; 13C5;CHEROKEE LETTER NV;Lo;0;L;;;;;N;;;;; 13C6;CHEROKEE LETTER QUA;Lo;0;L;;;;;N;;;;; 13C7;CHEROKEE LETTER QUE;Lo;0;L;;;;;N;;;;; 13C8;CHEROKEE LETTER QUI;Lo;0;L;;;;;N;;;;; 13C9;CHEROKEE LETTER QUO;Lo;0;L;;;;;N;;;;; 13CA;CHEROKEE LETTER QUU;Lo;0;L;;;;;N;;;;; 13CB;CHEROKEE LETTER QUV;Lo;0;L;;;;;N;;;;; 13CC;CHEROKEE LETTER SA;Lo;0;L;;;;;N;;;;; 13CD;CHEROKEE LETTER S;Lo;0;L;;;;;N;;;;; 13CE;CHEROKEE LETTER SE;Lo;0;L;;;;;N;;;;; 13CF;CHEROKEE LETTER SI;Lo;0;L;;;;;N;;;;; 13D0;CHEROKEE LETTER SO;Lo;0;L;;;;;N;;;;; 13D1;CHEROKEE LETTER SU;Lo;0;L;;;;;N;;;;; 13D2;CHEROKEE LETTER SV;Lo;0;L;;;;;N;;;;; 13D3;CHEROKEE LETTER DA;Lo;0;L;;;;;N;;;;; 13D4;CHEROKEE LETTER TA;Lo;0;L;;;;;N;;;;; 13D5;CHEROKEE LETTER DE;Lo;0;L;;;;;N;;;;; 13D6;CHEROKEE LETTER TE;Lo;0;L;;;;;N;;;;; 13D7;CHEROKEE LETTER DI;Lo;0;L;;;;;N;;;;; 13D8;CHEROKEE LETTER TI;Lo;0;L;;;;;N;;;;; 13D9;CHEROKEE LETTER DO;Lo;0;L;;;;;N;;;;; 13DA;CHEROKEE LETTER DU;Lo;0;L;;;;;N;;;;; 13DB;CHEROKEE LETTER DV;Lo;0;L;;;;;N;;;;; 13DC;CHEROKEE LETTER DLA;Lo;0;L;;;;;N;;;;; 13DD;CHEROKEE LETTER TLA;Lo;0;L;;;;;N;;;;; 13DE;CHEROKEE LETTER TLE;Lo;0;L;;;;;N;;;;; 13DF;CHEROKEE LETTER TLI;Lo;0;L;;;;;N;;;;; 13E0;CHEROKEE LETTER TLO;Lo;0;L;;;;;N;;;;; 13E1;CHEROKEE LETTER TLU;Lo;0;L;;;;;N;;;;; 13E2;CHEROKEE LETTER TLV;Lo;0;L;;;;;N;;;;; 13E3;CHEROKEE LETTER TSA;Lo;0;L;;;;;N;;;;; 13E4;CHEROKEE LETTER TSE;Lo;0;L;;;;;N;;;;; 13E5;CHEROKEE LETTER TSI;Lo;0;L;;;;;N;;;;; 13E6;CHEROKEE LETTER TSO;Lo;0;L;;;;;N;;;;; 13E7;CHEROKEE LETTER TSU;Lo;0;L;;;;;N;;;;; 13E8;CHEROKEE LETTER TSV;Lo;0;L;;;;;N;;;;; 13E9;CHEROKEE LETTER WA;Lo;0;L;;;;;N;;;;; 13EA;CHEROKEE LETTER WE;Lo;0;L;;;;;N;;;;; 13EB;CHEROKEE LETTER WI;Lo;0;L;;;;;N;;;;; 13EC;CHEROKEE LETTER WO;Lo;0;L;;;;;N;;;;; 13ED;CHEROKEE LETTER WU;Lo;0;L;;;;;N;;;;; 13EE;CHEROKEE LETTER WV;Lo;0;L;;;;;N;;;;; 13EF;CHEROKEE LETTER YA;Lo;0;L;;;;;N;;;;; 13F0;CHEROKEE LETTER YE;Lo;0;L;;;;;N;;;;; 13F1;CHEROKEE LETTER YI;Lo;0;L;;;;;N;;;;; 13F2;CHEROKEE LETTER YO;Lo;0;L;;;;;N;;;;; 13F3;CHEROKEE LETTER YU;Lo;0;L;;;;;N;;;;; 13F4;CHEROKEE LETTER YV;Lo;0;L;;;;;N;;;;; 1401;CANADIAN SYLLABICS E;Lo;0;L;;;;;N;;;;; 1402;CANADIAN SYLLABICS AAI;Lo;0;L;;;;;N;;;;; 1403;CANADIAN SYLLABICS I;Lo;0;L;;;;;N;;;;; 1404;CANADIAN SYLLABICS II;Lo;0;L;;;;;N;;;;; 1405;CANADIAN SYLLABICS O;Lo;0;L;;;;;N;;;;; 1406;CANADIAN SYLLABICS OO;Lo;0;L;;;;;N;;;;; 1407;CANADIAN SYLLABICS Y-CREE OO;Lo;0;L;;;;;N;;;;; 1408;CANADIAN SYLLABICS CARRIER EE;Lo;0;L;;;;;N;;;;; 1409;CANADIAN SYLLABICS CARRIER I;Lo;0;L;;;;;N;;;;; 140A;CANADIAN SYLLABICS A;Lo;0;L;;;;;N;;;;; 140B;CANADIAN SYLLABICS AA;Lo;0;L;;;;;N;;;;; 140C;CANADIAN SYLLABICS WE;Lo;0;L;;;;;N;;;;; 140D;CANADIAN SYLLABICS WEST-CREE WE;Lo;0;L;;;;;N;;;;; 140E;CANADIAN SYLLABICS WI;Lo;0;L;;;;;N;;;;; 140F;CANADIAN SYLLABICS WEST-CREE WI;Lo;0;L;;;;;N;;;;; 1410;CANADIAN SYLLABICS WII;Lo;0;L;;;;;N;;;;; 1411;CANADIAN SYLLABICS WEST-CREE WII;Lo;0;L;;;;;N;;;;; 1412;CANADIAN SYLLABICS WO;Lo;0;L;;;;;N;;;;; 1413;CANADIAN SYLLABICS WEST-CREE WO;Lo;0;L;;;;;N;;;;; 1414;CANADIAN SYLLABICS WOO;Lo;0;L;;;;;N;;;;; 1415;CANADIAN SYLLABICS WEST-CREE WOO;Lo;0;L;;;;;N;;;;; 1416;CANADIAN SYLLABICS NASKAPI WOO;Lo;0;L;;;;;N;;;;; 1417;CANADIAN SYLLABICS WA;Lo;0;L;;;;;N;;;;; 1418;CANADIAN SYLLABICS WEST-CREE WA;Lo;0;L;;;;;N;;;;; 1419;CANADIAN SYLLABICS WAA;Lo;0;L;;;;;N;;;;; 141A;CANADIAN SYLLABICS WEST-CREE WAA;Lo;0;L;;;;;N;;;;; 141B;CANADIAN SYLLABICS NASKAPI WAA;Lo;0;L;;;;;N;;;;; 141C;CANADIAN SYLLABICS AI;Lo;0;L;;;;;N;;;;; 141D;CANADIAN SYLLABICS Y-CREE W;Lo;0;L;;;;;N;;;;; 141E;CANADIAN SYLLABICS GLOTTAL STOP;Lo;0;L;;;;;N;;;;; 141F;CANADIAN SYLLABICS FINAL ACUTE;Lo;0;L;;;;;N;;;;; 1420;CANADIAN SYLLABICS FINAL GRAVE;Lo;0;L;;;;;N;;;;; 1421;CANADIAN SYLLABICS FINAL BOTTOM HALF RING;Lo;0;L;;;;;N;;;;; 1422;CANADIAN SYLLABICS FINAL TOP HALF RING;Lo;0;L;;;;;N;;;;; 1423;CANADIAN SYLLABICS FINAL RIGHT HALF RING;Lo;0;L;;;;;N;;;;; 1424;CANADIAN SYLLABICS FINAL RING;Lo;0;L;;;;;N;;;;; 1425;CANADIAN SYLLABICS FINAL DOUBLE ACUTE;Lo;0;L;;;;;N;;;;; 1426;CANADIAN SYLLABICS FINAL DOUBLE SHORT VERTICAL STROKES;Lo;0;L;;;;;N;;;;; 1427;CANADIAN SYLLABICS FINAL MIDDLE DOT;Lo;0;L;;;;;N;;;;; 1428;CANADIAN SYLLABICS FINAL SHORT HORIZONTAL STROKE;Lo;0;L;;;;;N;;;;; 1429;CANADIAN SYLLABICS FINAL PLUS;Lo;0;L;;;;;N;;;;; 142A;CANADIAN SYLLABICS FINAL DOWN TACK;Lo;0;L;;;;;N;;;;; 142B;CANADIAN SYLLABICS EN;Lo;0;L;;;;;N;;;;; 142C;CANADIAN SYLLABICS IN;Lo;0;L;;;;;N;;;;; 142D;CANADIAN SYLLABICS ON;Lo;0;L;;;;;N;;;;; 142E;CANADIAN SYLLABICS AN;Lo;0;L;;;;;N;;;;; 142F;CANADIAN SYLLABICS PE;Lo;0;L;;;;;N;;;;; 1430;CANADIAN SYLLABICS PAAI;Lo;0;L;;;;;N;;;;; 1431;CANADIAN SYLLABICS PI;Lo;0;L;;;;;N;;;;; 1432;CANADIAN SYLLABICS PII;Lo;0;L;;;;;N;;;;; 1433;CANADIAN SYLLABICS PO;Lo;0;L;;;;;N;;;;; 1434;CANADIAN SYLLABICS POO;Lo;0;L;;;;;N;;;;; 1435;CANADIAN SYLLABICS Y-CREE POO;Lo;0;L;;;;;N;;;;; 1436;CANADIAN SYLLABICS CARRIER HEE;Lo;0;L;;;;;N;;;;; 1437;CANADIAN SYLLABICS CARRIER HI;Lo;0;L;;;;;N;;;;; 1438;CANADIAN SYLLABICS PA;Lo;0;L;;;;;N;;;;; 1439;CANADIAN SYLLABICS PAA;Lo;0;L;;;;;N;;;;; 143A;CANADIAN SYLLABICS PWE;Lo;0;L;;;;;N;;;;; 143B;CANADIAN SYLLABICS WEST-CREE PWE;Lo;0;L;;;;;N;;;;; 143C;CANADIAN SYLLABICS PWI;Lo;0;L;;;;;N;;;;; 143D;CANADIAN SYLLABICS WEST-CREE PWI;Lo;0;L;;;;;N;;;;; 143E;CANADIAN SYLLABICS PWII;Lo;0;L;;;;;N;;;;; 143F;CANADIAN SYLLABICS WEST-CREE PWII;Lo;0;L;;;;;N;;;;; 1440;CANADIAN SYLLABICS PWO;Lo;0;L;;;;;N;;;;; 1441;CANADIAN SYLLABICS WEST-CREE PWO;Lo;0;L;;;;;N;;;;; 1442;CANADIAN SYLLABICS PWOO;Lo;0;L;;;;;N;;;;; 1443;CANADIAN SYLLABICS WEST-CREE PWOO;Lo;0;L;;;;;N;;;;; 1444;CANADIAN SYLLABICS PWA;Lo;0;L;;;;;N;;;;; 1445;CANADIAN SYLLABICS WEST-CREE PWA;Lo;0;L;;;;;N;;;;; 1446;CANADIAN SYLLABICS PWAA;Lo;0;L;;;;;N;;;;; 1447;CANADIAN SYLLABICS WEST-CREE PWAA;Lo;0;L;;;;;N;;;;; 1448;CANADIAN SYLLABICS Y-CREE PWAA;Lo;0;L;;;;;N;;;;; 1449;CANADIAN SYLLABICS P;Lo;0;L;;;;;N;;;;; 144A;CANADIAN SYLLABICS WEST-CREE P;Lo;0;L;;;;;N;;;;; 144B;CANADIAN SYLLABICS CARRIER H;Lo;0;L;;;;;N;;;;; 144C;CANADIAN SYLLABICS TE;Lo;0;L;;;;;N;;;;; 144D;CANADIAN SYLLABICS TAAI;Lo;0;L;;;;;N;;;;; 144E;CANADIAN SYLLABICS TI;Lo;0;L;;;;;N;;;;; 144F;CANADIAN SYLLABICS TII;Lo;0;L;;;;;N;;;;; 1450;CANADIAN SYLLABICS TO;Lo;0;L;;;;;N;;;;; 1451;CANADIAN SYLLABICS TOO;Lo;0;L;;;;;N;;;;; 1452;CANADIAN SYLLABICS Y-CREE TOO;Lo;0;L;;;;;N;;;;; 1453;CANADIAN SYLLABICS CARRIER DEE;Lo;0;L;;;;;N;;;;; 1454;CANADIAN SYLLABICS CARRIER DI;Lo;0;L;;;;;N;;;;; 1455;CANADIAN SYLLABICS TA;Lo;0;L;;;;;N;;;;; 1456;CANADIAN SYLLABICS TAA;Lo;0;L;;;;;N;;;;; 1457;CANADIAN SYLLABICS TWE;Lo;0;L;;;;;N;;;;; 1458;CANADIAN SYLLABICS WEST-CREE TWE;Lo;0;L;;;;;N;;;;; 1459;CANADIAN SYLLABICS TWI;Lo;0;L;;;;;N;;;;; 145A;CANADIAN SYLLABICS WEST-CREE TWI;Lo;0;L;;;;;N;;;;; 145B;CANADIAN SYLLABICS TWII;Lo;0;L;;;;;N;;;;; 145C;CANADIAN SYLLABICS WEST-CREE TWII;Lo;0;L;;;;;N;;;;; 145D;CANADIAN SYLLABICS TWO;Lo;0;L;;;;;N;;;;; 145E;CANADIAN SYLLABICS WEST-CREE TWO;Lo;0;L;;;;;N;;;;; 145F;CANADIAN SYLLABICS TWOO;Lo;0;L;;;;;N;;;;; 1460;CANADIAN SYLLABICS WEST-CREE TWOO;Lo;0;L;;;;;N;;;;; 1461;CANADIAN SYLLABICS TWA;Lo;0;L;;;;;N;;;;; 1462;CANADIAN SYLLABICS WEST-CREE TWA;Lo;0;L;;;;;N;;;;; 1463;CANADIAN SYLLABICS TWAA;Lo;0;L;;;;;N;;;;; 1464;CANADIAN SYLLABICS WEST-CREE TWAA;Lo;0;L;;;;;N;;;;; 1465;CANADIAN SYLLABICS NASKAPI TWAA;Lo;0;L;;;;;N;;;;; 1466;CANADIAN SYLLABICS T;Lo;0;L;;;;;N;;;;; 1467;CANADIAN SYLLABICS TTE;Lo;0;L;;;;;N;;;;; 1468;CANADIAN SYLLABICS TTI;Lo;0;L;;;;;N;;;;; 1469;CANADIAN SYLLABICS TTO;Lo;0;L;;;;;N;;;;; 146A;CANADIAN SYLLABICS TTA;Lo;0;L;;;;;N;;;;; 146B;CANADIAN SYLLABICS KE;Lo;0;L;;;;;N;;;;; 146C;CANADIAN SYLLABICS KAAI;Lo;0;L;;;;;N;;;;; 146D;CANADIAN SYLLABICS KI;Lo;0;L;;;;;N;;;;; 146E;CANADIAN SYLLABICS KII;Lo;0;L;;;;;N;;;;; 146F;CANADIAN SYLLABICS KO;Lo;0;L;;;;;N;;;;; 1470;CANADIAN SYLLABICS KOO;Lo;0;L;;;;;N;;;;; 1471;CANADIAN SYLLABICS Y-CREE KOO;Lo;0;L;;;;;N;;;;; 1472;CANADIAN SYLLABICS KA;Lo;0;L;;;;;N;;;;; 1473;CANADIAN SYLLABICS KAA;Lo;0;L;;;;;N;;;;; 1474;CANADIAN SYLLABICS KWE;Lo;0;L;;;;;N;;;;; 1475;CANADIAN SYLLABICS WEST-CREE KWE;Lo;0;L;;;;;N;;;;; 1476;CANADIAN SYLLABICS KWI;Lo;0;L;;;;;N;;;;; 1477;CANADIAN SYLLABICS WEST-CREE KWI;Lo;0;L;;;;;N;;;;; 1478;CANADIAN SYLLABICS KWII;Lo;0;L;;;;;N;;;;; 1479;CANADIAN SYLLABICS WEST-CREE KWII;Lo;0;L;;;;;N;;;;; 147A;CANADIAN SYLLABICS KWO;Lo;0;L;;;;;N;;;;; 147B;CANADIAN SYLLABICS WEST-CREE KWO;Lo;0;L;;;;;N;;;;; 147C;CANADIAN SYLLABICS KWOO;Lo;0;L;;;;;N;;;;; 147D;CANADIAN SYLLABICS WEST-CREE KWOO;Lo;0;L;;;;;N;;;;; 147E;CANADIAN SYLLABICS KWA;Lo;0;L;;;;;N;;;;; 147F;CANADIAN SYLLABICS WEST-CREE KWA;Lo;0;L;;;;;N;;;;; 1480;CANADIAN SYLLABICS KWAA;Lo;0;L;;;;;N;;;;; 1481;CANADIAN SYLLABICS WEST-CREE KWAA;Lo;0;L;;;;;N;;;;; 1482;CANADIAN SYLLABICS NASKAPI KWAA;Lo;0;L;;;;;N;;;;; 1483;CANADIAN SYLLABICS K;Lo;0;L;;;;;N;;;;; 1484;CANADIAN SYLLABICS KW;Lo;0;L;;;;;N;;;;; 1485;CANADIAN SYLLABICS SOUTH-SLAVEY KEH;Lo;0;L;;;;;N;;;;; 1486;CANADIAN SYLLABICS SOUTH-SLAVEY KIH;Lo;0;L;;;;;N;;;;; 1487;CANADIAN SYLLABICS SOUTH-SLAVEY KOH;Lo;0;L;;;;;N;;;;; 1488;CANADIAN SYLLABICS SOUTH-SLAVEY KAH;Lo;0;L;;;;;N;;;;; 1489;CANADIAN SYLLABICS CE;Lo;0;L;;;;;N;;;;; 148A;CANADIAN SYLLABICS CAAI;Lo;0;L;;;;;N;;;;; 148B;CANADIAN SYLLABICS CI;Lo;0;L;;;;;N;;;;; 148C;CANADIAN SYLLABICS CII;Lo;0;L;;;;;N;;;;; 148D;CANADIAN SYLLABICS CO;Lo;0;L;;;;;N;;;;; 148E;CANADIAN SYLLABICS COO;Lo;0;L;;;;;N;;;;; 148F;CANADIAN SYLLABICS Y-CREE COO;Lo;0;L;;;;;N;;;;; 1490;CANADIAN SYLLABICS CA;Lo;0;L;;;;;N;;;;; 1491;CANADIAN SYLLABICS CAA;Lo;0;L;;;;;N;;;;; 1492;CANADIAN SYLLABICS CWE;Lo;0;L;;;;;N;;;;; 1493;CANADIAN SYLLABICS WEST-CREE CWE;Lo;0;L;;;;;N;;;;; 1494;CANADIAN SYLLABICS CWI;Lo;0;L;;;;;N;;;;; 1495;CANADIAN SYLLABICS WEST-CREE CWI;Lo;0;L;;;;;N;;;;; 1496;CANADIAN SYLLABICS CWII;Lo;0;L;;;;;N;;;;; 1497;CANADIAN SYLLABICS WEST-CREE CWII;Lo;0;L;;;;;N;;;;; 1498;CANADIAN SYLLABICS CWO;Lo;0;L;;;;;N;;;;; 1499;CANADIAN SYLLABICS WEST-CREE CWO;Lo;0;L;;;;;N;;;;; 149A;CANADIAN SYLLABICS CWOO;Lo;0;L;;;;;N;;;;; 149B;CANADIAN SYLLABICS WEST-CREE CWOO;Lo;0;L;;;;;N;;;;; 149C;CANADIAN SYLLABICS CWA;Lo;0;L;;;;;N;;;;; 149D;CANADIAN SYLLABICS WEST-CREE CWA;Lo;0;L;;;;;N;;;;; 149E;CANADIAN SYLLABICS CWAA;Lo;0;L;;;;;N;;;;; 149F;CANADIAN SYLLABICS WEST-CREE CWAA;Lo;0;L;;;;;N;;;;; 14A0;CANADIAN SYLLABICS NASKAPI CWAA;Lo;0;L;;;;;N;;;;; 14A1;CANADIAN SYLLABICS C;Lo;0;L;;;;;N;;;;; 14A2;CANADIAN SYLLABICS SAYISI TH;Lo;0;L;;;;;N;;;;; 14A3;CANADIAN SYLLABICS ME;Lo;0;L;;;;;N;;;;; 14A4;CANADIAN SYLLABICS MAAI;Lo;0;L;;;;;N;;;;; 14A5;CANADIAN SYLLABICS MI;Lo;0;L;;;;;N;;;;; 14A6;CANADIAN SYLLABICS MII;Lo;0;L;;;;;N;;;;; 14A7;CANADIAN SYLLABICS MO;Lo;0;L;;;;;N;;;;; 14A8;CANADIAN SYLLABICS MOO;Lo;0;L;;;;;N;;;;; 14A9;CANADIAN SYLLABICS Y-CREE MOO;Lo;0;L;;;;;N;;;;; 14AA;CANADIAN SYLLABICS MA;Lo;0;L;;;;;N;;;;; 14AB;CANADIAN SYLLABICS MAA;Lo;0;L;;;;;N;;;;; 14AC;CANADIAN SYLLABICS MWE;Lo;0;L;;;;;N;;;;; 14AD;CANADIAN SYLLABICS WEST-CREE MWE;Lo;0;L;;;;;N;;;;; 14AE;CANADIAN SYLLABICS MWI;Lo;0;L;;;;;N;;;;; 14AF;CANADIAN SYLLABICS WEST-CREE MWI;Lo;0;L;;;;;N;;;;; 14B0;CANADIAN SYLLABICS MWII;Lo;0;L;;;;;N;;;;; 14B1;CANADIAN SYLLABICS WEST-CREE MWII;Lo;0;L;;;;;N;;;;; 14B2;CANADIAN SYLLABICS MWO;Lo;0;L;;;;;N;;;;; 14B3;CANADIAN SYLLABICS WEST-CREE MWO;Lo;0;L;;;;;N;;;;; 14B4;CANADIAN SYLLABICS MWOO;Lo;0;L;;;;;N;;;;; 14B5;CANADIAN SYLLABICS WEST-CREE MWOO;Lo;0;L;;;;;N;;;;; 14B6;CANADIAN SYLLABICS MWA;Lo;0;L;;;;;N;;;;; 14B7;CANADIAN SYLLABICS WEST-CREE MWA;Lo;0;L;;;;;N;;;;; 14B8;CANADIAN SYLLABICS MWAA;Lo;0;L;;;;;N;;;;; 14B9;CANADIAN SYLLABICS WEST-CREE MWAA;Lo;0;L;;;;;N;;;;; 14BA;CANADIAN SYLLABICS NASKAPI MWAA;Lo;0;L;;;;;N;;;;; 14BB;CANADIAN SYLLABICS M;Lo;0;L;;;;;N;;;;; 14BC;CANADIAN SYLLABICS WEST-CREE M;Lo;0;L;;;;;N;;;;; 14BD;CANADIAN SYLLABICS MH;Lo;0;L;;;;;N;;;;; 14BE;CANADIAN SYLLABICS ATHAPASCAN M;Lo;0;L;;;;;N;;;;; 14BF;CANADIAN SYLLABICS SAYISI M;Lo;0;L;;;;;N;;;;; 14C0;CANADIAN SYLLABICS NE;Lo;0;L;;;;;N;;;;; 14C1;CANADIAN SYLLABICS NAAI;Lo;0;L;;;;;N;;;;; 14C2;CANADIAN SYLLABICS NI;Lo;0;L;;;;;N;;;;; 14C3;CANADIAN SYLLABICS NII;Lo;0;L;;;;;N;;;;; 14C4;CANADIAN SYLLABICS NO;Lo;0;L;;;;;N;;;;; 14C5;CANADIAN SYLLABICS NOO;Lo;0;L;;;;;N;;;;; 14C6;CANADIAN SYLLABICS Y-CREE NOO;Lo;0;L;;;;;N;;;;; 14C7;CANADIAN SYLLABICS NA;Lo;0;L;;;;;N;;;;; 14C8;CANADIAN SYLLABICS NAA;Lo;0;L;;;;;N;;;;; 14C9;CANADIAN SYLLABICS NWE;Lo;0;L;;;;;N;;;;; 14CA;CANADIAN SYLLABICS WEST-CREE NWE;Lo;0;L;;;;;N;;;;; 14CB;CANADIAN SYLLABICS NWA;Lo;0;L;;;;;N;;;;; 14CC;CANADIAN SYLLABICS WEST-CREE NWA;Lo;0;L;;;;;N;;;;; 14CD;CANADIAN SYLLABICS NWAA;Lo;0;L;;;;;N;;;;; 14CE;CANADIAN SYLLABICS WEST-CREE NWAA;Lo;0;L;;;;;N;;;;; 14CF;CANADIAN SYLLABICS NASKAPI NWAA;Lo;0;L;;;;;N;;;;; 14D0;CANADIAN SYLLABICS N;Lo;0;L;;;;;N;;;;; 14D1;CANADIAN SYLLABICS CARRIER NG;Lo;0;L;;;;;N;;;;; 14D2;CANADIAN SYLLABICS NH;Lo;0;L;;;;;N;;;;; 14D3;CANADIAN SYLLABICS LE;Lo;0;L;;;;;N;;;;; 14D4;CANADIAN SYLLABICS LAAI;Lo;0;L;;;;;N;;;;; 14D5;CANADIAN SYLLABICS LI;Lo;0;L;;;;;N;;;;; 14D6;CANADIAN SYLLABICS LII;Lo;0;L;;;;;N;;;;; 14D7;CANADIAN SYLLABICS LO;Lo;0;L;;;;;N;;;;; 14D8;CANADIAN SYLLABICS LOO;Lo;0;L;;;;;N;;;;; 14D9;CANADIAN SYLLABICS Y-CREE LOO;Lo;0;L;;;;;N;;;;; 14DA;CANADIAN SYLLABICS LA;Lo;0;L;;;;;N;;;;; 14DB;CANADIAN SYLLABICS LAA;Lo;0;L;;;;;N;;;;; 14DC;CANADIAN SYLLABICS LWE;Lo;0;L;;;;;N;;;;; 14DD;CANADIAN SYLLABICS WEST-CREE LWE;Lo;0;L;;;;;N;;;;; 14DE;CANADIAN SYLLABICS LWI;Lo;0;L;;;;;N;;;;; 14DF;CANADIAN SYLLABICS WEST-CREE LWI;Lo;0;L;;;;;N;;;;; 14E0;CANADIAN SYLLABICS LWII;Lo;0;L;;;;;N;;;;; 14E1;CANADIAN SYLLABICS WEST-CREE LWII;Lo;0;L;;;;;N;;;;; 14E2;CANADIAN SYLLABICS LWO;Lo;0;L;;;;;N;;;;; 14E3;CANADIAN SYLLABICS WEST-CREE LWO;Lo;0;L;;;;;N;;;;; 14E4;CANADIAN SYLLABICS LWOO;Lo;0;L;;;;;N;;;;; 14E5;CANADIAN SYLLABICS WEST-CREE LWOO;Lo;0;L;;;;;N;;;;; 14E6;CANADIAN SYLLABICS LWA;Lo;0;L;;;;;N;;;;; 14E7;CANADIAN SYLLABICS WEST-CREE LWA;Lo;0;L;;;;;N;;;;; 14E8;CANADIAN SYLLABICS LWAA;Lo;0;L;;;;;N;;;;; 14E9;CANADIAN SYLLABICS WEST-CREE LWAA;Lo;0;L;;;;;N;;;;; 14EA;CANADIAN SYLLABICS L;Lo;0;L;;;;;N;;;;; 14EB;CANADIAN SYLLABICS WEST-CREE L;Lo;0;L;;;;;N;;;;; 14EC;CANADIAN SYLLABICS MEDIAL L;Lo;0;L;;;;;N;;;;; 14ED;CANADIAN SYLLABICS SE;Lo;0;L;;;;;N;;;;; 14EE;CANADIAN SYLLABICS SAAI;Lo;0;L;;;;;N;;;;; 14EF;CANADIAN SYLLABICS SI;Lo;0;L;;;;;N;;;;; 14F0;CANADIAN SYLLABICS SII;Lo;0;L;;;;;N;;;;; 14F1;CANADIAN SYLLABICS SO;Lo;0;L;;;;;N;;;;; 14F2;CANADIAN SYLLABICS SOO;Lo;0;L;;;;;N;;;;; 14F3;CANADIAN SYLLABICS Y-CREE SOO;Lo;0;L;;;;;N;;;;; 14F4;CANADIAN SYLLABICS SA;Lo;0;L;;;;;N;;;;; 14F5;CANADIAN SYLLABICS SAA;Lo;0;L;;;;;N;;;;; 14F6;CANADIAN SYLLABICS SWE;Lo;0;L;;;;;N;;;;; 14F7;CANADIAN SYLLABICS WEST-CREE SWE;Lo;0;L;;;;;N;;;;; 14F8;CANADIAN SYLLABICS SWI;Lo;0;L;;;;;N;;;;; 14F9;CANADIAN SYLLABICS WEST-CREE SWI;Lo;0;L;;;;;N;;;;; 14FA;CANADIAN SYLLABICS SWII;Lo;0;L;;;;;N;;;;; 14FB;CANADIAN SYLLABICS WEST-CREE SWII;Lo;0;L;;;;;N;;;;; 14FC;CANADIAN SYLLABICS SWO;Lo;0;L;;;;;N;;;;; 14FD;CANADIAN SYLLABICS WEST-CREE SWO;Lo;0;L;;;;;N;;;;; 14FE;CANADIAN SYLLABICS SWOO;Lo;0;L;;;;;N;;;;; 14FF;CANADIAN SYLLABICS WEST-CREE SWOO;Lo;0;L;;;;;N;;;;; 1500;CANADIAN SYLLABICS SWA;Lo;0;L;;;;;N;;;;; 1501;CANADIAN SYLLABICS WEST-CREE SWA;Lo;0;L;;;;;N;;;;; 1502;CANADIAN SYLLABICS SWAA;Lo;0;L;;;;;N;;;;; 1503;CANADIAN SYLLABICS WEST-CREE SWAA;Lo;0;L;;;;;N;;;;; 1504;CANADIAN SYLLABICS NASKAPI SWAA;Lo;0;L;;;;;N;;;;; 1505;CANADIAN SYLLABICS S;Lo;0;L;;;;;N;;;;; 1506;CANADIAN SYLLABICS ATHAPASCAN S;Lo;0;L;;;;;N;;;;; 1507;CANADIAN SYLLABICS SW;Lo;0;L;;;;;N;;;;; 1508;CANADIAN SYLLABICS BLACKFOOT S;Lo;0;L;;;;;N;;;;; 1509;CANADIAN SYLLABICS MOOSE-CREE SK;Lo;0;L;;;;;N;;;;; 150A;CANADIAN SYLLABICS NASKAPI SKW;Lo;0;L;;;;;N;;;;; 150B;CANADIAN SYLLABICS NASKAPI S-W;Lo;0;L;;;;;N;;;;; 150C;CANADIAN SYLLABICS NASKAPI SPWA;Lo;0;L;;;;;N;;;;; 150D;CANADIAN SYLLABICS NASKAPI STWA;Lo;0;L;;;;;N;;;;; 150E;CANADIAN SYLLABICS NASKAPI SKWA;Lo;0;L;;;;;N;;;;; 150F;CANADIAN SYLLABICS NASKAPI SCWA;Lo;0;L;;;;;N;;;;; 1510;CANADIAN SYLLABICS SHE;Lo;0;L;;;;;N;;;;; 1511;CANADIAN SYLLABICS SHI;Lo;0;L;;;;;N;;;;; 1512;CANADIAN SYLLABICS SHII;Lo;0;L;;;;;N;;;;; 1513;CANADIAN SYLLABICS SHO;Lo;0;L;;;;;N;;;;; 1514;CANADIAN SYLLABICS SHOO;Lo;0;L;;;;;N;;;;; 1515;CANADIAN SYLLABICS SHA;Lo;0;L;;;;;N;;;;; 1516;CANADIAN SYLLABICS SHAA;Lo;0;L;;;;;N;;;;; 1517;CANADIAN SYLLABICS SHWE;Lo;0;L;;;;;N;;;;; 1518;CANADIAN SYLLABICS WEST-CREE SHWE;Lo;0;L;;;;;N;;;;; 1519;CANADIAN SYLLABICS SHWI;Lo;0;L;;;;;N;;;;; 151A;CANADIAN SYLLABICS WEST-CREE SHWI;Lo;0;L;;;;;N;;;;; 151B;CANADIAN SYLLABICS SHWII;Lo;0;L;;;;;N;;;;; 151C;CANADIAN SYLLABICS WEST-CREE SHWII;Lo;0;L;;;;;N;;;;; 151D;CANADIAN SYLLABICS SHWO;Lo;0;L;;;;;N;;;;; 151E;CANADIAN SYLLABICS WEST-CREE SHWO;Lo;0;L;;;;;N;;;;; 151F;CANADIAN SYLLABICS SHWOO;Lo;0;L;;;;;N;;;;; 1520;CANADIAN SYLLABICS WEST-CREE SHWOO;Lo;0;L;;;;;N;;;;; 1521;CANADIAN SYLLABICS SHWA;Lo;0;L;;;;;N;;;;; 1522;CANADIAN SYLLABICS WEST-CREE SHWA;Lo;0;L;;;;;N;;;;; 1523;CANADIAN SYLLABICS SHWAA;Lo;0;L;;;;;N;;;;; 1524;CANADIAN SYLLABICS WEST-CREE SHWAA;Lo;0;L;;;;;N;;;;; 1525;CANADIAN SYLLABICS SH;Lo;0;L;;;;;N;;;;; 1526;CANADIAN SYLLABICS YE;Lo;0;L;;;;;N;;;;; 1527;CANADIAN SYLLABICS YAAI;Lo;0;L;;;;;N;;;;; 1528;CANADIAN SYLLABICS YI;Lo;0;L;;;;;N;;;;; 1529;CANADIAN SYLLABICS YII;Lo;0;L;;;;;N;;;;; 152A;CANADIAN SYLLABICS YO;Lo;0;L;;;;;N;;;;; 152B;CANADIAN SYLLABICS YOO;Lo;0;L;;;;;N;;;;; 152C;CANADIAN SYLLABICS Y-CREE YOO;Lo;0;L;;;;;N;;;;; 152D;CANADIAN SYLLABICS YA;Lo;0;L;;;;;N;;;;; 152E;CANADIAN SYLLABICS YAA;Lo;0;L;;;;;N;;;;; 152F;CANADIAN SYLLABICS YWE;Lo;0;L;;;;;N;;;;; 1530;CANADIAN SYLLABICS WEST-CREE YWE;Lo;0;L;;;;;N;;;;; 1531;CANADIAN SYLLABICS YWI;Lo;0;L;;;;;N;;;;; 1532;CANADIAN SYLLABICS WEST-CREE YWI;Lo;0;L;;;;;N;;;;; 1533;CANADIAN SYLLABICS YWII;Lo;0;L;;;;;N;;;;; 1534;CANADIAN SYLLABICS WEST-CREE YWII;Lo;0;L;;;;;N;;;;; 1535;CANADIAN SYLLABICS YWO;Lo;0;L;;;;;N;;;;; 1536;CANADIAN SYLLABICS WEST-CREE YWO;Lo;0;L;;;;;N;;;;; 1537;CANADIAN SYLLABICS YWOO;Lo;0;L;;;;;N;;;;; 1538;CANADIAN SYLLABICS WEST-CREE YWOO;Lo;0;L;;;;;N;;;;; 1539;CANADIAN SYLLABICS YWA;Lo;0;L;;;;;N;;;;; 153A;CANADIAN SYLLABICS WEST-CREE YWA;Lo;0;L;;;;;N;;;;; 153B;CANADIAN SYLLABICS YWAA;Lo;0;L;;;;;N;;;;; 153C;CANADIAN SYLLABICS WEST-CREE YWAA;Lo;0;L;;;;;N;;;;; 153D;CANADIAN SYLLABICS NASKAPI YWAA;Lo;0;L;;;;;N;;;;; 153E;CANADIAN SYLLABICS Y;Lo;0;L;;;;;N;;;;; 153F;CANADIAN SYLLABICS BIBLE-CREE Y;Lo;0;L;;;;;N;;;;; 1540;CANADIAN SYLLABICS WEST-CREE Y;Lo;0;L;;;;;N;;;;; 1541;CANADIAN SYLLABICS SAYISI YI;Lo;0;L;;;;;N;;;;; 1542;CANADIAN SYLLABICS RE;Lo;0;L;;;;;N;;;;; 1543;CANADIAN SYLLABICS R-CREE RE;Lo;0;L;;;;;N;;;;; 1544;CANADIAN SYLLABICS WEST-CREE LE;Lo;0;L;;;;;N;;;;; 1545;CANADIAN SYLLABICS RAAI;Lo;0;L;;;;;N;;;;; 1546;CANADIAN SYLLABICS RI;Lo;0;L;;;;;N;;;;; 1547;CANADIAN SYLLABICS RII;Lo;0;L;;;;;N;;;;; 1548;CANADIAN SYLLABICS RO;Lo;0;L;;;;;N;;;;; 1549;CANADIAN SYLLABICS ROO;Lo;0;L;;;;;N;;;;; 154A;CANADIAN SYLLABICS WEST-CREE LO;Lo;0;L;;;;;N;;;;; 154B;CANADIAN SYLLABICS RA;Lo;0;L;;;;;N;;;;; 154C;CANADIAN SYLLABICS RAA;Lo;0;L;;;;;N;;;;; 154D;CANADIAN SYLLABICS WEST-CREE LA;Lo;0;L;;;;;N;;;;; 154E;CANADIAN SYLLABICS RWAA;Lo;0;L;;;;;N;;;;; 154F;CANADIAN SYLLABICS WEST-CREE RWAA;Lo;0;L;;;;;N;;;;; 1550;CANADIAN SYLLABICS R;Lo;0;L;;;;;N;;;;; 1551;CANADIAN SYLLABICS WEST-CREE R;Lo;0;L;;;;;N;;;;; 1552;CANADIAN SYLLABICS MEDIAL R;Lo;0;L;;;;;N;;;;; 1553;CANADIAN SYLLABICS FE;Lo;0;L;;;;;N;;;;; 1554;CANADIAN SYLLABICS FAAI;Lo;0;L;;;;;N;;;;; 1555;CANADIAN SYLLABICS FI;Lo;0;L;;;;;N;;;;; 1556;CANADIAN SYLLABICS FII;Lo;0;L;;;;;N;;;;; 1557;CANADIAN SYLLABICS FO;Lo;0;L;;;;;N;;;;; 1558;CANADIAN SYLLABICS FOO;Lo;0;L;;;;;N;;;;; 1559;CANADIAN SYLLABICS FA;Lo;0;L;;;;;N;;;;; 155A;CANADIAN SYLLABICS FAA;Lo;0;L;;;;;N;;;;; 155B;CANADIAN SYLLABICS FWAA;Lo;0;L;;;;;N;;;;; 155C;CANADIAN SYLLABICS WEST-CREE FWAA;Lo;0;L;;;;;N;;;;; 155D;CANADIAN SYLLABICS F;Lo;0;L;;;;;N;;;;; 155E;CANADIAN SYLLABICS THE;Lo;0;L;;;;;N;;;;; 155F;CANADIAN SYLLABICS N-CREE THE;Lo;0;L;;;;;N;;;;; 1560;CANADIAN SYLLABICS THI;Lo;0;L;;;;;N;;;;; 1561;CANADIAN SYLLABICS N-CREE THI;Lo;0;L;;;;;N;;;;; 1562;CANADIAN SYLLABICS THII;Lo;0;L;;;;;N;;;;; 1563;CANADIAN SYLLABICS N-CREE THII;Lo;0;L;;;;;N;;;;; 1564;CANADIAN SYLLABICS THO;Lo;0;L;;;;;N;;;;; 1565;CANADIAN SYLLABICS THOO;Lo;0;L;;;;;N;;;;; 1566;CANADIAN SYLLABICS THA;Lo;0;L;;;;;N;;;;; 1567;CANADIAN SYLLABICS THAA;Lo;0;L;;;;;N;;;;; 1568;CANADIAN SYLLABICS THWAA;Lo;0;L;;;;;N;;;;; 1569;CANADIAN SYLLABICS WEST-CREE THWAA;Lo;0;L;;;;;N;;;;; 156A;CANADIAN SYLLABICS TH;Lo;0;L;;;;;N;;;;; 156B;CANADIAN SYLLABICS TTHE;Lo;0;L;;;;;N;;;;; 156C;CANADIAN SYLLABICS TTHI;Lo;0;L;;;;;N;;;;; 156D;CANADIAN SYLLABICS TTHO;Lo;0;L;;;;;N;;;;; 156E;CANADIAN SYLLABICS TTHA;Lo;0;L;;;;;N;;;;; 156F;CANADIAN SYLLABICS TTH;Lo;0;L;;;;;N;;;;; 1570;CANADIAN SYLLABICS TYE;Lo;0;L;;;;;N;;;;; 1571;CANADIAN SYLLABICS TYI;Lo;0;L;;;;;N;;;;; 1572;CANADIAN SYLLABICS TYO;Lo;0;L;;;;;N;;;;; 1573;CANADIAN SYLLABICS TYA;Lo;0;L;;;;;N;;;;; 1574;CANADIAN SYLLABICS NUNAVIK HE;Lo;0;L;;;;;N;;;;; 1575;CANADIAN SYLLABICS NUNAVIK HI;Lo;0;L;;;;;N;;;;; 1576;CANADIAN SYLLABICS NUNAVIK HII;Lo;0;L;;;;;N;;;;; 1577;CANADIAN SYLLABICS NUNAVIK HO;Lo;0;L;;;;;N;;;;; 1578;CANADIAN SYLLABICS NUNAVIK HOO;Lo;0;L;;;;;N;;;;; 1579;CANADIAN SYLLABICS NUNAVIK HA;Lo;0;L;;;;;N;;;;; 157A;CANADIAN SYLLABICS NUNAVIK HAA;Lo;0;L;;;;;N;;;;; 157B;CANADIAN SYLLABICS NUNAVIK H;Lo;0;L;;;;;N;;;;; 157C;CANADIAN SYLLABICS NUNAVUT H;Lo;0;L;;;;;N;;;;; 157D;CANADIAN SYLLABICS HK;Lo;0;L;;;;;N;;;;; 157E;CANADIAN SYLLABICS QAAI;Lo;0;L;;;;;N;;;;; 157F;CANADIAN SYLLABICS QI;Lo;0;L;;;;;N;;;;; 1580;CANADIAN SYLLABICS QII;Lo;0;L;;;;;N;;;;; 1581;CANADIAN SYLLABICS QO;Lo;0;L;;;;;N;;;;; 1582;CANADIAN SYLLABICS QOO;Lo;0;L;;;;;N;;;;; 1583;CANADIAN SYLLABICS QA;Lo;0;L;;;;;N;;;;; 1584;CANADIAN SYLLABICS QAA;Lo;0;L;;;;;N;;;;; 1585;CANADIAN SYLLABICS Q;Lo;0;L;;;;;N;;;;; 1586;CANADIAN SYLLABICS TLHE;Lo;0;L;;;;;N;;;;; 1587;CANADIAN SYLLABICS TLHI;Lo;0;L;;;;;N;;;;; 1588;CANADIAN SYLLABICS TLHO;Lo;0;L;;;;;N;;;;; 1589;CANADIAN SYLLABICS TLHA;Lo;0;L;;;;;N;;;;; 158A;CANADIAN SYLLABICS WEST-CREE RE;Lo;0;L;;;;;N;;;;; 158B;CANADIAN SYLLABICS WEST-CREE RI;Lo;0;L;;;;;N;;;;; 158C;CANADIAN SYLLABICS WEST-CREE RO;Lo;0;L;;;;;N;;;;; 158D;CANADIAN SYLLABICS WEST-CREE RA;Lo;0;L;;;;;N;;;;; 158E;CANADIAN SYLLABICS NGAAI;Lo;0;L;;;;;N;;;;; 158F;CANADIAN SYLLABICS NGI;Lo;0;L;;;;;N;;;;; 1590;CANADIAN SYLLABICS NGII;Lo;0;L;;;;;N;;;;; 1591;CANADIAN SYLLABICS NGO;Lo;0;L;;;;;N;;;;; 1592;CANADIAN SYLLABICS NGOO;Lo;0;L;;;;;N;;;;; 1593;CANADIAN SYLLABICS NGA;Lo;0;L;;;;;N;;;;; 1594;CANADIAN SYLLABICS NGAA;Lo;0;L;;;;;N;;;;; 1595;CANADIAN SYLLABICS NG;Lo;0;L;;;;;N;;;;; 1596;CANADIAN SYLLABICS NNG;Lo;0;L;;;;;N;;;;; 1597;CANADIAN SYLLABICS SAYISI SHE;Lo;0;L;;;;;N;;;;; 1598;CANADIAN SYLLABICS SAYISI SHI;Lo;0;L;;;;;N;;;;; 1599;CANADIAN SYLLABICS SAYISI SHO;Lo;0;L;;;;;N;;;;; 159A;CANADIAN SYLLABICS SAYISI SHA;Lo;0;L;;;;;N;;;;; 159B;CANADIAN SYLLABICS WOODS-CREE THE;Lo;0;L;;;;;N;;;;; 159C;CANADIAN SYLLABICS WOODS-CREE THI;Lo;0;L;;;;;N;;;;; 159D;CANADIAN SYLLABICS WOODS-CREE THO;Lo;0;L;;;;;N;;;;; 159E;CANADIAN SYLLABICS WOODS-CREE THA;Lo;0;L;;;;;N;;;;; 159F;CANADIAN SYLLABICS WOODS-CREE TH;Lo;0;L;;;;;N;;;;; 15A0;CANADIAN SYLLABICS LHI;Lo;0;L;;;;;N;;;;; 15A1;CANADIAN SYLLABICS LHII;Lo;0;L;;;;;N;;;;; 15A2;CANADIAN SYLLABICS LHO;Lo;0;L;;;;;N;;;;; 15A3;CANADIAN SYLLABICS LHOO;Lo;0;L;;;;;N;;;;; 15A4;CANADIAN SYLLABICS LHA;Lo;0;L;;;;;N;;;;; 15A5;CANADIAN SYLLABICS LHAA;Lo;0;L;;;;;N;;;;; 15A6;CANADIAN SYLLABICS LH;Lo;0;L;;;;;N;;;;; 15A7;CANADIAN SYLLABICS TH-CREE THE;Lo;0;L;;;;;N;;;;; 15A8;CANADIAN SYLLABICS TH-CREE THI;Lo;0;L;;;;;N;;;;; 15A9;CANADIAN SYLLABICS TH-CREE THII;Lo;0;L;;;;;N;;;;; 15AA;CANADIAN SYLLABICS TH-CREE THO;Lo;0;L;;;;;N;;;;; 15AB;CANADIAN SYLLABICS TH-CREE THOO;Lo;0;L;;;;;N;;;;; 15AC;CANADIAN SYLLABICS TH-CREE THA;Lo;0;L;;;;;N;;;;; 15AD;CANADIAN SYLLABICS TH-CREE THAA;Lo;0;L;;;;;N;;;;; 15AE;CANADIAN SYLLABICS TH-CREE TH;Lo;0;L;;;;;N;;;;; 15AF;CANADIAN SYLLABICS AIVILIK B;Lo;0;L;;;;;N;;;;; 15B0;CANADIAN SYLLABICS BLACKFOOT E;Lo;0;L;;;;;N;;;;; 15B1;CANADIAN SYLLABICS BLACKFOOT I;Lo;0;L;;;;;N;;;;; 15B2;CANADIAN SYLLABICS BLACKFOOT O;Lo;0;L;;;;;N;;;;; 15B3;CANADIAN SYLLABICS BLACKFOOT A;Lo;0;L;;;;;N;;;;; 15B4;CANADIAN SYLLABICS BLACKFOOT WE;Lo;0;L;;;;;N;;;;; 15B5;CANADIAN SYLLABICS BLACKFOOT WI;Lo;0;L;;;;;N;;;;; 15B6;CANADIAN SYLLABICS BLACKFOOT WO;Lo;0;L;;;;;N;;;;; 15B7;CANADIAN SYLLABICS BLACKFOOT WA;Lo;0;L;;;;;N;;;;; 15B8;CANADIAN SYLLABICS BLACKFOOT NE;Lo;0;L;;;;;N;;;;; 15B9;CANADIAN SYLLABICS BLACKFOOT NI;Lo;0;L;;;;;N;;;;; 15BA;CANADIAN SYLLABICS BLACKFOOT NO;Lo;0;L;;;;;N;;;;; 15BB;CANADIAN SYLLABICS BLACKFOOT NA;Lo;0;L;;;;;N;;;;; 15BC;CANADIAN SYLLABICS BLACKFOOT KE;Lo;0;L;;;;;N;;;;; 15BD;CANADIAN SYLLABICS BLACKFOOT KI;Lo;0;L;;;;;N;;;;; 15BE;CANADIAN SYLLABICS BLACKFOOT KO;Lo;0;L;;;;;N;;;;; 15BF;CANADIAN SYLLABICS BLACKFOOT KA;Lo;0;L;;;;;N;;;;; 15C0;CANADIAN SYLLABICS SAYISI HE;Lo;0;L;;;;;N;;;;; 15C1;CANADIAN SYLLABICS SAYISI HI;Lo;0;L;;;;;N;;;;; 15C2;CANADIAN SYLLABICS SAYISI HO;Lo;0;L;;;;;N;;;;; 15C3;CANADIAN SYLLABICS SAYISI HA;Lo;0;L;;;;;N;;;;; 15C4;CANADIAN SYLLABICS CARRIER GHU;Lo;0;L;;;;;N;;;;; 15C5;CANADIAN SYLLABICS CARRIER GHO;Lo;0;L;;;;;N;;;;; 15C6;CANADIAN SYLLABICS CARRIER GHE;Lo;0;L;;;;;N;;;;; 15C7;CANADIAN SYLLABICS CARRIER GHEE;Lo;0;L;;;;;N;;;;; 15C8;CANADIAN SYLLABICS CARRIER GHI;Lo;0;L;;;;;N;;;;; 15C9;CANADIAN SYLLABICS CARRIER GHA;Lo;0;L;;;;;N;;;;; 15CA;CANADIAN SYLLABICS CARRIER RU;Lo;0;L;;;;;N;;;;; 15CB;CANADIAN SYLLABICS CARRIER RO;Lo;0;L;;;;;N;;;;; 15CC;CANADIAN SYLLABICS CARRIER RE;Lo;0;L;;;;;N;;;;; 15CD;CANADIAN SYLLABICS CARRIER REE;Lo;0;L;;;;;N;;;;; 15CE;CANADIAN SYLLABICS CARRIER RI;Lo;0;L;;;;;N;;;;; 15CF;CANADIAN SYLLABICS CARRIER RA;Lo;0;L;;;;;N;;;;; 15D0;CANADIAN SYLLABICS CARRIER WU;Lo;0;L;;;;;N;;;;; 15D1;CANADIAN SYLLABICS CARRIER WO;Lo;0;L;;;;;N;;;;; 15D2;CANADIAN SYLLABICS CARRIER WE;Lo;0;L;;;;;N;;;;; 15D3;CANADIAN SYLLABICS CARRIER WEE;Lo;0;L;;;;;N;;;;; 15D4;CANADIAN SYLLABICS CARRIER WI;Lo;0;L;;;;;N;;;;; 15D5;CANADIAN SYLLABICS CARRIER WA;Lo;0;L;;;;;N;;;;; 15D6;CANADIAN SYLLABICS CARRIER HWU;Lo;0;L;;;;;N;;;;; 15D7;CANADIAN SYLLABICS CARRIER HWO;Lo;0;L;;;;;N;;;;; 15D8;CANADIAN SYLLABICS CARRIER HWE;Lo;0;L;;;;;N;;;;; 15D9;CANADIAN SYLLABICS CARRIER HWEE;Lo;0;L;;;;;N;;;;; 15DA;CANADIAN SYLLABICS CARRIER HWI;Lo;0;L;;;;;N;;;;; 15DB;CANADIAN SYLLABICS CARRIER HWA;Lo;0;L;;;;;N;;;;; 15DC;CANADIAN SYLLABICS CARRIER THU;Lo;0;L;;;;;N;;;;; 15DD;CANADIAN SYLLABICS CARRIER THO;Lo;0;L;;;;;N;;;;; 15DE;CANADIAN SYLLABICS CARRIER THE;Lo;0;L;;;;;N;;;;; 15DF;CANADIAN SYLLABICS CARRIER THEE;Lo;0;L;;;;;N;;;;; 15E0;CANADIAN SYLLABICS CARRIER THI;Lo;0;L;;;;;N;;;;; 15E1;CANADIAN SYLLABICS CARRIER THA;Lo;0;L;;;;;N;;;;; 15E2;CANADIAN SYLLABICS CARRIER TTU;Lo;0;L;;;;;N;;;;; 15E3;CANADIAN SYLLABICS CARRIER TTO;Lo;0;L;;;;;N;;;;; 15E4;CANADIAN SYLLABICS CARRIER TTE;Lo;0;L;;;;;N;;;;; 15E5;CANADIAN SYLLABICS CARRIER TTEE;Lo;0;L;;;;;N;;;;; 15E6;CANADIAN SYLLABICS CARRIER TTI;Lo;0;L;;;;;N;;;;; 15E7;CANADIAN SYLLABICS CARRIER TTA;Lo;0;L;;;;;N;;;;; 15E8;CANADIAN SYLLABICS CARRIER PU;Lo;0;L;;;;;N;;;;; 15E9;CANADIAN SYLLABICS CARRIER PO;Lo;0;L;;;;;N;;;;; 15EA;CANADIAN SYLLABICS CARRIER PE;Lo;0;L;;;;;N;;;;; 15EB;CANADIAN SYLLABICS CARRIER PEE;Lo;0;L;;;;;N;;;;; 15EC;CANADIAN SYLLABICS CARRIER PI;Lo;0;L;;;;;N;;;;; 15ED;CANADIAN SYLLABICS CARRIER PA;Lo;0;L;;;;;N;;;;; 15EE;CANADIAN SYLLABICS CARRIER P;Lo;0;L;;;;;N;;;;; 15EF;CANADIAN SYLLABICS CARRIER GU;Lo;0;L;;;;;N;;;;; 15F0;CANADIAN SYLLABICS CARRIER GO;Lo;0;L;;;;;N;;;;; 15F1;CANADIAN SYLLABICS CARRIER GE;Lo;0;L;;;;;N;;;;; 15F2;CANADIAN SYLLABICS CARRIER GEE;Lo;0;L;;;;;N;;;;; 15F3;CANADIAN SYLLABICS CARRIER GI;Lo;0;L;;;;;N;;;;; 15F4;CANADIAN SYLLABICS CARRIER GA;Lo;0;L;;;;;N;;;;; 15F5;CANADIAN SYLLABICS CARRIER KHU;Lo;0;L;;;;;N;;;;; 15F6;CANADIAN SYLLABICS CARRIER KHO;Lo;0;L;;;;;N;;;;; 15F7;CANADIAN SYLLABICS CARRIER KHE;Lo;0;L;;;;;N;;;;; 15F8;CANADIAN SYLLABICS CARRIER KHEE;Lo;0;L;;;;;N;;;;; 15F9;CANADIAN SYLLABICS CARRIER KHI;Lo;0;L;;;;;N;;;;; 15FA;CANADIAN SYLLABICS CARRIER KHA;Lo;0;L;;;;;N;;;;; 15FB;CANADIAN SYLLABICS CARRIER KKU;Lo;0;L;;;;;N;;;;; 15FC;CANADIAN SYLLABICS CARRIER KKO;Lo;0;L;;;;;N;;;;; 15FD;CANADIAN SYLLABICS CARRIER KKE;Lo;0;L;;;;;N;;;;; 15FE;CANADIAN SYLLABICS CARRIER KKEE;Lo;0;L;;;;;N;;;;; 15FF;CANADIAN SYLLABICS CARRIER KKI;Lo;0;L;;;;;N;;;;; 1600;CANADIAN SYLLABICS CARRIER KKA;Lo;0;L;;;;;N;;;;; 1601;CANADIAN SYLLABICS CARRIER KK;Lo;0;L;;;;;N;;;;; 1602;CANADIAN SYLLABICS CARRIER NU;Lo;0;L;;;;;N;;;;; 1603;CANADIAN SYLLABICS CARRIER NO;Lo;0;L;;;;;N;;;;; 1604;CANADIAN SYLLABICS CARRIER NE;Lo;0;L;;;;;N;;;;; 1605;CANADIAN SYLLABICS CARRIER NEE;Lo;0;L;;;;;N;;;;; 1606;CANADIAN SYLLABICS CARRIER NI;Lo;0;L;;;;;N;;;;; 1607;CANADIAN SYLLABICS CARRIER NA;Lo;0;L;;;;;N;;;;; 1608;CANADIAN SYLLABICS CARRIER MU;Lo;0;L;;;;;N;;;;; 1609;CANADIAN SYLLABICS CARRIER MO;Lo;0;L;;;;;N;;;;; 160A;CANADIAN SYLLABICS CARRIER ME;Lo;0;L;;;;;N;;;;; 160B;CANADIAN SYLLABICS CARRIER MEE;Lo;0;L;;;;;N;;;;; 160C;CANADIAN SYLLABICS CARRIER MI;Lo;0;L;;;;;N;;;;; 160D;CANADIAN SYLLABICS CARRIER MA;Lo;0;L;;;;;N;;;;; 160E;CANADIAN SYLLABICS CARRIER YU;Lo;0;L;;;;;N;;;;; 160F;CANADIAN SYLLABICS CARRIER YO;Lo;0;L;;;;;N;;;;; 1610;CANADIAN SYLLABICS CARRIER YE;Lo;0;L;;;;;N;;;;; 1611;CANADIAN SYLLABICS CARRIER YEE;Lo;0;L;;;;;N;;;;; 1612;CANADIAN SYLLABICS CARRIER YI;Lo;0;L;;;;;N;;;;; 1613;CANADIAN SYLLABICS CARRIER YA;Lo;0;L;;;;;N;;;;; 1614;CANADIAN SYLLABICS CARRIER JU;Lo;0;L;;;;;N;;;;; 1615;CANADIAN SYLLABICS SAYISI JU;Lo;0;L;;;;;N;;;;; 1616;CANADIAN SYLLABICS CARRIER JO;Lo;0;L;;;;;N;;;;; 1617;CANADIAN SYLLABICS CARRIER JE;Lo;0;L;;;;;N;;;;; 1618;CANADIAN SYLLABICS CARRIER JEE;Lo;0;L;;;;;N;;;;; 1619;CANADIAN SYLLABICS CARRIER JI;Lo;0;L;;;;;N;;;;; 161A;CANADIAN SYLLABICS SAYISI JI;Lo;0;L;;;;;N;;;;; 161B;CANADIAN SYLLABICS CARRIER JA;Lo;0;L;;;;;N;;;;; 161C;CANADIAN SYLLABICS CARRIER JJU;Lo;0;L;;;;;N;;;;; 161D;CANADIAN SYLLABICS CARRIER JJO;Lo;0;L;;;;;N;;;;; 161E;CANADIAN SYLLABICS CARRIER JJE;Lo;0;L;;;;;N;;;;; 161F;CANADIAN SYLLABICS CARRIER JJEE;Lo;0;L;;;;;N;;;;; 1620;CANADIAN SYLLABICS CARRIER JJI;Lo;0;L;;;;;N;;;;; 1621;CANADIAN SYLLABICS CARRIER JJA;Lo;0;L;;;;;N;;;;; 1622;CANADIAN SYLLABICS CARRIER LU;Lo;0;L;;;;;N;;;;; 1623;CANADIAN SYLLABICS CARRIER LO;Lo;0;L;;;;;N;;;;; 1624;CANADIAN SYLLABICS CARRIER LE;Lo;0;L;;;;;N;;;;; 1625;CANADIAN SYLLABICS CARRIER LEE;Lo;0;L;;;;;N;;;;; 1626;CANADIAN SYLLABICS CARRIER LI;Lo;0;L;;;;;N;;;;; 1627;CANADIAN SYLLABICS CARRIER LA;Lo;0;L;;;;;N;;;;; 1628;CANADIAN SYLLABICS CARRIER DLU;Lo;0;L;;;;;N;;;;; 1629;CANADIAN SYLLABICS CARRIER DLO;Lo;0;L;;;;;N;;;;; 162A;CANADIAN SYLLABICS CARRIER DLE;Lo;0;L;;;;;N;;;;; 162B;CANADIAN SYLLABICS CARRIER DLEE;Lo;0;L;;;;;N;;;;; 162C;CANADIAN SYLLABICS CARRIER DLI;Lo;0;L;;;;;N;;;;; 162D;CANADIAN SYLLABICS CARRIER DLA;Lo;0;L;;;;;N;;;;; 162E;CANADIAN SYLLABICS CARRIER LHU;Lo;0;L;;;;;N;;;;; 162F;CANADIAN SYLLABICS CARRIER LHO;Lo;0;L;;;;;N;;;;; 1630;CANADIAN SYLLABICS CARRIER LHE;Lo;0;L;;;;;N;;;;; 1631;CANADIAN SYLLABICS CARRIER LHEE;Lo;0;L;;;;;N;;;;; 1632;CANADIAN SYLLABICS CARRIER LHI;Lo;0;L;;;;;N;;;;; 1633;CANADIAN SYLLABICS CARRIER LHA;Lo;0;L;;;;;N;;;;; 1634;CANADIAN SYLLABICS CARRIER TLHU;Lo;0;L;;;;;N;;;;; 1635;CANADIAN SYLLABICS CARRIER TLHO;Lo;0;L;;;;;N;;;;; 1636;CANADIAN SYLLABICS CARRIER TLHE;Lo;0;L;;;;;N;;;;; 1637;CANADIAN SYLLABICS CARRIER TLHEE;Lo;0;L;;;;;N;;;;; 1638;CANADIAN SYLLABICS CARRIER TLHI;Lo;0;L;;;;;N;;;;; 1639;CANADIAN SYLLABICS CARRIER TLHA;Lo;0;L;;;;;N;;;;; 163A;CANADIAN SYLLABICS CARRIER TLU;Lo;0;L;;;;;N;;;;; 163B;CANADIAN SYLLABICS CARRIER TLO;Lo;0;L;;;;;N;;;;; 163C;CANADIAN SYLLABICS CARRIER TLE;Lo;0;L;;;;;N;;;;; 163D;CANADIAN SYLLABICS CARRIER TLEE;Lo;0;L;;;;;N;;;;; 163E;CANADIAN SYLLABICS CARRIER TLI;Lo;0;L;;;;;N;;;;; 163F;CANADIAN SYLLABICS CARRIER TLA;Lo;0;L;;;;;N;;;;; 1640;CANADIAN SYLLABICS CARRIER ZU;Lo;0;L;;;;;N;;;;; 1641;CANADIAN SYLLABICS CARRIER ZO;Lo;0;L;;;;;N;;;;; 1642;CANADIAN SYLLABICS CARRIER ZE;Lo;0;L;;;;;N;;;;; 1643;CANADIAN SYLLABICS CARRIER ZEE;Lo;0;L;;;;;N;;;;; 1644;CANADIAN SYLLABICS CARRIER ZI;Lo;0;L;;;;;N;;;;; 1645;CANADIAN SYLLABICS CARRIER ZA;Lo;0;L;;;;;N;;;;; 1646;CANADIAN SYLLABICS CARRIER Z;Lo;0;L;;;;;N;;;;; 1647;CANADIAN SYLLABICS CARRIER INITIAL Z;Lo;0;L;;;;;N;;;;; 1648;CANADIAN SYLLABICS CARRIER DZU;Lo;0;L;;;;;N;;;;; 1649;CANADIAN SYLLABICS CARRIER DZO;Lo;0;L;;;;;N;;;;; 164A;CANADIAN SYLLABICS CARRIER DZE;Lo;0;L;;;;;N;;;;; 164B;CANADIAN SYLLABICS CARRIER DZEE;Lo;0;L;;;;;N;;;;; 164C;CANADIAN SYLLABICS CARRIER DZI;Lo;0;L;;;;;N;;;;; 164D;CANADIAN SYLLABICS CARRIER DZA;Lo;0;L;;;;;N;;;;; 164E;CANADIAN SYLLABICS CARRIER SU;Lo;0;L;;;;;N;;;;; 164F;CANADIAN SYLLABICS CARRIER SO;Lo;0;L;;;;;N;;;;; 1650;CANADIAN SYLLABICS CARRIER SE;Lo;0;L;;;;;N;;;;; 1651;CANADIAN SYLLABICS CARRIER SEE;Lo;0;L;;;;;N;;;;; 1652;CANADIAN SYLLABICS CARRIER SI;Lo;0;L;;;;;N;;;;; 1653;CANADIAN SYLLABICS CARRIER SA;Lo;0;L;;;;;N;;;;; 1654;CANADIAN SYLLABICS CARRIER SHU;Lo;0;L;;;;;N;;;;; 1655;CANADIAN SYLLABICS CARRIER SHO;Lo;0;L;;;;;N;;;;; 1656;CANADIAN SYLLABICS CARRIER SHE;Lo;0;L;;;;;N;;;;; 1657;CANADIAN SYLLABICS CARRIER SHEE;Lo;0;L;;;;;N;;;;; 1658;CANADIAN SYLLABICS CARRIER SHI;Lo;0;L;;;;;N;;;;; 1659;CANADIAN SYLLABICS CARRIER SHA;Lo;0;L;;;;;N;;;;; 165A;CANADIAN SYLLABICS CARRIER SH;Lo;0;L;;;;;N;;;;; 165B;CANADIAN SYLLABICS CARRIER TSU;Lo;0;L;;;;;N;;;;; 165C;CANADIAN SYLLABICS CARRIER TSO;Lo;0;L;;;;;N;;;;; 165D;CANADIAN SYLLABICS CARRIER TSE;Lo;0;L;;;;;N;;;;; 165E;CANADIAN SYLLABICS CARRIER TSEE;Lo;0;L;;;;;N;;;;; 165F;CANADIAN SYLLABICS CARRIER TSI;Lo;0;L;;;;;N;;;;; 1660;CANADIAN SYLLABICS CARRIER TSA;Lo;0;L;;;;;N;;;;; 1661;CANADIAN SYLLABICS CARRIER CHU;Lo;0;L;;;;;N;;;;; 1662;CANADIAN SYLLABICS CARRIER CHO;Lo;0;L;;;;;N;;;;; 1663;CANADIAN SYLLABICS CARRIER CHE;Lo;0;L;;;;;N;;;;; 1664;CANADIAN SYLLABICS CARRIER CHEE;Lo;0;L;;;;;N;;;;; 1665;CANADIAN SYLLABICS CARRIER CHI;Lo;0;L;;;;;N;;;;; 1666;CANADIAN SYLLABICS CARRIER CHA;Lo;0;L;;;;;N;;;;; 1667;CANADIAN SYLLABICS CARRIER TTSU;Lo;0;L;;;;;N;;;;; 1668;CANADIAN SYLLABICS CARRIER TTSO;Lo;0;L;;;;;N;;;;; 1669;CANADIAN SYLLABICS CARRIER TTSE;Lo;0;L;;;;;N;;;;; 166A;CANADIAN SYLLABICS CARRIER TTSEE;Lo;0;L;;;;;N;;;;; 166B;CANADIAN SYLLABICS CARRIER TTSI;Lo;0;L;;;;;N;;;;; 166C;CANADIAN SYLLABICS CARRIER TTSA;Lo;0;L;;;;;N;;;;; 166D;CANADIAN SYLLABICS CHI SIGN;Po;0;L;;;;;N;;;;; 166E;CANADIAN SYLLABICS FULL STOP;Po;0;L;;;;;N;;;;; 166F;CANADIAN SYLLABICS QAI;Lo;0;L;;;;;N;;;;; 1670;CANADIAN SYLLABICS NGAI;Lo;0;L;;;;;N;;;;; 1671;CANADIAN SYLLABICS NNGI;Lo;0;L;;;;;N;;;;; 1672;CANADIAN SYLLABICS NNGII;Lo;0;L;;;;;N;;;;; 1673;CANADIAN SYLLABICS NNGO;Lo;0;L;;;;;N;;;;; 1674;CANADIAN SYLLABICS NNGOO;Lo;0;L;;;;;N;;;;; 1675;CANADIAN SYLLABICS NNGA;Lo;0;L;;;;;N;;;;; 1676;CANADIAN SYLLABICS NNGAA;Lo;0;L;;;;;N;;;;; 1680;OGHAM SPACE MARK;Zs;0;WS;;;;;N;;;;; 1681;OGHAM LETTER BEITH;Lo;0;L;;;;;N;;;;; 1682;OGHAM LETTER LUIS;Lo;0;L;;;;;N;;;;; 1683;OGHAM LETTER FEARN;Lo;0;L;;;;;N;;;;; 1684;OGHAM LETTER SAIL;Lo;0;L;;;;;N;;;;; 1685;OGHAM LETTER NION;Lo;0;L;;;;;N;;;;; 1686;OGHAM LETTER UATH;Lo;0;L;;;;;N;;;;; 1687;OGHAM LETTER DAIR;Lo;0;L;;;;;N;;;;; 1688;OGHAM LETTER TINNE;Lo;0;L;;;;;N;;;;; 1689;OGHAM LETTER COLL;Lo;0;L;;;;;N;;;;; 168A;OGHAM LETTER CEIRT;Lo;0;L;;;;;N;;;;; 168B;OGHAM LETTER MUIN;Lo;0;L;;;;;N;;;;; 168C;OGHAM LETTER GORT;Lo;0;L;;;;;N;;;;; 168D;OGHAM LETTER NGEADAL;Lo;0;L;;;;;N;;;;; 168E;OGHAM LETTER STRAIF;Lo;0;L;;;;;N;;;;; 168F;OGHAM LETTER RUIS;Lo;0;L;;;;;N;;;;; 1690;OGHAM LETTER AILM;Lo;0;L;;;;;N;;;;; 1691;OGHAM LETTER ONN;Lo;0;L;;;;;N;;;;; 1692;OGHAM LETTER UR;Lo;0;L;;;;;N;;;;; 1693;OGHAM LETTER EADHADH;Lo;0;L;;;;;N;;;;; 1694;OGHAM LETTER IODHADH;Lo;0;L;;;;;N;;;;; 1695;OGHAM LETTER EABHADH;Lo;0;L;;;;;N;;;;; 1696;OGHAM LETTER OR;Lo;0;L;;;;;N;;;;; 1697;OGHAM LETTER UILLEANN;Lo;0;L;;;;;N;;;;; 1698;OGHAM LETTER IFIN;Lo;0;L;;;;;N;;;;; 1699;OGHAM LETTER EAMHANCHOLL;Lo;0;L;;;;;N;;;;; 169A;OGHAM LETTER PEITH;Lo;0;L;;;;;N;;;;; 169B;OGHAM FEATHER MARK;Ps;0;ON;;;;;N;;;;; 169C;OGHAM REVERSED FEATHER MARK;Pe;0;ON;;;;;N;;;;; 16A0;RUNIC LETTER FEHU FEOH FE F;Lo;0;L;;;;;N;;;;; 16A1;RUNIC LETTER V;Lo;0;L;;;;;N;;;;; 16A2;RUNIC LETTER URUZ UR U;Lo;0;L;;;;;N;;;;; 16A3;RUNIC LETTER YR;Lo;0;L;;;;;N;;;;; 16A4;RUNIC LETTER Y;Lo;0;L;;;;;N;;;;; 16A5;RUNIC LETTER W;Lo;0;L;;;;;N;;;;; 16A6;RUNIC LETTER THURISAZ THURS THORN;Lo;0;L;;;;;N;;;;; 16A7;RUNIC LETTER ETH;Lo;0;L;;;;;N;;;;; 16A8;RUNIC LETTER ANSUZ A;Lo;0;L;;;;;N;;;;; 16A9;RUNIC LETTER OS O;Lo;0;L;;;;;N;;;;; 16AA;RUNIC LETTER AC A;Lo;0;L;;;;;N;;;;; 16AB;RUNIC LETTER AESC;Lo;0;L;;;;;N;;;;; 16AC;RUNIC LETTER LONG-BRANCH-OSS O;Lo;0;L;;;;;N;;;;; 16AD;RUNIC LETTER SHORT-TWIG-OSS O;Lo;0;L;;;;;N;;;;; 16AE;RUNIC LETTER O;Lo;0;L;;;;;N;;;;; 16AF;RUNIC LETTER OE;Lo;0;L;;;;;N;;;;; 16B0;RUNIC LETTER ON;Lo;0;L;;;;;N;;;;; 16B1;RUNIC LETTER RAIDO RAD REID R;Lo;0;L;;;;;N;;;;; 16B2;RUNIC LETTER KAUNA;Lo;0;L;;;;;N;;;;; 16B3;RUNIC LETTER CEN;Lo;0;L;;;;;N;;;;; 16B4;RUNIC LETTER KAUN K;Lo;0;L;;;;;N;;;;; 16B5;RUNIC LETTER G;Lo;0;L;;;;;N;;;;; 16B6;RUNIC LETTER ENG;Lo;0;L;;;;;N;;;;; 16B7;RUNIC LETTER GEBO GYFU G;Lo;0;L;;;;;N;;;;; 16B8;RUNIC LETTER GAR;Lo;0;L;;;;;N;;;;; 16B9;RUNIC LETTER WUNJO WYNN W;Lo;0;L;;;;;N;;;;; 16BA;RUNIC LETTER HAGLAZ H;Lo;0;L;;;;;N;;;;; 16BB;RUNIC LETTER HAEGL H;Lo;0;L;;;;;N;;;;; 16BC;RUNIC LETTER LONG-BRANCH-HAGALL H;Lo;0;L;;;;;N;;;;; 16BD;RUNIC LETTER SHORT-TWIG-HAGALL H;Lo;0;L;;;;;N;;;;; 16BE;RUNIC LETTER NAUDIZ NYD NAUD N;Lo;0;L;;;;;N;;;;; 16BF;RUNIC LETTER SHORT-TWIG-NAUD N;Lo;0;L;;;;;N;;;;; 16C0;RUNIC LETTER DOTTED-N;Lo;0;L;;;;;N;;;;; 16C1;RUNIC LETTER ISAZ IS ISS I;Lo;0;L;;;;;N;;;;; 16C2;RUNIC LETTER E;Lo;0;L;;;;;N;;;;; 16C3;RUNIC LETTER JERAN J;Lo;0;L;;;;;N;;;;; 16C4;RUNIC LETTER GER;Lo;0;L;;;;;N;;;;; 16C5;RUNIC LETTER LONG-BRANCH-AR AE;Lo;0;L;;;;;N;;;;; 16C6;RUNIC LETTER SHORT-TWIG-AR A;Lo;0;L;;;;;N;;;;; 16C7;RUNIC LETTER IWAZ EOH;Lo;0;L;;;;;N;;;;; 16C8;RUNIC LETTER PERTHO PEORTH P;Lo;0;L;;;;;N;;;;; 16C9;RUNIC LETTER ALGIZ EOLHX;Lo;0;L;;;;;N;;;;; 16CA;RUNIC LETTER SOWILO S;Lo;0;L;;;;;N;;;;; 16CB;RUNIC LETTER SIGEL LONG-BRANCH-SOL S;Lo;0;L;;;;;N;;;;; 16CC;RUNIC LETTER SHORT-TWIG-SOL S;Lo;0;L;;;;;N;;;;; 16CD;RUNIC LETTER C;Lo;0;L;;;;;N;;;;; 16CE;RUNIC LETTER Z;Lo;0;L;;;;;N;;;;; 16CF;RUNIC LETTER TIWAZ TIR TYR T;Lo;0;L;;;;;N;;;;; 16D0;RUNIC LETTER SHORT-TWIG-TYR T;Lo;0;L;;;;;N;;;;; 16D1;RUNIC LETTER D;Lo;0;L;;;;;N;;;;; 16D2;RUNIC LETTER BERKANAN BEORC BJARKAN B;Lo;0;L;;;;;N;;;;; 16D3;RUNIC LETTER SHORT-TWIG-BJARKAN B;Lo;0;L;;;;;N;;;;; 16D4;RUNIC LETTER DOTTED-P;Lo;0;L;;;;;N;;;;; 16D5;RUNIC LETTER OPEN-P;Lo;0;L;;;;;N;;;;; 16D6;RUNIC LETTER EHWAZ EH E;Lo;0;L;;;;;N;;;;; 16D7;RUNIC LETTER MANNAZ MAN M;Lo;0;L;;;;;N;;;;; 16D8;RUNIC LETTER LONG-BRANCH-MADR M;Lo;0;L;;;;;N;;;;; 16D9;RUNIC LETTER SHORT-TWIG-MADR M;Lo;0;L;;;;;N;;;;; 16DA;RUNIC LETTER LAUKAZ LAGU LOGR L;Lo;0;L;;;;;N;;;;; 16DB;RUNIC LETTER DOTTED-L;Lo;0;L;;;;;N;;;;; 16DC;RUNIC LETTER INGWAZ;Lo;0;L;;;;;N;;;;; 16DD;RUNIC LETTER ING;Lo;0;L;;;;;N;;;;; 16DE;RUNIC LETTER DAGAZ DAEG D;Lo;0;L;;;;;N;;;;; 16DF;RUNIC LETTER OTHALAN ETHEL O;Lo;0;L;;;;;N;;;;; 16E0;RUNIC LETTER EAR;Lo;0;L;;;;;N;;;;; 16E1;RUNIC LETTER IOR;Lo;0;L;;;;;N;;;;; 16E2;RUNIC LETTER CWEORTH;Lo;0;L;;;;;N;;;;; 16E3;RUNIC LETTER CALC;Lo;0;L;;;;;N;;;;; 16E4;RUNIC LETTER CEALC;Lo;0;L;;;;;N;;;;; 16E5;RUNIC LETTER STAN;Lo;0;L;;;;;N;;;;; 16E6;RUNIC LETTER LONG-BRANCH-YR;Lo;0;L;;;;;N;;;;; 16E7;RUNIC LETTER SHORT-TWIG-YR;Lo;0;L;;;;;N;;;;; 16E8;RUNIC LETTER ICELANDIC-YR;Lo;0;L;;;;;N;;;;; 16E9;RUNIC LETTER Q;Lo;0;L;;;;;N;;;;; 16EA;RUNIC LETTER X;Lo;0;L;;;;;N;;;;; 16EB;RUNIC SINGLE PUNCTUATION;Po;0;L;;;;;N;;;;; 16EC;RUNIC MULTIPLE PUNCTUATION;Po;0;L;;;;;N;;;;; 16ED;RUNIC CROSS PUNCTUATION;Po;0;L;;;;;N;;;;; 16EE;RUNIC ARLAUG SYMBOL;No;0;L;;;;17;N;;golden number 17;;; 16EF;RUNIC TVIMADUR SYMBOL;No;0;L;;;;18;N;;golden number 18;;; 16F0;RUNIC BELGTHOR SYMBOL;No;0;L;;;;19;N;;golden number 19;;; 1780;KHMER LETTER KA;Lo;0;L;;;;;N;;;;; 1781;KHMER LETTER KHA;Lo;0;L;;;;;N;;;;; 1782;KHMER LETTER KO;Lo;0;L;;;;;N;;;;; 1783;KHMER LETTER KHO;Lo;0;L;;;;;N;;;;; 1784;KHMER LETTER NGO;Lo;0;L;;;;;N;;;;; 1785;KHMER LETTER CA;Lo;0;L;;;;;N;;;;; 1786;KHMER LETTER CHA;Lo;0;L;;;;;N;;;;; 1787;KHMER LETTER CO;Lo;0;L;;;;;N;;;;; 1788;KHMER LETTER CHO;Lo;0;L;;;;;N;;;;; 1789;KHMER LETTER NYO;Lo;0;L;;;;;N;;;;; 178A;KHMER LETTER DA;Lo;0;L;;;;;N;;;;; 178B;KHMER LETTER TTHA;Lo;0;L;;;;;N;;;;; 178C;KHMER LETTER DO;Lo;0;L;;;;;N;;;;; 178D;KHMER LETTER TTHO;Lo;0;L;;;;;N;;;;; 178E;KHMER LETTER NNO;Lo;0;L;;;;;N;;;;; 178F;KHMER LETTER TA;Lo;0;L;;;;;N;;;;; 1790;KHMER LETTER THA;Lo;0;L;;;;;N;;;;; 1791;KHMER LETTER TO;Lo;0;L;;;;;N;;;;; 1792;KHMER LETTER THO;Lo;0;L;;;;;N;;;;; 1793;KHMER LETTER NO;Lo;0;L;;;;;N;;;;; 1794;KHMER LETTER BA;Lo;0;L;;;;;N;;;;; 1795;KHMER LETTER PHA;Lo;0;L;;;;;N;;;;; 1796;KHMER LETTER PO;Lo;0;L;;;;;N;;;;; 1797;KHMER LETTER PHO;Lo;0;L;;;;;N;;;;; 1798;KHMER LETTER MO;Lo;0;L;;;;;N;;;;; 1799;KHMER LETTER YO;Lo;0;L;;;;;N;;;;; 179A;KHMER LETTER RO;Lo;0;L;;;;;N;;;;; 179B;KHMER LETTER LO;Lo;0;L;;;;;N;;;;; 179C;KHMER LETTER VO;Lo;0;L;;;;;N;;;;; 179D;KHMER LETTER SHA;Lo;0;L;;;;;N;;;;; 179E;KHMER LETTER SSO;Lo;0;L;;;;;N;;;;; 179F;KHMER LETTER SA;Lo;0;L;;;;;N;;;;; 17A0;KHMER LETTER HA;Lo;0;L;;;;;N;;;;; 17A1;KHMER LETTER LA;Lo;0;L;;;;;N;;;;; 17A2;KHMER LETTER QA;Lo;0;L;;;;;N;;;;; 17A3;KHMER INDEPENDENT VOWEL QAQ;Lo;0;L;;;;;N;;;;; 17A4;KHMER INDEPENDENT VOWEL QAA;Lo;0;L;;;;;N;;;;; 17A5;KHMER INDEPENDENT VOWEL QI;Lo;0;L;;;;;N;;;;; 17A6;KHMER INDEPENDENT VOWEL QII;Lo;0;L;;;;;N;;;;; 17A7;KHMER INDEPENDENT VOWEL QU;Lo;0;L;;;;;N;;;;; 17A8;KHMER INDEPENDENT VOWEL QUK;Lo;0;L;;;;;N;;;;; 17A9;KHMER INDEPENDENT VOWEL QUU;Lo;0;L;;;;;N;;;;; 17AA;KHMER INDEPENDENT VOWEL QUUV;Lo;0;L;;;;;N;;;;; 17AB;KHMER INDEPENDENT VOWEL RY;Lo;0;L;;;;;N;;;;; 17AC;KHMER INDEPENDENT VOWEL RYY;Lo;0;L;;;;;N;;;;; 17AD;KHMER INDEPENDENT VOWEL LY;Lo;0;L;;;;;N;;;;; 17AE;KHMER INDEPENDENT VOWEL LYY;Lo;0;L;;;;;N;;;;; 17AF;KHMER INDEPENDENT VOWEL QE;Lo;0;L;;;;;N;;;;; 17B0;KHMER INDEPENDENT VOWEL QAI;Lo;0;L;;;;;N;;;;; 17B1;KHMER INDEPENDENT VOWEL QOO TYPE ONE;Lo;0;L;;;;;N;;;;; 17B2;KHMER INDEPENDENT VOWEL QOO TYPE TWO;Lo;0;L;;;;;N;;;;; 17B3;KHMER INDEPENDENT VOWEL QAU;Lo;0;L;;;;;N;;;;; 17B4;KHMER VOWEL INHERENT AQ;Mc;0;L;;;;;N;;;;; 17B5;KHMER VOWEL INHERENT AA;Mc;0;L;;;;;N;;;;; 17B6;KHMER VOWEL SIGN AA;Mc;0;L;;;;;N;;;;; 17B7;KHMER VOWEL SIGN I;Mn;0;NSM;;;;;N;;;;; 17B8;KHMER VOWEL SIGN II;Mn;0;NSM;;;;;N;;;;; 17B9;KHMER VOWEL SIGN Y;Mn;0;NSM;;;;;N;;;;; 17BA;KHMER VOWEL SIGN YY;Mn;0;NSM;;;;;N;;;;; 17BB;KHMER VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;; 17BC;KHMER VOWEL SIGN UU;Mn;0;NSM;;;;;N;;;;; 17BD;KHMER VOWEL SIGN UA;Mn;0;NSM;;;;;N;;;;; 17BE;KHMER VOWEL SIGN OE;Mc;0;L;;;;;N;;;;; 17BF;KHMER VOWEL SIGN YA;Mc;0;L;;;;;N;;;;; 17C0;KHMER VOWEL SIGN IE;Mc;0;L;;;;;N;;;;; 17C1;KHMER VOWEL SIGN E;Mc;0;L;;;;;N;;;;; 17C2;KHMER VOWEL SIGN AE;Mc;0;L;;;;;N;;;;; 17C3;KHMER VOWEL SIGN AI;Mc;0;L;;;;;N;;;;; 17C4;KHMER VOWEL SIGN OO;Mc;0;L;;;;;N;;;;; 17C5;KHMER VOWEL SIGN AU;Mc;0;L;;;;;N;;;;; 17C6;KHMER SIGN NIKAHIT;Mn;0;NSM;;;;;N;;;;; 17C7;KHMER SIGN REAHMUK;Mc;0;L;;;;;N;;;;; 17C8;KHMER SIGN YUUKALEAPINTU;Mc;0;L;;;;;N;;;;; 17C9;KHMER SIGN MUUSIKATOAN;Mn;0;NSM;;;;;N;;;;; 17CA;KHMER SIGN TRIISAP;Mn;0;NSM;;;;;N;;;;; 17CB;KHMER SIGN BANTOC;Mn;0;NSM;;;;;N;;;;; 17CC;KHMER SIGN ROBAT;Mn;0;NSM;;;;;N;;;;; 17CD;KHMER SIGN TOANDAKHIAT;Mn;0;NSM;;;;;N;;;;; 17CE;KHMER SIGN KAKABAT;Mn;0;NSM;;;;;N;;;;; 17CF;KHMER SIGN AHSDA;Mn;0;NSM;;;;;N;;;;; 17D0;KHMER SIGN SAMYOK SANNYA;Mn;0;NSM;;;;;N;;;;; 17D1;KHMER SIGN VIRIAM;Mn;0;NSM;;;;;N;;;;; 17D2;KHMER SIGN COENG;Mn;9;NSM;;;;;N;;;;; 17D3;KHMER SIGN BATHAMASAT;Mn;0;NSM;;;;;N;;;;; 17D4;KHMER SIGN KHAN;Po;0;L;;;;;N;;;;; 17D5;KHMER SIGN BARIYOOSAN;Po;0;L;;;;;N;;;;; 17D6;KHMER SIGN CAMNUC PII KUUH;Po;0;L;;;;;N;;;;; 17D7;KHMER SIGN LEK TOO;Po;0;L;;;;;N;;;;; 17D8;KHMER SIGN BEYYAL;Po;0;L;;;;;N;;;;; 17D9;KHMER SIGN PHNAEK MUAN;Po;0;L;;;;;N;;;;; 17DA;KHMER SIGN KOOMUUT;Po;0;L;;;;;N;;;;; 17DB;KHMER CURRENCY SYMBOL RIEL;Sc;0;ET;;;;;N;;;;; 17DC;KHMER SIGN AVAKRAHASANYA;Po;0;L;;;;;N;;;;; 17E0;KHMER DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;; 17E1;KHMER DIGIT ONE;Nd;0;L;;1;1;1;N;;;;; 17E2;KHMER DIGIT TWO;Nd;0;L;;2;2;2;N;;;;; 17E3;KHMER DIGIT THREE;Nd;0;L;;3;3;3;N;;;;; 17E4;KHMER DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;; 17E5;KHMER DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;; 17E6;KHMER DIGIT SIX;Nd;0;L;;6;6;6;N;;;;; 17E7;KHMER DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;; 17E8;KHMER DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;; 17E9;KHMER DIGIT NINE;Nd;0;L;;9;9;9;N;;;;; 1800;MONGOLIAN BIRGA;Po;0;ON;;;;;N;;;;; 1801;MONGOLIAN ELLIPSIS;Po;0;ON;;;;;N;;;;; 1802;MONGOLIAN COMMA;Po;0;ON;;;;;N;;;;; 1803;MONGOLIAN FULL STOP;Po;0;ON;;;;;N;;;;; 1804;MONGOLIAN COLON;Po;0;ON;;;;;N;;;;; 1805;MONGOLIAN FOUR DOTS;Po;0;ON;;;;;N;;;;; 1806;MONGOLIAN TODO SOFT HYPHEN;Pd;0;ON;;;;;N;;;;; 1807;MONGOLIAN SIBE SYLLABLE BOUNDARY MARKER;Po;0;ON;;;;;N;;;;; 1808;MONGOLIAN MANCHU COMMA;Po;0;ON;;;;;N;;;;; 1809;MONGOLIAN MANCHU FULL STOP;Po;0;ON;;;;;N;;;;; 180A;MONGOLIAN NIRUGU;Po;0;ON;;;;;N;;;;; 180B;MONGOLIAN FREE VARIATION SELECTOR ONE;Cf;0;BN;;;;;N;;;;; 180C;MONGOLIAN FREE VARIATION SELECTOR TWO;Cf;0;BN;;;;;N;;;;; 180D;MONGOLIAN FREE VARIATION SELECTOR THREE;Cf;0;BN;;;;;N;;;;; 180E;MONGOLIAN VOWEL SEPARATOR;Cf;0;BN;;;;;N;;;;; 1810;MONGOLIAN DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;; 1811;MONGOLIAN DIGIT ONE;Nd;0;L;;1;1;1;N;;;;; 1812;MONGOLIAN DIGIT TWO;Nd;0;L;;2;2;2;N;;;;; 1813;MONGOLIAN DIGIT THREE;Nd;0;L;;3;3;3;N;;;;; 1814;MONGOLIAN DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;; 1815;MONGOLIAN DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;; 1816;MONGOLIAN DIGIT SIX;Nd;0;L;;6;6;6;N;;;;; 1817;MONGOLIAN DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;; 1818;MONGOLIAN DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;; 1819;MONGOLIAN DIGIT NINE;Nd;0;L;;9;9;9;N;;;;; 1820;MONGOLIAN LETTER A;Lo;0;L;;;;;N;;;;; 1821;MONGOLIAN LETTER E;Lo;0;L;;;;;N;;;;; 1822;MONGOLIAN LETTER I;Lo;0;L;;;;;N;;;;; 1823;MONGOLIAN LETTER O;Lo;0;L;;;;;N;;;;; 1824;MONGOLIAN LETTER U;Lo;0;L;;;;;N;;;;; 1825;MONGOLIAN LETTER OE;Lo;0;L;;;;;N;;;;; 1826;MONGOLIAN LETTER UE;Lo;0;L;;;;;N;;;;; 1827;MONGOLIAN LETTER EE;Lo;0;L;;;;;N;;;;; 1828;MONGOLIAN LETTER NA;Lo;0;L;;;;;N;;;;; 1829;MONGOLIAN LETTER ANG;Lo;0;L;;;;;N;;;;; 182A;MONGOLIAN LETTER BA;Lo;0;L;;;;;N;;;;; 182B;MONGOLIAN LETTER PA;Lo;0;L;;;;;N;;;;; 182C;MONGOLIAN LETTER QA;Lo;0;L;;;;;N;;;;; 182D;MONGOLIAN LETTER GA;Lo;0;L;;;;;N;;;;; 182E;MONGOLIAN LETTER MA;Lo;0;L;;;;;N;;;;; 182F;MONGOLIAN LETTER LA;Lo;0;L;;;;;N;;;;; 1830;MONGOLIAN LETTER SA;Lo;0;L;;;;;N;;;;; 1831;MONGOLIAN LETTER SHA;Lo;0;L;;;;;N;;;;; 1832;MONGOLIAN LETTER TA;Lo;0;L;;;;;N;;;;; 1833;MONGOLIAN LETTER DA;Lo;0;L;;;;;N;;;;; 1834;MONGOLIAN LETTER CHA;Lo;0;L;;;;;N;;;;; 1835;MONGOLIAN LETTER JA;Lo;0;L;;;;;N;;;;; 1836;MONGOLIAN LETTER YA;Lo;0;L;;;;;N;;;;; 1837;MONGOLIAN LETTER RA;Lo;0;L;;;;;N;;;;; 1838;MONGOLIAN LETTER WA;Lo;0;L;;;;;N;;;;; 1839;MONGOLIAN LETTER FA;Lo;0;L;;;;;N;;;;; 183A;MONGOLIAN LETTER KA;Lo;0;L;;;;;N;;;;; 183B;MONGOLIAN LETTER KHA;Lo;0;L;;;;;N;;;;; 183C;MONGOLIAN LETTER TSA;Lo;0;L;;;;;N;;;;; 183D;MONGOLIAN LETTER ZA;Lo;0;L;;;;;N;;;;; 183E;MONGOLIAN LETTER HAA;Lo;0;L;;;;;N;;;;; 183F;MONGOLIAN LETTER ZRA;Lo;0;L;;;;;N;;;;; 1840;MONGOLIAN LETTER LHA;Lo;0;L;;;;;N;;;;; 1841;MONGOLIAN LETTER ZHI;Lo;0;L;;;;;N;;;;; 1842;MONGOLIAN LETTER CHI;Lo;0;L;;;;;N;;;;; 1843;MONGOLIAN LETTER TODO LONG VOWEL SIGN;Lm;0;L;;;;;N;;;;; 1844;MONGOLIAN LETTER TODO E;Lo;0;L;;;;;N;;;;; 1845;MONGOLIAN LETTER TODO I;Lo;0;L;;;;;N;;;;; 1846;MONGOLIAN LETTER TODO O;Lo;0;L;;;;;N;;;;; 1847;MONGOLIAN LETTER TODO U;Lo;0;L;;;;;N;;;;; 1848;MONGOLIAN LETTER TODO OE;Lo;0;L;;;;;N;;;;; 1849;MONGOLIAN LETTER TODO UE;Lo;0;L;;;;;N;;;;; 184A;MONGOLIAN LETTER TODO ANG;Lo;0;L;;;;;N;;;;; 184B;MONGOLIAN LETTER TODO BA;Lo;0;L;;;;;N;;;;; 184C;MONGOLIAN LETTER TODO PA;Lo;0;L;;;;;N;;;;; 184D;MONGOLIAN LETTER TODO QA;Lo;0;L;;;;;N;;;;; 184E;MONGOLIAN LETTER TODO GA;Lo;0;L;;;;;N;;;;; 184F;MONGOLIAN LETTER TODO MA;Lo;0;L;;;;;N;;;;; 1850;MONGOLIAN LETTER TODO TA;Lo;0;L;;;;;N;;;;; 1851;MONGOLIAN LETTER TODO DA;Lo;0;L;;;;;N;;;;; 1852;MONGOLIAN LETTER TODO CHA;Lo;0;L;;;;;N;;;;; 1853;MONGOLIAN LETTER TODO JA;Lo;0;L;;;;;N;;;;; 1854;MONGOLIAN LETTER TODO TSA;Lo;0;L;;;;;N;;;;; 1855;MONGOLIAN LETTER TODO YA;Lo;0;L;;;;;N;;;;; 1856;MONGOLIAN LETTER TODO WA;Lo;0;L;;;;;N;;;;; 1857;MONGOLIAN LETTER TODO KA;Lo;0;L;;;;;N;;;;; 1858;MONGOLIAN LETTER TODO GAA;Lo;0;L;;;;;N;;;;; 1859;MONGOLIAN LETTER TODO HAA;Lo;0;L;;;;;N;;;;; 185A;MONGOLIAN LETTER TODO JIA;Lo;0;L;;;;;N;;;;; 185B;MONGOLIAN LETTER TODO NIA;Lo;0;L;;;;;N;;;;; 185C;MONGOLIAN LETTER TODO DZA;Lo;0;L;;;;;N;;;;; 185D;MONGOLIAN LETTER SIBE E;Lo;0;L;;;;;N;;;;; 185E;MONGOLIAN LETTER SIBE I;Lo;0;L;;;;;N;;;;; 185F;MONGOLIAN LETTER SIBE IY;Lo;0;L;;;;;N;;;;; 1860;MONGOLIAN LETTER SIBE UE;Lo;0;L;;;;;N;;;;; 1861;MONGOLIAN LETTER SIBE U;Lo;0;L;;;;;N;;;;; 1862;MONGOLIAN LETTER SIBE ANG;Lo;0;L;;;;;N;;;;; 1863;MONGOLIAN LETTER SIBE KA;Lo;0;L;;;;;N;;;;; 1864;MONGOLIAN LETTER SIBE GA;Lo;0;L;;;;;N;;;;; 1865;MONGOLIAN LETTER SIBE HA;Lo;0;L;;;;;N;;;;; 1866;MONGOLIAN LETTER SIBE PA;Lo;0;L;;;;;N;;;;; 1867;MONGOLIAN LETTER SIBE SHA;Lo;0;L;;;;;N;;;;; 1868;MONGOLIAN LETTER SIBE TA;Lo;0;L;;;;;N;;;;; 1869;MONGOLIAN LETTER SIBE DA;Lo;0;L;;;;;N;;;;; 186A;MONGOLIAN LETTER SIBE JA;Lo;0;L;;;;;N;;;;; 186B;MONGOLIAN LETTER SIBE FA;Lo;0;L;;;;;N;;;;; 186C;MONGOLIAN LETTER SIBE GAA;Lo;0;L;;;;;N;;;;; 186D;MONGOLIAN LETTER SIBE HAA;Lo;0;L;;;;;N;;;;; 186E;MONGOLIAN LETTER SIBE TSA;Lo;0;L;;;;;N;;;;; 186F;MONGOLIAN LETTER SIBE ZA;Lo;0;L;;;;;N;;;;; 1870;MONGOLIAN LETTER SIBE RAA;Lo;0;L;;;;;N;;;;; 1871;MONGOLIAN LETTER SIBE CHA;Lo;0;L;;;;;N;;;;; 1872;MONGOLIAN LETTER SIBE ZHA;Lo;0;L;;;;;N;;;;; 1873;MONGOLIAN LETTER MANCHU I;Lo;0;L;;;;;N;;;;; 1874;MONGOLIAN LETTER MANCHU KA;Lo;0;L;;;;;N;;;;; 1875;MONGOLIAN LETTER MANCHU RA;Lo;0;L;;;;;N;;;;; 1876;MONGOLIAN LETTER MANCHU FA;Lo;0;L;;;;;N;;;;; 1877;MONGOLIAN LETTER MANCHU ZHA;Lo;0;L;;;;;N;;;;; 1880;MONGOLIAN LETTER ALI GALI ANUSVARA ONE;Lo;0;L;;;;;N;;;;; 1881;MONGOLIAN LETTER ALI GALI VISARGA ONE;Lo;0;L;;;;;N;;;;; 1882;MONGOLIAN LETTER ALI GALI DAMARU;Lo;0;L;;;;;N;;;;; 1883;MONGOLIAN LETTER ALI GALI UBADAMA;Lo;0;L;;;;;N;;;;; 1884;MONGOLIAN LETTER ALI GALI INVERTED UBADAMA;Lo;0;L;;;;;N;;;;; 1885;MONGOLIAN LETTER ALI GALI BALUDA;Lo;0;L;;;;;N;;;;; 1886;MONGOLIAN LETTER ALI GALI THREE BALUDA;Lo;0;L;;;;;N;;;;; 1887;MONGOLIAN LETTER ALI GALI A;Lo;0;L;;;;;N;;;;; 1888;MONGOLIAN LETTER ALI GALI I;Lo;0;L;;;;;N;;;;; 1889;MONGOLIAN LETTER ALI GALI KA;Lo;0;L;;;;;N;;;;; 188A;MONGOLIAN LETTER ALI GALI NGA;Lo;0;L;;;;;N;;;;; 188B;MONGOLIAN LETTER ALI GALI CA;Lo;0;L;;;;;N;;;;; 188C;MONGOLIAN LETTER ALI GALI TTA;Lo;0;L;;;;;N;;;;; 188D;MONGOLIAN LETTER ALI GALI TTHA;Lo;0;L;;;;;N;;;;; 188E;MONGOLIAN LETTER ALI GALI DDA;Lo;0;L;;;;;N;;;;; 188F;MONGOLIAN LETTER ALI GALI NNA;Lo;0;L;;;;;N;;;;; 1890;MONGOLIAN LETTER ALI GALI TA;Lo;0;L;;;;;N;;;;; 1891;MONGOLIAN LETTER ALI GALI DA;Lo;0;L;;;;;N;;;;; 1892;MONGOLIAN LETTER ALI GALI PA;Lo;0;L;;;;;N;;;;; 1893;MONGOLIAN LETTER ALI GALI PHA;Lo;0;L;;;;;N;;;;; 1894;MONGOLIAN LETTER ALI GALI SSA;Lo;0;L;;;;;N;;;;; 1895;MONGOLIAN LETTER ALI GALI ZHA;Lo;0;L;;;;;N;;;;; 1896;MONGOLIAN LETTER ALI GALI ZA;Lo;0;L;;;;;N;;;;; 1897;MONGOLIAN LETTER ALI GALI AH;Lo;0;L;;;;;N;;;;; 1898;MONGOLIAN LETTER TODO ALI GALI TA;Lo;0;L;;;;;N;;;;; 1899;MONGOLIAN LETTER TODO ALI GALI ZHA;Lo;0;L;;;;;N;;;;; 189A;MONGOLIAN LETTER MANCHU ALI GALI GHA;Lo;0;L;;;;;N;;;;; 189B;MONGOLIAN LETTER MANCHU ALI GALI NGA;Lo;0;L;;;;;N;;;;; 189C;MONGOLIAN LETTER MANCHU ALI GALI CA;Lo;0;L;;;;;N;;;;; 189D;MONGOLIAN LETTER MANCHU ALI GALI JHA;Lo;0;L;;;;;N;;;;; 189E;MONGOLIAN LETTER MANCHU ALI GALI TTA;Lo;0;L;;;;;N;;;;; 189F;MONGOLIAN LETTER MANCHU ALI GALI DDHA;Lo;0;L;;;;;N;;;;; 18A0;MONGOLIAN LETTER MANCHU ALI GALI TA;Lo;0;L;;;;;N;;;;; 18A1;MONGOLIAN LETTER MANCHU ALI GALI DHA;Lo;0;L;;;;;N;;;;; 18A2;MONGOLIAN LETTER MANCHU ALI GALI SSA;Lo;0;L;;;;;N;;;;; 18A3;MONGOLIAN LETTER MANCHU ALI GALI CYA;Lo;0;L;;;;;N;;;;; 18A4;MONGOLIAN LETTER MANCHU ALI GALI ZHA;Lo;0;L;;;;;N;;;;; 18A5;MONGOLIAN LETTER MANCHU ALI GALI ZA;Lo;0;L;;;;;N;;;;; 18A6;MONGOLIAN LETTER ALI GALI HALF U;Lo;0;L;;;;;N;;;;; 18A7;MONGOLIAN LETTER ALI GALI HALF YA;Lo;0;L;;;;;N;;;;; 18A8;MONGOLIAN LETTER MANCHU ALI GALI BHA;Lo;0;L;;;;;N;;;;; 18A9;MONGOLIAN LETTER ALI GALI DAGALGA;Mn;228;NSM;;;;;N;;;;; 1E00;LATIN CAPITAL LETTER A WITH RING BELOW;Lu;0;L;0041 0325;;;;N;;;;1E01; 1E01;LATIN SMALL LETTER A WITH RING BELOW;Ll;0;L;0061 0325;;;;N;;;1E00;;1E00 1E02;LATIN CAPITAL LETTER B WITH DOT ABOVE;Lu;0;L;0042 0307;;;;N;;;;1E03; 1E03;LATIN SMALL LETTER B WITH DOT ABOVE;Ll;0;L;0062 0307;;;;N;;;1E02;;1E02 1E04;LATIN CAPITAL LETTER B WITH DOT BELOW;Lu;0;L;0042 0323;;;;N;;;;1E05; 1E05;LATIN SMALL LETTER B WITH DOT BELOW;Ll;0;L;0062 0323;;;;N;;;1E04;;1E04 1E06;LATIN CAPITAL LETTER B WITH LINE BELOW;Lu;0;L;0042 0331;;;;N;;;;1E07; 1E07;LATIN SMALL LETTER B WITH LINE BELOW;Ll;0;L;0062 0331;;;;N;;;1E06;;1E06 1E08;LATIN CAPITAL LETTER C WITH CEDILLA AND ACUTE;Lu;0;L;00C7 0301;;;;N;;;;1E09; 1E09;LATIN SMALL LETTER C WITH CEDILLA AND ACUTE;Ll;0;L;00E7 0301;;;;N;;;1E08;;1E08 1E0A;LATIN CAPITAL LETTER D WITH DOT ABOVE;Lu;0;L;0044 0307;;;;N;;;;1E0B; 1E0B;LATIN SMALL LETTER D WITH DOT ABOVE;Ll;0;L;0064 0307;;;;N;;;1E0A;;1E0A 1E0C;LATIN CAPITAL LETTER D WITH DOT BELOW;Lu;0;L;0044 0323;;;;N;;;;1E0D; 1E0D;LATIN SMALL LETTER D WITH DOT BELOW;Ll;0;L;0064 0323;;;;N;;;1E0C;;1E0C 1E0E;LATIN CAPITAL LETTER D WITH LINE BELOW;Lu;0;L;0044 0331;;;;N;;;;1E0F; 1E0F;LATIN SMALL LETTER D WITH LINE BELOW;Ll;0;L;0064 0331;;;;N;;;1E0E;;1E0E 1E10;LATIN CAPITAL LETTER D WITH CEDILLA;Lu;0;L;0044 0327;;;;N;;;;1E11; 1E11;LATIN SMALL LETTER D WITH CEDILLA;Ll;0;L;0064 0327;;;;N;;;1E10;;1E10 1E12;LATIN CAPITAL LETTER D WITH CIRCUMFLEX BELOW;Lu;0;L;0044 032D;;;;N;;;;1E13; 1E13;LATIN SMALL LETTER D WITH CIRCUMFLEX BELOW;Ll;0;L;0064 032D;;;;N;;;1E12;;1E12 1E14;LATIN CAPITAL LETTER E WITH MACRON AND GRAVE;Lu;0;L;0112 0300;;;;N;;;;1E15; 1E15;LATIN SMALL LETTER E WITH MACRON AND GRAVE;Ll;0;L;0113 0300;;;;N;;;1E14;;1E14 1E16;LATIN CAPITAL LETTER E WITH MACRON AND ACUTE;Lu;0;L;0112 0301;;;;N;;;;1E17; 1E17;LATIN SMALL LETTER E WITH MACRON AND ACUTE;Ll;0;L;0113 0301;;;;N;;;1E16;;1E16 1E18;LATIN CAPITAL LETTER E WITH CIRCUMFLEX BELOW;Lu;0;L;0045 032D;;;;N;;;;1E19; 1E19;LATIN SMALL LETTER E WITH CIRCUMFLEX BELOW;Ll;0;L;0065 032D;;;;N;;;1E18;;1E18 1E1A;LATIN CAPITAL LETTER E WITH TILDE BELOW;Lu;0;L;0045 0330;;;;N;;;;1E1B; 1E1B;LATIN SMALL LETTER E WITH TILDE BELOW;Ll;0;L;0065 0330;;;;N;;;1E1A;;1E1A 1E1C;LATIN CAPITAL LETTER E WITH CEDILLA AND BREVE;Lu;0;L;0228 0306;;;;N;;;;1E1D; 1E1D;LATIN SMALL LETTER E WITH CEDILLA AND BREVE;Ll;0;L;0229 0306;;;;N;;;1E1C;;1E1C 1E1E;LATIN CAPITAL LETTER F WITH DOT ABOVE;Lu;0;L;0046 0307;;;;N;;;;1E1F; 1E1F;LATIN SMALL LETTER F WITH DOT ABOVE;Ll;0;L;0066 0307;;;;N;;;1E1E;;1E1E 1E20;LATIN CAPITAL LETTER G WITH MACRON;Lu;0;L;0047 0304;;;;N;;;;1E21; 1E21;LATIN SMALL LETTER G WITH MACRON;Ll;0;L;0067 0304;;;;N;;;1E20;;1E20 1E22;LATIN CAPITAL LETTER H WITH DOT ABOVE;Lu;0;L;0048 0307;;;;N;;;;1E23; 1E23;LATIN SMALL LETTER H WITH DOT ABOVE;Ll;0;L;0068 0307;;;;N;;;1E22;;1E22 1E24;LATIN CAPITAL LETTER H WITH DOT BELOW;Lu;0;L;0048 0323;;;;N;;;;1E25; 1E25;LATIN SMALL LETTER H WITH DOT BELOW;Ll;0;L;0068 0323;;;;N;;;1E24;;1E24 1E26;LATIN CAPITAL LETTER H WITH DIAERESIS;Lu;0;L;0048 0308;;;;N;;;;1E27; 1E27;LATIN SMALL LETTER H WITH DIAERESIS;Ll;0;L;0068 0308;;;;N;;;1E26;;1E26 1E28;LATIN CAPITAL LETTER H WITH CEDILLA;Lu;0;L;0048 0327;;;;N;;;;1E29; 1E29;LATIN SMALL LETTER H WITH CEDILLA;Ll;0;L;0068 0327;;;;N;;;1E28;;1E28 1E2A;LATIN CAPITAL LETTER H WITH BREVE BELOW;Lu;0;L;0048 032E;;;;N;;;;1E2B; 1E2B;LATIN SMALL LETTER H WITH BREVE BELOW;Ll;0;L;0068 032E;;;;N;;;1E2A;;1E2A 1E2C;LATIN CAPITAL LETTER I WITH TILDE BELOW;Lu;0;L;0049 0330;;;;N;;;;1E2D; 1E2D;LATIN SMALL LETTER I WITH TILDE BELOW;Ll;0;L;0069 0330;;;;N;;;1E2C;;1E2C 1E2E;LATIN CAPITAL LETTER I WITH DIAERESIS AND ACUTE;Lu;0;L;00CF 0301;;;;N;;;;1E2F; 1E2F;LATIN SMALL LETTER I WITH DIAERESIS AND ACUTE;Ll;0;L;00EF 0301;;;;N;;;1E2E;;1E2E 1E30;LATIN CAPITAL LETTER K WITH ACUTE;Lu;0;L;004B 0301;;;;N;;;;1E31; 1E31;LATIN SMALL LETTER K WITH ACUTE;Ll;0;L;006B 0301;;;;N;;;1E30;;1E30 1E32;LATIN CAPITAL LETTER K WITH DOT BELOW;Lu;0;L;004B 0323;;;;N;;;;1E33; 1E33;LATIN SMALL LETTER K WITH DOT BELOW;Ll;0;L;006B 0323;;;;N;;;1E32;;1E32 1E34;LATIN CAPITAL LETTER K WITH LINE BELOW;Lu;0;L;004B 0331;;;;N;;;;1E35; 1E35;LATIN SMALL LETTER K WITH LINE BELOW;Ll;0;L;006B 0331;;;;N;;;1E34;;1E34 1E36;LATIN CAPITAL LETTER L WITH DOT BELOW;Lu;0;L;004C 0323;;;;N;;;;1E37; 1E37;LATIN SMALL LETTER L WITH DOT BELOW;Ll;0;L;006C 0323;;;;N;;;1E36;;1E36 1E38;LATIN CAPITAL LETTER L WITH DOT BELOW AND MACRON;Lu;0;L;1E36 0304;;;;N;;;;1E39; 1E39;LATIN SMALL LETTER L WITH DOT BELOW AND MACRON;Ll;0;L;1E37 0304;;;;N;;;1E38;;1E38 1E3A;LATIN CAPITAL LETTER L WITH LINE BELOW;Lu;0;L;004C 0331;;;;N;;;;1E3B; 1E3B;LATIN SMALL LETTER L WITH LINE BELOW;Ll;0;L;006C 0331;;;;N;;;1E3A;;1E3A 1E3C;LATIN CAPITAL LETTER L WITH CIRCUMFLEX BELOW;Lu;0;L;004C 032D;;;;N;;;;1E3D; 1E3D;LATIN SMALL LETTER L WITH CIRCUMFLEX BELOW;Ll;0;L;006C 032D;;;;N;;;1E3C;;1E3C 1E3E;LATIN CAPITAL LETTER M WITH ACUTE;Lu;0;L;004D 0301;;;;N;;;;1E3F; 1E3F;LATIN SMALL LETTER M WITH ACUTE;Ll;0;L;006D 0301;;;;N;;;1E3E;;1E3E 1E40;LATIN CAPITAL LETTER M WITH DOT ABOVE;Lu;0;L;004D 0307;;;;N;;;;1E41; 1E41;LATIN SMALL LETTER M WITH DOT ABOVE;Ll;0;L;006D 0307;;;;N;;;1E40;;1E40 1E42;LATIN CAPITAL LETTER M WITH DOT BELOW;Lu;0;L;004D 0323;;;;N;;;;1E43; 1E43;LATIN SMALL LETTER M WITH DOT BELOW;Ll;0;L;006D 0323;;;;N;;;1E42;;1E42 1E44;LATIN CAPITAL LETTER N WITH DOT ABOVE;Lu;0;L;004E 0307;;;;N;;;;1E45; 1E45;LATIN SMALL LETTER N WITH DOT ABOVE;Ll;0;L;006E 0307;;;;N;;;1E44;;1E44 1E46;LATIN CAPITAL LETTER N WITH DOT BELOW;Lu;0;L;004E 0323;;;;N;;;;1E47; 1E47;LATIN SMALL LETTER N WITH DOT BELOW;Ll;0;L;006E 0323;;;;N;;;1E46;;1E46 1E48;LATIN CAPITAL LETTER N WITH LINE BELOW;Lu;0;L;004E 0331;;;;N;;;;1E49; 1E49;LATIN SMALL LETTER N WITH LINE BELOW;Ll;0;L;006E 0331;;;;N;;;1E48;;1E48 1E4A;LATIN CAPITAL LETTER N WITH CIRCUMFLEX BELOW;Lu;0;L;004E 032D;;;;N;;;;1E4B; 1E4B;LATIN SMALL LETTER N WITH CIRCUMFLEX BELOW;Ll;0;L;006E 032D;;;;N;;;1E4A;;1E4A 1E4C;LATIN CAPITAL LETTER O WITH TILDE AND ACUTE;Lu;0;L;00D5 0301;;;;N;;;;1E4D; 1E4D;LATIN SMALL LETTER O WITH TILDE AND ACUTE;Ll;0;L;00F5 0301;;;;N;;;1E4C;;1E4C 1E4E;LATIN CAPITAL LETTER O WITH TILDE AND DIAERESIS;Lu;0;L;00D5 0308;;;;N;;;;1E4F; 1E4F;LATIN SMALL LETTER O WITH TILDE AND DIAERESIS;Ll;0;L;00F5 0308;;;;N;;;1E4E;;1E4E 1E50;LATIN CAPITAL LETTER O WITH MACRON AND GRAVE;Lu;0;L;014C 0300;;;;N;;;;1E51; 1E51;LATIN SMALL LETTER O WITH MACRON AND GRAVE;Ll;0;L;014D 0300;;;;N;;;1E50;;1E50 1E52;LATIN CAPITAL LETTER O WITH MACRON AND ACUTE;Lu;0;L;014C 0301;;;;N;;;;1E53; 1E53;LATIN SMALL LETTER O WITH MACRON AND ACUTE;Ll;0;L;014D 0301;;;;N;;;1E52;;1E52 1E54;LATIN CAPITAL LETTER P WITH ACUTE;Lu;0;L;0050 0301;;;;N;;;;1E55; 1E55;LATIN SMALL LETTER P WITH ACUTE;Ll;0;L;0070 0301;;;;N;;;1E54;;1E54 1E56;LATIN CAPITAL LETTER P WITH DOT ABOVE;Lu;0;L;0050 0307;;;;N;;;;1E57; 1E57;LATIN SMALL LETTER P WITH DOT ABOVE;Ll;0;L;0070 0307;;;;N;;;1E56;;1E56 1E58;LATIN CAPITAL LETTER R WITH DOT ABOVE;Lu;0;L;0052 0307;;;;N;;;;1E59; 1E59;LATIN SMALL LETTER R WITH DOT ABOVE;Ll;0;L;0072 0307;;;;N;;;1E58;;1E58 1E5A;LATIN CAPITAL LETTER R WITH DOT BELOW;Lu;0;L;0052 0323;;;;N;;;;1E5B; 1E5B;LATIN SMALL LETTER R WITH DOT BELOW;Ll;0;L;0072 0323;;;;N;;;1E5A;;1E5A 1E5C;LATIN CAPITAL LETTER R WITH DOT BELOW AND MACRON;Lu;0;L;1E5A 0304;;;;N;;;;1E5D; 1E5D;LATIN SMALL LETTER R WITH DOT BELOW AND MACRON;Ll;0;L;1E5B 0304;;;;N;;;1E5C;;1E5C 1E5E;LATIN CAPITAL LETTER R WITH LINE BELOW;Lu;0;L;0052 0331;;;;N;;;;1E5F; 1E5F;LATIN SMALL LETTER R WITH LINE BELOW;Ll;0;L;0072 0331;;;;N;;;1E5E;;1E5E 1E60;LATIN CAPITAL LETTER S WITH DOT ABOVE;Lu;0;L;0053 0307;;;;N;;;;1E61; 1E61;LATIN SMALL LETTER S WITH DOT ABOVE;Ll;0;L;0073 0307;;;;N;;;1E60;;1E60 1E62;LATIN CAPITAL LETTER S WITH DOT BELOW;Lu;0;L;0053 0323;;;;N;;;;1E63; 1E63;LATIN SMALL LETTER S WITH DOT BELOW;Ll;0;L;0073 0323;;;;N;;;1E62;;1E62 1E64;LATIN CAPITAL LETTER S WITH ACUTE AND DOT ABOVE;Lu;0;L;015A 0307;;;;N;;;;1E65; 1E65;LATIN SMALL LETTER S WITH ACUTE AND DOT ABOVE;Ll;0;L;015B 0307;;;;N;;;1E64;;1E64 1E66;LATIN CAPITAL LETTER S WITH CARON AND DOT ABOVE;Lu;0;L;0160 0307;;;;N;;;;1E67; 1E67;LATIN SMALL LETTER S WITH CARON AND DOT ABOVE;Ll;0;L;0161 0307;;;;N;;;1E66;;1E66 1E68;LATIN CAPITAL LETTER S WITH DOT BELOW AND DOT ABOVE;Lu;0;L;1E62 0307;;;;N;;;;1E69; 1E69;LATIN SMALL LETTER S WITH DOT BELOW AND DOT ABOVE;Ll;0;L;1E63 0307;;;;N;;;1E68;;1E68 1E6A;LATIN CAPITAL LETTER T WITH DOT ABOVE;Lu;0;L;0054 0307;;;;N;;;;1E6B; 1E6B;LATIN SMALL LETTER T WITH DOT ABOVE;Ll;0;L;0074 0307;;;;N;;;1E6A;;1E6A 1E6C;LATIN CAPITAL LETTER T WITH DOT BELOW;Lu;0;L;0054 0323;;;;N;;;;1E6D; 1E6D;LATIN SMALL LETTER T WITH DOT BELOW;Ll;0;L;0074 0323;;;;N;;;1E6C;;1E6C 1E6E;LATIN CAPITAL LETTER T WITH LINE BELOW;Lu;0;L;0054 0331;;;;N;;;;1E6F; 1E6F;LATIN SMALL LETTER T WITH LINE BELOW;Ll;0;L;0074 0331;;;;N;;;1E6E;;1E6E 1E70;LATIN CAPITAL LETTER T WITH CIRCUMFLEX BELOW;Lu;0;L;0054 032D;;;;N;;;;1E71; 1E71;LATIN SMALL LETTER T WITH CIRCUMFLEX BELOW;Ll;0;L;0074 032D;;;;N;;;1E70;;1E70 1E72;LATIN CAPITAL LETTER U WITH DIAERESIS BELOW;Lu;0;L;0055 0324;;;;N;;;;1E73; 1E73;LATIN SMALL LETTER U WITH DIAERESIS BELOW;Ll;0;L;0075 0324;;;;N;;;1E72;;1E72 1E74;LATIN CAPITAL LETTER U WITH TILDE BELOW;Lu;0;L;0055 0330;;;;N;;;;1E75; 1E75;LATIN SMALL LETTER U WITH TILDE BELOW;Ll;0;L;0075 0330;;;;N;;;1E74;;1E74 1E76;LATIN CAPITAL LETTER U WITH CIRCUMFLEX BELOW;Lu;0;L;0055 032D;;;;N;;;;1E77; 1E77;LATIN SMALL LETTER U WITH CIRCUMFLEX BELOW;Ll;0;L;0075 032D;;;;N;;;1E76;;1E76 1E78;LATIN CAPITAL LETTER U WITH TILDE AND ACUTE;Lu;0;L;0168 0301;;;;N;;;;1E79; 1E79;LATIN SMALL LETTER U WITH TILDE AND ACUTE;Ll;0;L;0169 0301;;;;N;;;1E78;;1E78 1E7A;LATIN CAPITAL LETTER U WITH MACRON AND DIAERESIS;Lu;0;L;016A 0308;;;;N;;;;1E7B; 1E7B;LATIN SMALL LETTER U WITH MACRON AND DIAERESIS;Ll;0;L;016B 0308;;;;N;;;1E7A;;1E7A 1E7C;LATIN CAPITAL LETTER V WITH TILDE;Lu;0;L;0056 0303;;;;N;;;;1E7D; 1E7D;LATIN SMALL LETTER V WITH TILDE;Ll;0;L;0076 0303;;;;N;;;1E7C;;1E7C 1E7E;LATIN CAPITAL LETTER V WITH DOT BELOW;Lu;0;L;0056 0323;;;;N;;;;1E7F; 1E7F;LATIN SMALL LETTER V WITH DOT BELOW;Ll;0;L;0076 0323;;;;N;;;1E7E;;1E7E 1E80;LATIN CAPITAL LETTER W WITH GRAVE;Lu;0;L;0057 0300;;;;N;;;;1E81; 1E81;LATIN SMALL LETTER W WITH GRAVE;Ll;0;L;0077 0300;;;;N;;;1E80;;1E80 1E82;LATIN CAPITAL LETTER W WITH ACUTE;Lu;0;L;0057 0301;;;;N;;;;1E83; 1E83;LATIN SMALL LETTER W WITH ACUTE;Ll;0;L;0077 0301;;;;N;;;1E82;;1E82 1E84;LATIN CAPITAL LETTER W WITH DIAERESIS;Lu;0;L;0057 0308;;;;N;;;;1E85; 1E85;LATIN SMALL LETTER W WITH DIAERESIS;Ll;0;L;0077 0308;;;;N;;;1E84;;1E84 1E86;LATIN CAPITAL LETTER W WITH DOT ABOVE;Lu;0;L;0057 0307;;;;N;;;;1E87; 1E87;LATIN SMALL LETTER W WITH DOT ABOVE;Ll;0;L;0077 0307;;;;N;;;1E86;;1E86 1E88;LATIN CAPITAL LETTER W WITH DOT BELOW;Lu;0;L;0057 0323;;;;N;;;;1E89; 1E89;LATIN SMALL LETTER W WITH DOT BELOW;Ll;0;L;0077 0323;;;;N;;;1E88;;1E88 1E8A;LATIN CAPITAL LETTER X WITH DOT ABOVE;Lu;0;L;0058 0307;;;;N;;;;1E8B; 1E8B;LATIN SMALL LETTER X WITH DOT ABOVE;Ll;0;L;0078 0307;;;;N;;;1E8A;;1E8A 1E8C;LATIN CAPITAL LETTER X WITH DIAERESIS;Lu;0;L;0058 0308;;;;N;;;;1E8D; 1E8D;LATIN SMALL LETTER X WITH DIAERESIS;Ll;0;L;0078 0308;;;;N;;;1E8C;;1E8C 1E8E;LATIN CAPITAL LETTER Y WITH DOT ABOVE;Lu;0;L;0059 0307;;;;N;;;;1E8F; 1E8F;LATIN SMALL LETTER Y WITH DOT ABOVE;Ll;0;L;0079 0307;;;;N;;;1E8E;;1E8E 1E90;LATIN CAPITAL LETTER Z WITH CIRCUMFLEX;Lu;0;L;005A 0302;;;;N;;;;1E91; 1E91;LATIN SMALL LETTER Z WITH CIRCUMFLEX;Ll;0;L;007A 0302;;;;N;;;1E90;;1E90 1E92;LATIN CAPITAL LETTER Z WITH DOT BELOW;Lu;0;L;005A 0323;;;;N;;;;1E93; 1E93;LATIN SMALL LETTER Z WITH DOT BELOW;Ll;0;L;007A 0323;;;;N;;;1E92;;1E92 1E94;LATIN CAPITAL LETTER Z WITH LINE BELOW;Lu;0;L;005A 0331;;;;N;;;;1E95; 1E95;LATIN SMALL LETTER Z WITH LINE BELOW;Ll;0;L;007A 0331;;;;N;;;1E94;;1E94 1E96;LATIN SMALL LETTER H WITH LINE BELOW;Ll;0;L;0068 0331;;;;N;;;;; 1E97;LATIN SMALL LETTER T WITH DIAERESIS;Ll;0;L;0074 0308;;;;N;;;;; 1E98;LATIN SMALL LETTER W WITH RING ABOVE;Ll;0;L;0077 030A;;;;N;;;;; 1E99;LATIN SMALL LETTER Y WITH RING ABOVE;Ll;0;L;0079 030A;;;;N;;;;; 1E9A;LATIN SMALL LETTER A WITH RIGHT HALF RING;Ll;0;L; 0061 02BE;;;;N;;;;; 1E9B;LATIN SMALL LETTER LONG S WITH DOT ABOVE;Ll;0;L;017F 0307;;;;N;;;1E60;;1E60 1EA0;LATIN CAPITAL LETTER A WITH DOT BELOW;Lu;0;L;0041 0323;;;;N;;;;1EA1; 1EA1;LATIN SMALL LETTER A WITH DOT BELOW;Ll;0;L;0061 0323;;;;N;;;1EA0;;1EA0 1EA2;LATIN CAPITAL LETTER A WITH HOOK ABOVE;Lu;0;L;0041 0309;;;;N;;;;1EA3; 1EA3;LATIN SMALL LETTER A WITH HOOK ABOVE;Ll;0;L;0061 0309;;;;N;;;1EA2;;1EA2 1EA4;LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND ACUTE;Lu;0;L;00C2 0301;;;;N;;;;1EA5; 1EA5;LATIN SMALL LETTER A WITH CIRCUMFLEX AND ACUTE;Ll;0;L;00E2 0301;;;;N;;;1EA4;;1EA4 1EA6;LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND GRAVE;Lu;0;L;00C2 0300;;;;N;;;;1EA7; 1EA7;LATIN SMALL LETTER A WITH CIRCUMFLEX AND GRAVE;Ll;0;L;00E2 0300;;;;N;;;1EA6;;1EA6 1EA8;LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE;Lu;0;L;00C2 0309;;;;N;;;;1EA9; 1EA9;LATIN SMALL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE;Ll;0;L;00E2 0309;;;;N;;;1EA8;;1EA8 1EAA;LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND TILDE;Lu;0;L;00C2 0303;;;;N;;;;1EAB; 1EAB;LATIN SMALL LETTER A WITH CIRCUMFLEX AND TILDE;Ll;0;L;00E2 0303;;;;N;;;1EAA;;1EAA 1EAC;LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND DOT BELOW;Lu;0;L;1EA0 0302;;;;N;;;;1EAD; 1EAD;LATIN SMALL LETTER A WITH CIRCUMFLEX AND DOT BELOW;Ll;0;L;1EA1 0302;;;;N;;;1EAC;;1EAC 1EAE;LATIN CAPITAL LETTER A WITH BREVE AND ACUTE;Lu;0;L;0102 0301;;;;N;;;;1EAF; 1EAF;LATIN SMALL LETTER A WITH BREVE AND ACUTE;Ll;0;L;0103 0301;;;;N;;;1EAE;;1EAE 1EB0;LATIN CAPITAL LETTER A WITH BREVE AND GRAVE;Lu;0;L;0102 0300;;;;N;;;;1EB1; 1EB1;LATIN SMALL LETTER A WITH BREVE AND GRAVE;Ll;0;L;0103 0300;;;;N;;;1EB0;;1EB0 1EB2;LATIN CAPITAL LETTER A WITH BREVE AND HOOK ABOVE;Lu;0;L;0102 0309;;;;N;;;;1EB3; 1EB3;LATIN SMALL LETTER A WITH BREVE AND HOOK ABOVE;Ll;0;L;0103 0309;;;;N;;;1EB2;;1EB2 1EB4;LATIN CAPITAL LETTER A WITH BREVE AND TILDE;Lu;0;L;0102 0303;;;;N;;;;1EB5; 1EB5;LATIN SMALL LETTER A WITH BREVE AND TILDE;Ll;0;L;0103 0303;;;;N;;;1EB4;;1EB4 1EB6;LATIN CAPITAL LETTER A WITH BREVE AND DOT BELOW;Lu;0;L;1EA0 0306;;;;N;;;;1EB7; 1EB7;LATIN SMALL LETTER A WITH BREVE AND DOT BELOW;Ll;0;L;1EA1 0306;;;;N;;;1EB6;;1EB6 1EB8;LATIN CAPITAL LETTER E WITH DOT BELOW;Lu;0;L;0045 0323;;;;N;;;;1EB9; 1EB9;LATIN SMALL LETTER E WITH DOT BELOW;Ll;0;L;0065 0323;;;;N;;;1EB8;;1EB8 1EBA;LATIN CAPITAL LETTER E WITH HOOK ABOVE;Lu;0;L;0045 0309;;;;N;;;;1EBB; 1EBB;LATIN SMALL LETTER E WITH HOOK ABOVE;Ll;0;L;0065 0309;;;;N;;;1EBA;;1EBA 1EBC;LATIN CAPITAL LETTER E WITH TILDE;Lu;0;L;0045 0303;;;;N;;;;1EBD; 1EBD;LATIN SMALL LETTER E WITH TILDE;Ll;0;L;0065 0303;;;;N;;;1EBC;;1EBC 1EBE;LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND ACUTE;Lu;0;L;00CA 0301;;;;N;;;;1EBF; 1EBF;LATIN SMALL LETTER E WITH CIRCUMFLEX AND ACUTE;Ll;0;L;00EA 0301;;;;N;;;1EBE;;1EBE 1EC0;LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND GRAVE;Lu;0;L;00CA 0300;;;;N;;;;1EC1; 1EC1;LATIN SMALL LETTER E WITH CIRCUMFLEX AND GRAVE;Ll;0;L;00EA 0300;;;;N;;;1EC0;;1EC0 1EC2;LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE;Lu;0;L;00CA 0309;;;;N;;;;1EC3; 1EC3;LATIN SMALL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE;Ll;0;L;00EA 0309;;;;N;;;1EC2;;1EC2 1EC4;LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND TILDE;Lu;0;L;00CA 0303;;;;N;;;;1EC5; 1EC5;LATIN SMALL LETTER E WITH CIRCUMFLEX AND TILDE;Ll;0;L;00EA 0303;;;;N;;;1EC4;;1EC4 1EC6;LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND DOT BELOW;Lu;0;L;1EB8 0302;;;;N;;;;1EC7; 1EC7;LATIN SMALL LETTER E WITH CIRCUMFLEX AND DOT BELOW;Ll;0;L;1EB9 0302;;;;N;;;1EC6;;1EC6 1EC8;LATIN CAPITAL LETTER I WITH HOOK ABOVE;Lu;0;L;0049 0309;;;;N;;;;1EC9; 1EC9;LATIN SMALL LETTER I WITH HOOK ABOVE;Ll;0;L;0069 0309;;;;N;;;1EC8;;1EC8 1ECA;LATIN CAPITAL LETTER I WITH DOT BELOW;Lu;0;L;0049 0323;;;;N;;;;1ECB; 1ECB;LATIN SMALL LETTER I WITH DOT BELOW;Ll;0;L;0069 0323;;;;N;;;1ECA;;1ECA 1ECC;LATIN CAPITAL LETTER O WITH DOT BELOW;Lu;0;L;004F 0323;;;;N;;;;1ECD; 1ECD;LATIN SMALL LETTER O WITH DOT BELOW;Ll;0;L;006F 0323;;;;N;;;1ECC;;1ECC 1ECE;LATIN CAPITAL LETTER O WITH HOOK ABOVE;Lu;0;L;004F 0309;;;;N;;;;1ECF; 1ECF;LATIN SMALL LETTER O WITH HOOK ABOVE;Ll;0;L;006F 0309;;;;N;;;1ECE;;1ECE 1ED0;LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND ACUTE;Lu;0;L;00D4 0301;;;;N;;;;1ED1; 1ED1;LATIN SMALL LETTER O WITH CIRCUMFLEX AND ACUTE;Ll;0;L;00F4 0301;;;;N;;;1ED0;;1ED0 1ED2;LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND GRAVE;Lu;0;L;00D4 0300;;;;N;;;;1ED3; 1ED3;LATIN SMALL LETTER O WITH CIRCUMFLEX AND GRAVE;Ll;0;L;00F4 0300;;;;N;;;1ED2;;1ED2 1ED4;LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE;Lu;0;L;00D4 0309;;;;N;;;;1ED5; 1ED5;LATIN SMALL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE;Ll;0;L;00F4 0309;;;;N;;;1ED4;;1ED4 1ED6;LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND TILDE;Lu;0;L;00D4 0303;;;;N;;;;1ED7; 1ED7;LATIN SMALL LETTER O WITH CIRCUMFLEX AND TILDE;Ll;0;L;00F4 0303;;;;N;;;1ED6;;1ED6 1ED8;LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND DOT BELOW;Lu;0;L;1ECC 0302;;;;N;;;;1ED9; 1ED9;LATIN SMALL LETTER O WITH CIRCUMFLEX AND DOT BELOW;Ll;0;L;1ECD 0302;;;;N;;;1ED8;;1ED8 1EDA;LATIN CAPITAL LETTER O WITH HORN AND ACUTE;Lu;0;L;01A0 0301;;;;N;;;;1EDB; 1EDB;LATIN SMALL LETTER O WITH HORN AND ACUTE;Ll;0;L;01A1 0301;;;;N;;;1EDA;;1EDA 1EDC;LATIN CAPITAL LETTER O WITH HORN AND GRAVE;Lu;0;L;01A0 0300;;;;N;;;;1EDD; 1EDD;LATIN SMALL LETTER O WITH HORN AND GRAVE;Ll;0;L;01A1 0300;;;;N;;;1EDC;;1EDC 1EDE;LATIN CAPITAL LETTER O WITH HORN AND HOOK ABOVE;Lu;0;L;01A0 0309;;;;N;;;;1EDF; 1EDF;LATIN SMALL LETTER O WITH HORN AND HOOK ABOVE;Ll;0;L;01A1 0309;;;;N;;;1EDE;;1EDE 1EE0;LATIN CAPITAL LETTER O WITH HORN AND TILDE;Lu;0;L;01A0 0303;;;;N;;;;1EE1; 1EE1;LATIN SMALL LETTER O WITH HORN AND TILDE;Ll;0;L;01A1 0303;;;;N;;;1EE0;;1EE0 1EE2;LATIN CAPITAL LETTER O WITH HORN AND DOT BELOW;Lu;0;L;01A0 0323;;;;N;;;;1EE3; 1EE3;LATIN SMALL LETTER O WITH HORN AND DOT BELOW;Ll;0;L;01A1 0323;;;;N;;;1EE2;;1EE2 1EE4;LATIN CAPITAL LETTER U WITH DOT BELOW;Lu;0;L;0055 0323;;;;N;;;;1EE5; 1EE5;LATIN SMALL LETTER U WITH DOT BELOW;Ll;0;L;0075 0323;;;;N;;;1EE4;;1EE4 1EE6;LATIN CAPITAL LETTER U WITH HOOK ABOVE;Lu;0;L;0055 0309;;;;N;;;;1EE7; 1EE7;LATIN SMALL LETTER U WITH HOOK ABOVE;Ll;0;L;0075 0309;;;;N;;;1EE6;;1EE6 1EE8;LATIN CAPITAL LETTER U WITH HORN AND ACUTE;Lu;0;L;01AF 0301;;;;N;;;;1EE9; 1EE9;LATIN SMALL LETTER U WITH HORN AND ACUTE;Ll;0;L;01B0 0301;;;;N;;;1EE8;;1EE8 1EEA;LATIN CAPITAL LETTER U WITH HORN AND GRAVE;Lu;0;L;01AF 0300;;;;N;;;;1EEB; 1EEB;LATIN SMALL LETTER U WITH HORN AND GRAVE;Ll;0;L;01B0 0300;;;;N;;;1EEA;;1EEA 1EEC;LATIN CAPITAL LETTER U WITH HORN AND HOOK ABOVE;Lu;0;L;01AF 0309;;;;N;;;;1EED; 1EED;LATIN SMALL LETTER U WITH HORN AND HOOK ABOVE;Ll;0;L;01B0 0309;;;;N;;;1EEC;;1EEC 1EEE;LATIN CAPITAL LETTER U WITH HORN AND TILDE;Lu;0;L;01AF 0303;;;;N;;;;1EEF; 1EEF;LATIN SMALL LETTER U WITH HORN AND TILDE;Ll;0;L;01B0 0303;;;;N;;;1EEE;;1EEE 1EF0;LATIN CAPITAL LETTER U WITH HORN AND DOT BELOW;Lu;0;L;01AF 0323;;;;N;;;;1EF1; 1EF1;LATIN SMALL LETTER U WITH HORN AND DOT BELOW;Ll;0;L;01B0 0323;;;;N;;;1EF0;;1EF0 1EF2;LATIN CAPITAL LETTER Y WITH GRAVE;Lu;0;L;0059 0300;;;;N;;;;1EF3; 1EF3;LATIN SMALL LETTER Y WITH GRAVE;Ll;0;L;0079 0300;;;;N;;;1EF2;;1EF2 1EF4;LATIN CAPITAL LETTER Y WITH DOT BELOW;Lu;0;L;0059 0323;;;;N;;;;1EF5; 1EF5;LATIN SMALL LETTER Y WITH DOT BELOW;Ll;0;L;0079 0323;;;;N;;;1EF4;;1EF4 1EF6;LATIN CAPITAL LETTER Y WITH HOOK ABOVE;Lu;0;L;0059 0309;;;;N;;;;1EF7; 1EF7;LATIN SMALL LETTER Y WITH HOOK ABOVE;Ll;0;L;0079 0309;;;;N;;;1EF6;;1EF6 1EF8;LATIN CAPITAL LETTER Y WITH TILDE;Lu;0;L;0059 0303;;;;N;;;;1EF9; 1EF9;LATIN SMALL LETTER Y WITH TILDE;Ll;0;L;0079 0303;;;;N;;;1EF8;;1EF8 1F00;GREEK SMALL LETTER ALPHA WITH PSILI;Ll;0;L;03B1 0313;;;;N;;;1F08;;1F08 1F01;GREEK SMALL LETTER ALPHA WITH DASIA;Ll;0;L;03B1 0314;;;;N;;;1F09;;1F09 1F02;GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA;Ll;0;L;1F00 0300;;;;N;;;1F0A;;1F0A 1F03;GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA;Ll;0;L;1F01 0300;;;;N;;;1F0B;;1F0B 1F04;GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA;Ll;0;L;1F00 0301;;;;N;;;1F0C;;1F0C 1F05;GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA;Ll;0;L;1F01 0301;;;;N;;;1F0D;;1F0D 1F06;GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI;Ll;0;L;1F00 0342;;;;N;;;1F0E;;1F0E 1F07;GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI;Ll;0;L;1F01 0342;;;;N;;;1F0F;;1F0F 1F08;GREEK CAPITAL LETTER ALPHA WITH PSILI;Lu;0;L;0391 0313;;;;N;;;;1F00; 1F09;GREEK CAPITAL LETTER ALPHA WITH DASIA;Lu;0;L;0391 0314;;;;N;;;;1F01; 1F0A;GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA;Lu;0;L;1F08 0300;;;;N;;;;1F02; 1F0B;GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA;Lu;0;L;1F09 0300;;;;N;;;;1F03; 1F0C;GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA;Lu;0;L;1F08 0301;;;;N;;;;1F04; 1F0D;GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA;Lu;0;L;1F09 0301;;;;N;;;;1F05; 1F0E;GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI;Lu;0;L;1F08 0342;;;;N;;;;1F06; 1F0F;GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI;Lu;0;L;1F09 0342;;;;N;;;;1F07; 1F10;GREEK SMALL LETTER EPSILON WITH PSILI;Ll;0;L;03B5 0313;;;;N;;;1F18;;1F18 1F11;GREEK SMALL LETTER EPSILON WITH DASIA;Ll;0;L;03B5 0314;;;;N;;;1F19;;1F19 1F12;GREEK SMALL LETTER EPSILON WITH PSILI AND VARIA;Ll;0;L;1F10 0300;;;;N;;;1F1A;;1F1A 1F13;GREEK SMALL LETTER EPSILON WITH DASIA AND VARIA;Ll;0;L;1F11 0300;;;;N;;;1F1B;;1F1B 1F14;GREEK SMALL LETTER EPSILON WITH PSILI AND OXIA;Ll;0;L;1F10 0301;;;;N;;;1F1C;;1F1C 1F15;GREEK SMALL LETTER EPSILON WITH DASIA AND OXIA;Ll;0;L;1F11 0301;;;;N;;;1F1D;;1F1D 1F18;GREEK CAPITAL LETTER EPSILON WITH PSILI;Lu;0;L;0395 0313;;;;N;;;;1F10; 1F19;GREEK CAPITAL LETTER EPSILON WITH DASIA;Lu;0;L;0395 0314;;;;N;;;;1F11; 1F1A;GREEK CAPITAL LETTER EPSILON WITH PSILI AND VARIA;Lu;0;L;1F18 0300;;;;N;;;;1F12; 1F1B;GREEK CAPITAL LETTER EPSILON WITH DASIA AND VARIA;Lu;0;L;1F19 0300;;;;N;;;;1F13; 1F1C;GREEK CAPITAL LETTER EPSILON WITH PSILI AND OXIA;Lu;0;L;1F18 0301;;;;N;;;;1F14; 1F1D;GREEK CAPITAL LETTER EPSILON WITH DASIA AND OXIA;Lu;0;L;1F19 0301;;;;N;;;;1F15; 1F20;GREEK SMALL LETTER ETA WITH PSILI;Ll;0;L;03B7 0313;;;;N;;;1F28;;1F28 1F21;GREEK SMALL LETTER ETA WITH DASIA;Ll;0;L;03B7 0314;;;;N;;;1F29;;1F29 1F22;GREEK SMALL LETTER ETA WITH PSILI AND VARIA;Ll;0;L;1F20 0300;;;;N;;;1F2A;;1F2A 1F23;GREEK SMALL LETTER ETA WITH DASIA AND VARIA;Ll;0;L;1F21 0300;;;;N;;;1F2B;;1F2B 1F24;GREEK SMALL LETTER ETA WITH PSILI AND OXIA;Ll;0;L;1F20 0301;;;;N;;;1F2C;;1F2C 1F25;GREEK SMALL LETTER ETA WITH DASIA AND OXIA;Ll;0;L;1F21 0301;;;;N;;;1F2D;;1F2D 1F26;GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI;Ll;0;L;1F20 0342;;;;N;;;1F2E;;1F2E 1F27;GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI;Ll;0;L;1F21 0342;;;;N;;;1F2F;;1F2F 1F28;GREEK CAPITAL LETTER ETA WITH PSILI;Lu;0;L;0397 0313;;;;N;;;;1F20; 1F29;GREEK CAPITAL LETTER ETA WITH DASIA;Lu;0;L;0397 0314;;;;N;;;;1F21; 1F2A;GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA;Lu;0;L;1F28 0300;;;;N;;;;1F22; 1F2B;GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA;Lu;0;L;1F29 0300;;;;N;;;;1F23; 1F2C;GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA;Lu;0;L;1F28 0301;;;;N;;;;1F24; 1F2D;GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA;Lu;0;L;1F29 0301;;;;N;;;;1F25; 1F2E;GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI;Lu;0;L;1F28 0342;;;;N;;;;1F26; 1F2F;GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI;Lu;0;L;1F29 0342;;;;N;;;;1F27; 1F30;GREEK SMALL LETTER IOTA WITH PSILI;Ll;0;L;03B9 0313;;;;N;;;1F38;;1F38 1F31;GREEK SMALL LETTER IOTA WITH DASIA;Ll;0;L;03B9 0314;;;;N;;;1F39;;1F39 1F32;GREEK SMALL LETTER IOTA WITH PSILI AND VARIA;Ll;0;L;1F30 0300;;;;N;;;1F3A;;1F3A 1F33;GREEK SMALL LETTER IOTA WITH DASIA AND VARIA;Ll;0;L;1F31 0300;;;;N;;;1F3B;;1F3B 1F34;GREEK SMALL LETTER IOTA WITH PSILI AND OXIA;Ll;0;L;1F30 0301;;;;N;;;1F3C;;1F3C 1F35;GREEK SMALL LETTER IOTA WITH DASIA AND OXIA;Ll;0;L;1F31 0301;;;;N;;;1F3D;;1F3D 1F36;GREEK SMALL LETTER IOTA WITH PSILI AND PERISPOMENI;Ll;0;L;1F30 0342;;;;N;;;1F3E;;1F3E 1F37;GREEK SMALL LETTER IOTA WITH DASIA AND PERISPOMENI;Ll;0;L;1F31 0342;;;;N;;;1F3F;;1F3F 1F38;GREEK CAPITAL LETTER IOTA WITH PSILI;Lu;0;L;0399 0313;;;;N;;;;1F30; 1F39;GREEK CAPITAL LETTER IOTA WITH DASIA;Lu;0;L;0399 0314;;;;N;;;;1F31; 1F3A;GREEK CAPITAL LETTER IOTA WITH PSILI AND VARIA;Lu;0;L;1F38 0300;;;;N;;;;1F32; 1F3B;GREEK CAPITAL LETTER IOTA WITH DASIA AND VARIA;Lu;0;L;1F39 0300;;;;N;;;;1F33; 1F3C;GREEK CAPITAL LETTER IOTA WITH PSILI AND OXIA;Lu;0;L;1F38 0301;;;;N;;;;1F34; 1F3D;GREEK CAPITAL LETTER IOTA WITH DASIA AND OXIA;Lu;0;L;1F39 0301;;;;N;;;;1F35; 1F3E;GREEK CAPITAL LETTER IOTA WITH PSILI AND PERISPOMENI;Lu;0;L;1F38 0342;;;;N;;;;1F36; 1F3F;GREEK CAPITAL LETTER IOTA WITH DASIA AND PERISPOMENI;Lu;0;L;1F39 0342;;;;N;;;;1F37; 1F40;GREEK SMALL LETTER OMICRON WITH PSILI;Ll;0;L;03BF 0313;;;;N;;;1F48;;1F48 1F41;GREEK SMALL LETTER OMICRON WITH DASIA;Ll;0;L;03BF 0314;;;;N;;;1F49;;1F49 1F42;GREEK SMALL LETTER OMICRON WITH PSILI AND VARIA;Ll;0;L;1F40 0300;;;;N;;;1F4A;;1F4A 1F43;GREEK SMALL LETTER OMICRON WITH DASIA AND VARIA;Ll;0;L;1F41 0300;;;;N;;;1F4B;;1F4B 1F44;GREEK SMALL LETTER OMICRON WITH PSILI AND OXIA;Ll;0;L;1F40 0301;;;;N;;;1F4C;;1F4C 1F45;GREEK SMALL LETTER OMICRON WITH DASIA AND OXIA;Ll;0;L;1F41 0301;;;;N;;;1F4D;;1F4D 1F48;GREEK CAPITAL LETTER OMICRON WITH PSILI;Lu;0;L;039F 0313;;;;N;;;;1F40; 1F49;GREEK CAPITAL LETTER OMICRON WITH DASIA;Lu;0;L;039F 0314;;;;N;;;;1F41; 1F4A;GREEK CAPITAL LETTER OMICRON WITH PSILI AND VARIA;Lu;0;L;1F48 0300;;;;N;;;;1F42; 1F4B;GREEK CAPITAL LETTER OMICRON WITH DASIA AND VARIA;Lu;0;L;1F49 0300;;;;N;;;;1F43; 1F4C;GREEK CAPITAL LETTER OMICRON WITH PSILI AND OXIA;Lu;0;L;1F48 0301;;;;N;;;;1F44; 1F4D;GREEK CAPITAL LETTER OMICRON WITH DASIA AND OXIA;Lu;0;L;1F49 0301;;;;N;;;;1F45; 1F50;GREEK SMALL LETTER UPSILON WITH PSILI;Ll;0;L;03C5 0313;;;;N;;;;; 1F51;GREEK SMALL LETTER UPSILON WITH DASIA;Ll;0;L;03C5 0314;;;;N;;;1F59;;1F59 1F52;GREEK SMALL LETTER UPSILON WITH PSILI AND VARIA;Ll;0;L;1F50 0300;;;;N;;;;; 1F53;GREEK SMALL LETTER UPSILON WITH DASIA AND VARIA;Ll;0;L;1F51 0300;;;;N;;;1F5B;;1F5B 1F54;GREEK SMALL LETTER UPSILON WITH PSILI AND OXIA;Ll;0;L;1F50 0301;;;;N;;;;; 1F55;GREEK SMALL LETTER UPSILON WITH DASIA AND OXIA;Ll;0;L;1F51 0301;;;;N;;;1F5D;;1F5D 1F56;GREEK SMALL LETTER UPSILON WITH PSILI AND PERISPOMENI;Ll;0;L;1F50 0342;;;;N;;;;; 1F57;GREEK SMALL LETTER UPSILON WITH DASIA AND PERISPOMENI;Ll;0;L;1F51 0342;;;;N;;;1F5F;;1F5F 1F59;GREEK CAPITAL LETTER UPSILON WITH DASIA;Lu;0;L;03A5 0314;;;;N;;;;1F51; 1F5B;GREEK CAPITAL LETTER UPSILON WITH DASIA AND VARIA;Lu;0;L;1F59 0300;;;;N;;;;1F53; 1F5D;GREEK CAPITAL LETTER UPSILON WITH DASIA AND OXIA;Lu;0;L;1F59 0301;;;;N;;;;1F55; 1F5F;GREEK CAPITAL LETTER UPSILON WITH DASIA AND PERISPOMENI;Lu;0;L;1F59 0342;;;;N;;;;1F57; 1F60;GREEK SMALL LETTER OMEGA WITH PSILI;Ll;0;L;03C9 0313;;;;N;;;1F68;;1F68 1F61;GREEK SMALL LETTER OMEGA WITH DASIA;Ll;0;L;03C9 0314;;;;N;;;1F69;;1F69 1F62;GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA;Ll;0;L;1F60 0300;;;;N;;;1F6A;;1F6A 1F63;GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA;Ll;0;L;1F61 0300;;;;N;;;1F6B;;1F6B 1F64;GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA;Ll;0;L;1F60 0301;;;;N;;;1F6C;;1F6C 1F65;GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA;Ll;0;L;1F61 0301;;;;N;;;1F6D;;1F6D 1F66;GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI;Ll;0;L;1F60 0342;;;;N;;;1F6E;;1F6E 1F67;GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI;Ll;0;L;1F61 0342;;;;N;;;1F6F;;1F6F 1F68;GREEK CAPITAL LETTER OMEGA WITH PSILI;Lu;0;L;03A9 0313;;;;N;;;;1F60; 1F69;GREEK CAPITAL LETTER OMEGA WITH DASIA;Lu;0;L;03A9 0314;;;;N;;;;1F61; 1F6A;GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA;Lu;0;L;1F68 0300;;;;N;;;;1F62; 1F6B;GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA;Lu;0;L;1F69 0300;;;;N;;;;1F63; 1F6C;GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA;Lu;0;L;1F68 0301;;;;N;;;;1F64; 1F6D;GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA;Lu;0;L;1F69 0301;;;;N;;;;1F65; 1F6E;GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI;Lu;0;L;1F68 0342;;;;N;;;;1F66; 1F6F;GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI;Lu;0;L;1F69 0342;;;;N;;;;1F67; 1F70;GREEK SMALL LETTER ALPHA WITH VARIA;Ll;0;L;03B1 0300;;;;N;;;1FBA;;1FBA 1F71;GREEK SMALL LETTER ALPHA WITH OXIA;Ll;0;L;03AC;;;;N;;;1FBB;;1FBB 1F72;GREEK SMALL LETTER EPSILON WITH VARIA;Ll;0;L;03B5 0300;;;;N;;;1FC8;;1FC8 1F73;GREEK SMALL LETTER EPSILON WITH OXIA;Ll;0;L;03AD;;;;N;;;1FC9;;1FC9 1F74;GREEK SMALL LETTER ETA WITH VARIA;Ll;0;L;03B7 0300;;;;N;;;1FCA;;1FCA 1F75;GREEK SMALL LETTER ETA WITH OXIA;Ll;0;L;03AE;;;;N;;;1FCB;;1FCB 1F76;GREEK SMALL LETTER IOTA WITH VARIA;Ll;0;L;03B9 0300;;;;N;;;1FDA;;1FDA 1F77;GREEK SMALL LETTER IOTA WITH OXIA;Ll;0;L;03AF;;;;N;;;1FDB;;1FDB 1F78;GREEK SMALL LETTER OMICRON WITH VARIA;Ll;0;L;03BF 0300;;;;N;;;1FF8;;1FF8 1F79;GREEK SMALL LETTER OMICRON WITH OXIA;Ll;0;L;03CC;;;;N;;;1FF9;;1FF9 1F7A;GREEK SMALL LETTER UPSILON WITH VARIA;Ll;0;L;03C5 0300;;;;N;;;1FEA;;1FEA 1F7B;GREEK SMALL LETTER UPSILON WITH OXIA;Ll;0;L;03CD;;;;N;;;1FEB;;1FEB 1F7C;GREEK SMALL LETTER OMEGA WITH VARIA;Ll;0;L;03C9 0300;;;;N;;;1FFA;;1FFA 1F7D;GREEK SMALL LETTER OMEGA WITH OXIA;Ll;0;L;03CE;;;;N;;;1FFB;;1FFB 1F80;GREEK SMALL LETTER ALPHA WITH PSILI AND YPOGEGRAMMENI;Ll;0;L;1F00 0345;;;;N;;;1F88;;1F88 1F81;GREEK SMALL LETTER ALPHA WITH DASIA AND YPOGEGRAMMENI;Ll;0;L;1F01 0345;;;;N;;;1F89;;1F89 1F82;GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA AND YPOGEGRAMMENI;Ll;0;L;1F02 0345;;;;N;;;1F8A;;1F8A 1F83;GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA AND YPOGEGRAMMENI;Ll;0;L;1F03 0345;;;;N;;;1F8B;;1F8B 1F84;GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA AND YPOGEGRAMMENI;Ll;0;L;1F04 0345;;;;N;;;1F8C;;1F8C 1F85;GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA AND YPOGEGRAMMENI;Ll;0;L;1F05 0345;;;;N;;;1F8D;;1F8D 1F86;GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI;Ll;0;L;1F06 0345;;;;N;;;1F8E;;1F8E 1F87;GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI;Ll;0;L;1F07 0345;;;;N;;;1F8F;;1F8F 1F88;GREEK CAPITAL LETTER ALPHA WITH PSILI AND PROSGEGRAMMENI;Lt;0;L;1F08 0345;;;;N;;;;1F80; 1F89;GREEK CAPITAL LETTER ALPHA WITH DASIA AND PROSGEGRAMMENI;Lt;0;L;1F09 0345;;;;N;;;;1F81; 1F8A;GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA AND PROSGEGRAMMENI;Lt;0;L;1F0A 0345;;;;N;;;;1F82; 1F8B;GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA AND PROSGEGRAMMENI;Lt;0;L;1F0B 0345;;;;N;;;;1F83; 1F8C;GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA AND PROSGEGRAMMENI;Lt;0;L;1F0C 0345;;;;N;;;;1F84; 1F8D;GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA AND PROSGEGRAMMENI;Lt;0;L;1F0D 0345;;;;N;;;;1F85; 1F8E;GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI;Lt;0;L;1F0E 0345;;;;N;;;;1F86; 1F8F;GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI;Lt;0;L;1F0F 0345;;;;N;;;;1F87; 1F90;GREEK SMALL LETTER ETA WITH PSILI AND YPOGEGRAMMENI;Ll;0;L;1F20 0345;;;;N;;;1F98;;1F98 1F91;GREEK SMALL LETTER ETA WITH DASIA AND YPOGEGRAMMENI;Ll;0;L;1F21 0345;;;;N;;;1F99;;1F99 1F92;GREEK SMALL LETTER ETA WITH PSILI AND VARIA AND YPOGEGRAMMENI;Ll;0;L;1F22 0345;;;;N;;;1F9A;;1F9A 1F93;GREEK SMALL LETTER ETA WITH DASIA AND VARIA AND YPOGEGRAMMENI;Ll;0;L;1F23 0345;;;;N;;;1F9B;;1F9B 1F94;GREEK SMALL LETTER ETA WITH PSILI AND OXIA AND YPOGEGRAMMENI;Ll;0;L;1F24 0345;;;;N;;;1F9C;;1F9C 1F95;GREEK SMALL LETTER ETA WITH DASIA AND OXIA AND YPOGEGRAMMENI;Ll;0;L;1F25 0345;;;;N;;;1F9D;;1F9D 1F96;GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI;Ll;0;L;1F26 0345;;;;N;;;1F9E;;1F9E 1F97;GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI;Ll;0;L;1F27 0345;;;;N;;;1F9F;;1F9F 1F98;GREEK CAPITAL LETTER ETA WITH PSILI AND PROSGEGRAMMENI;Lt;0;L;1F28 0345;;;;N;;;;1F90; 1F99;GREEK CAPITAL LETTER ETA WITH DASIA AND PROSGEGRAMMENI;Lt;0;L;1F29 0345;;;;N;;;;1F91; 1F9A;GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA AND PROSGEGRAMMENI;Lt;0;L;1F2A 0345;;;;N;;;;1F92; 1F9B;GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA AND PROSGEGRAMMENI;Lt;0;L;1F2B 0345;;;;N;;;;1F93; 1F9C;GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA AND PROSGEGRAMMENI;Lt;0;L;1F2C 0345;;;;N;;;;1F94; 1F9D;GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA AND PROSGEGRAMMENI;Lt;0;L;1F2D 0345;;;;N;;;;1F95; 1F9E;GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI;Lt;0;L;1F2E 0345;;;;N;;;;1F96; 1F9F;GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI;Lt;0;L;1F2F 0345;;;;N;;;;1F97; 1FA0;GREEK SMALL LETTER OMEGA WITH PSILI AND YPOGEGRAMMENI;Ll;0;L;1F60 0345;;;;N;;;1FA8;;1FA8 1FA1;GREEK SMALL LETTER OMEGA WITH DASIA AND YPOGEGRAMMENI;Ll;0;L;1F61 0345;;;;N;;;1FA9;;1FA9 1FA2;GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA AND YPOGEGRAMMENI;Ll;0;L;1F62 0345;;;;N;;;1FAA;;1FAA 1FA3;GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA AND YPOGEGRAMMENI;Ll;0;L;1F63 0345;;;;N;;;1FAB;;1FAB 1FA4;GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA AND YPOGEGRAMMENI;Ll;0;L;1F64 0345;;;;N;;;1FAC;;1FAC 1FA5;GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA AND YPOGEGRAMMENI;Ll;0;L;1F65 0345;;;;N;;;1FAD;;1FAD 1FA6;GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI;Ll;0;L;1F66 0345;;;;N;;;1FAE;;1FAE 1FA7;GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI;Ll;0;L;1F67 0345;;;;N;;;1FAF;;1FAF 1FA8;GREEK CAPITAL LETTER OMEGA WITH PSILI AND PROSGEGRAMMENI;Lt;0;L;1F68 0345;;;;N;;;;1FA0; 1FA9;GREEK CAPITAL LETTER OMEGA WITH DASIA AND PROSGEGRAMMENI;Lt;0;L;1F69 0345;;;;N;;;;1FA1; 1FAA;GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA AND PROSGEGRAMMENI;Lt;0;L;1F6A 0345;;;;N;;;;1FA2; 1FAB;GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA AND PROSGEGRAMMENI;Lt;0;L;1F6B 0345;;;;N;;;;1FA3; 1FAC;GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA AND PROSGEGRAMMENI;Lt;0;L;1F6C 0345;;;;N;;;;1FA4; 1FAD;GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA AND PROSGEGRAMMENI;Lt;0;L;1F6D 0345;;;;N;;;;1FA5; 1FAE;GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI;Lt;0;L;1F6E 0345;;;;N;;;;1FA6; 1FAF;GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI;Lt;0;L;1F6F 0345;;;;N;;;;1FA7; 1FB0;GREEK SMALL LETTER ALPHA WITH VRACHY;Ll;0;L;03B1 0306;;;;N;;;1FB8;;1FB8 1FB1;GREEK SMALL LETTER ALPHA WITH MACRON;Ll;0;L;03B1 0304;;;;N;;;1FB9;;1FB9 1FB2;GREEK SMALL LETTER ALPHA WITH VARIA AND YPOGEGRAMMENI;Ll;0;L;1F70 0345;;;;N;;;;; 1FB3;GREEK SMALL LETTER ALPHA WITH YPOGEGRAMMENI;Ll;0;L;03B1 0345;;;;N;;;1FBC;;1FBC 1FB4;GREEK SMALL LETTER ALPHA WITH OXIA AND YPOGEGRAMMENI;Ll;0;L;03AC 0345;;;;N;;;;; 1FB6;GREEK SMALL LETTER ALPHA WITH PERISPOMENI;Ll;0;L;03B1 0342;;;;N;;;;; 1FB7;GREEK SMALL LETTER ALPHA WITH PERISPOMENI AND YPOGEGRAMMENI;Ll;0;L;1FB6 0345;;;;N;;;;; 1FB8;GREEK CAPITAL LETTER ALPHA WITH VRACHY;Lu;0;L;0391 0306;;;;N;;;;1FB0; 1FB9;GREEK CAPITAL LETTER ALPHA WITH MACRON;Lu;0;L;0391 0304;;;;N;;;;1FB1; 1FBA;GREEK CAPITAL LETTER ALPHA WITH VARIA;Lu;0;L;0391 0300;;;;N;;;;1F70; 1FBB;GREEK CAPITAL LETTER ALPHA WITH OXIA;Lu;0;L;0386;;;;N;;;;1F71; 1FBC;GREEK CAPITAL LETTER ALPHA WITH PROSGEGRAMMENI;Lt;0;L;0391 0345;;;;N;;;;1FB3; 1FBD;GREEK KORONIS;Sk;0;ON; 0020 0313;;;;N;;;;; 1FBE;GREEK PROSGEGRAMMENI;Ll;0;L;03B9;;;;N;;;0399;;0399 1FBF;GREEK PSILI;Sk;0;ON; 0020 0313;;;;N;;;;; 1FC0;GREEK PERISPOMENI;Sk;0;ON; 0020 0342;;;;N;;;;; 1FC1;GREEK DIALYTIKA AND PERISPOMENI;Sk;0;ON;00A8 0342;;;;N;;;;; 1FC2;GREEK SMALL LETTER ETA WITH VARIA AND YPOGEGRAMMENI;Ll;0;L;1F74 0345;;;;N;;;;; 1FC3;GREEK SMALL LETTER ETA WITH YPOGEGRAMMENI;Ll;0;L;03B7 0345;;;;N;;;1FCC;;1FCC 1FC4;GREEK SMALL LETTER ETA WITH OXIA AND YPOGEGRAMMENI;Ll;0;L;03AE 0345;;;;N;;;;; 1FC6;GREEK SMALL LETTER ETA WITH PERISPOMENI;Ll;0;L;03B7 0342;;;;N;;;;; 1FC7;GREEK SMALL LETTER ETA WITH PERISPOMENI AND YPOGEGRAMMENI;Ll;0;L;1FC6 0345;;;;N;;;;; 1FC8;GREEK CAPITAL LETTER EPSILON WITH VARIA;Lu;0;L;0395 0300;;;;N;;;;1F72; 1FC9;GREEK CAPITAL LETTER EPSILON WITH OXIA;Lu;0;L;0388;;;;N;;;;1F73; 1FCA;GREEK CAPITAL LETTER ETA WITH VARIA;Lu;0;L;0397 0300;;;;N;;;;1F74; 1FCB;GREEK CAPITAL LETTER ETA WITH OXIA;Lu;0;L;0389;;;;N;;;;1F75; 1FCC;GREEK CAPITAL LETTER ETA WITH PROSGEGRAMMENI;Lt;0;L;0397 0345;;;;N;;;;1FC3; 1FCD;GREEK PSILI AND VARIA;Sk;0;ON;1FBF 0300;;;;N;;;;; 1FCE;GREEK PSILI AND OXIA;Sk;0;ON;1FBF 0301;;;;N;;;;; 1FCF;GREEK PSILI AND PERISPOMENI;Sk;0;ON;1FBF 0342;;;;N;;;;; 1FD0;GREEK SMALL LETTER IOTA WITH VRACHY;Ll;0;L;03B9 0306;;;;N;;;1FD8;;1FD8 1FD1;GREEK SMALL LETTER IOTA WITH MACRON;Ll;0;L;03B9 0304;;;;N;;;1FD9;;1FD9 1FD2;GREEK SMALL LETTER IOTA WITH DIALYTIKA AND VARIA;Ll;0;L;03CA 0300;;;;N;;;;; 1FD3;GREEK SMALL LETTER IOTA WITH DIALYTIKA AND OXIA;Ll;0;L;0390;;;;N;;;;; 1FD6;GREEK SMALL LETTER IOTA WITH PERISPOMENI;Ll;0;L;03B9 0342;;;;N;;;;; 1FD7;GREEK SMALL LETTER IOTA WITH DIALYTIKA AND PERISPOMENI;Ll;0;L;03CA 0342;;;;N;;;;; 1FD8;GREEK CAPITAL LETTER IOTA WITH VRACHY;Lu;0;L;0399 0306;;;;N;;;;1FD0; 1FD9;GREEK CAPITAL LETTER IOTA WITH MACRON;Lu;0;L;0399 0304;;;;N;;;;1FD1; 1FDA;GREEK CAPITAL LETTER IOTA WITH VARIA;Lu;0;L;0399 0300;;;;N;;;;1F76; 1FDB;GREEK CAPITAL LETTER IOTA WITH OXIA;Lu;0;L;038A;;;;N;;;;1F77; 1FDD;GREEK DASIA AND VARIA;Sk;0;ON;1FFE 0300;;;;N;;;;; 1FDE;GREEK DASIA AND OXIA;Sk;0;ON;1FFE 0301;;;;N;;;;; 1FDF;GREEK DASIA AND PERISPOMENI;Sk;0;ON;1FFE 0342;;;;N;;;;; 1FE0;GREEK SMALL LETTER UPSILON WITH VRACHY;Ll;0;L;03C5 0306;;;;N;;;1FE8;;1FE8 1FE1;GREEK SMALL LETTER UPSILON WITH MACRON;Ll;0;L;03C5 0304;;;;N;;;1FE9;;1FE9 1FE2;GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND VARIA;Ll;0;L;03CB 0300;;;;N;;;;; 1FE3;GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND OXIA;Ll;0;L;03B0;;;;N;;;;; 1FE4;GREEK SMALL LETTER RHO WITH PSILI;Ll;0;L;03C1 0313;;;;N;;;;; 1FE5;GREEK SMALL LETTER RHO WITH DASIA;Ll;0;L;03C1 0314;;;;N;;;1FEC;;1FEC 1FE6;GREEK SMALL LETTER UPSILON WITH PERISPOMENI;Ll;0;L;03C5 0342;;;;N;;;;; 1FE7;GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND PERISPOMENI;Ll;0;L;03CB 0342;;;;N;;;;; 1FE8;GREEK CAPITAL LETTER UPSILON WITH VRACHY;Lu;0;L;03A5 0306;;;;N;;;;1FE0; 1FE9;GREEK CAPITAL LETTER UPSILON WITH MACRON;Lu;0;L;03A5 0304;;;;N;;;;1FE1; 1FEA;GREEK CAPITAL LETTER UPSILON WITH VARIA;Lu;0;L;03A5 0300;;;;N;;;;1F7A; 1FEB;GREEK CAPITAL LETTER UPSILON WITH OXIA;Lu;0;L;038E;;;;N;;;;1F7B; 1FEC;GREEK CAPITAL LETTER RHO WITH DASIA;Lu;0;L;03A1 0314;;;;N;;;;1FE5; 1FED;GREEK DIALYTIKA AND VARIA;Sk;0;ON;00A8 0300;;;;N;;;;; 1FEE;GREEK DIALYTIKA AND OXIA;Sk;0;ON;0385;;;;N;;;;; 1FEF;GREEK VARIA;Sk;0;ON;0060;;;;N;;;;; 1FF2;GREEK SMALL LETTER OMEGA WITH VARIA AND YPOGEGRAMMENI;Ll;0;L;1F7C 0345;;;;N;;;;; 1FF3;GREEK SMALL LETTER OMEGA WITH YPOGEGRAMMENI;Ll;0;L;03C9 0345;;;;N;;;1FFC;;1FFC 1FF4;GREEK SMALL LETTER OMEGA WITH OXIA AND YPOGEGRAMMENI;Ll;0;L;03CE 0345;;;;N;;;;; 1FF6;GREEK SMALL LETTER OMEGA WITH PERISPOMENI;Ll;0;L;03C9 0342;;;;N;;;;; 1FF7;GREEK SMALL LETTER OMEGA WITH PERISPOMENI AND YPOGEGRAMMENI;Ll;0;L;1FF6 0345;;;;N;;;;; 1FF8;GREEK CAPITAL LETTER OMICRON WITH VARIA;Lu;0;L;039F 0300;;;;N;;;;1F78; 1FF9;GREEK CAPITAL LETTER OMICRON WITH OXIA;Lu;0;L;038C;;;;N;;;;1F79; 1FFA;GREEK CAPITAL LETTER OMEGA WITH VARIA;Lu;0;L;03A9 0300;;;;N;;;;1F7C; 1FFB;GREEK CAPITAL LETTER OMEGA WITH OXIA;Lu;0;L;038F;;;;N;;;;1F7D; 1FFC;GREEK CAPITAL LETTER OMEGA WITH PROSGEGRAMMENI;Lt;0;L;03A9 0345;;;;N;;;;1FF3; 1FFD;GREEK OXIA;Sk;0;ON;00B4;;;;N;;;;; 1FFE;GREEK DASIA;Sk;0;ON; 0020 0314;;;;N;;;;; 2000;EN QUAD;Zs;0;WS;2002;;;;N;;;;; 2001;EM QUAD;Zs;0;WS;2003;;;;N;;;;; 2002;EN SPACE;Zs;0;WS; 0020;;;;N;;;;; 2003;EM SPACE;Zs;0;WS; 0020;;;;N;;;;; 2004;THREE-PER-EM SPACE;Zs;0;WS; 0020;;;;N;;;;; 2005;FOUR-PER-EM SPACE;Zs;0;WS; 0020;;;;N;;;;; 2006;SIX-PER-EM SPACE;Zs;0;WS; 0020;;;;N;;;;; 2007;FIGURE SPACE;Zs;0;WS; 0020;;;;N;;;;; 2008;PUNCTUATION SPACE;Zs;0;WS; 0020;;;;N;;;;; 2009;THIN SPACE;Zs;0;WS; 0020;;;;N;;;;; 200A;HAIR SPACE;Zs;0;WS; 0020;;;;N;;;;; 200B;ZERO WIDTH SPACE;Zs;0;BN;;;;;N;;;;; 200C;ZERO WIDTH NON-JOINER;Cf;0;BN;;;;;N;;;;; 200D;ZERO WIDTH JOINER;Cf;0;BN;;;;;N;;;;; 200E;LEFT-TO-RIGHT MARK;Cf;0;L;;;;;N;;;;; 200F;RIGHT-TO-LEFT MARK;Cf;0;R;;;;;N;;;;; 2010;HYPHEN;Pd;0;ON;;;;;N;;;;; 2011;NON-BREAKING HYPHEN;Pd;0;ON; 2010;;;;N;;;;; 2012;FIGURE DASH;Pd;0;ON;;;;;N;;;;; 2013;EN DASH;Pd;0;ON;;;;;N;;;;; 2014;EM DASH;Pd;0;ON;;;;;N;;;;; 2015;HORIZONTAL BAR;Pd;0;ON;;;;;N;QUOTATION DASH;;;; 2016;DOUBLE VERTICAL LINE;Po;0;ON;;;;;N;DOUBLE VERTICAL BAR;;;; 2017;DOUBLE LOW LINE;Po;0;ON; 0020 0333;;;;N;SPACING DOUBLE UNDERSCORE;;;; 2018;LEFT SINGLE QUOTATION MARK;Pi;0;ON;;;;;N;SINGLE TURNED COMMA QUOTATION MARK;;;; 2019;RIGHT SINGLE QUOTATION MARK;Pf;0;ON;;;;;N;SINGLE COMMA QUOTATION MARK;;;; 201A;SINGLE LOW-9 QUOTATION MARK;Ps;0;ON;;;;;N;LOW SINGLE COMMA QUOTATION MARK;;;; 201B;SINGLE HIGH-REVERSED-9 QUOTATION MARK;Pi;0;ON;;;;;N;SINGLE REVERSED COMMA QUOTATION MARK;;;; 201C;LEFT DOUBLE QUOTATION MARK;Pi;0;ON;;;;;N;DOUBLE TURNED COMMA QUOTATION MARK;;;; 201D;RIGHT DOUBLE QUOTATION MARK;Pf;0;ON;;;;;N;DOUBLE COMMA QUOTATION MARK;;;; 201E;DOUBLE LOW-9 QUOTATION MARK;Ps;0;ON;;;;;N;LOW DOUBLE COMMA QUOTATION MARK;;;; 201F;DOUBLE HIGH-REVERSED-9 QUOTATION MARK;Pi;0;ON;;;;;N;DOUBLE REVERSED COMMA QUOTATION MARK;;;; 2020;DAGGER;Po;0;ON;;;;;N;;;;; 2021;DOUBLE DAGGER;Po;0;ON;;;;;N;;;;; 2022;BULLET;Po;0;ON;;;;;N;;;;; 2023;TRIANGULAR BULLET;Po;0;ON;;;;;N;;;;; 2024;ONE DOT LEADER;Po;0;ON; 002E;;;;N;;;;; 2025;TWO DOT LEADER;Po;0;ON; 002E 002E;;;;N;;;;; 2026;HORIZONTAL ELLIPSIS;Po;0;ON; 002E 002E 002E;;;;N;;;;; 2027;HYPHENATION POINT;Po;0;ON;;;;;N;;;;; 2028;LINE SEPARATOR;Zl;0;WS;;;;;N;;;;; 2029;PARAGRAPH SEPARATOR;Zp;0;B;;;;;N;;;;; 202A;LEFT-TO-RIGHT EMBEDDING;Cf;0;LRE;;;;;N;;;;; 202B;RIGHT-TO-LEFT EMBEDDING;Cf;0;RLE;;;;;N;;;;; 202C;POP DIRECTIONAL FORMATTING;Cf;0;PDF;;;;;N;;;;; 202D;LEFT-TO-RIGHT OVERRIDE;Cf;0;LRO;;;;;N;;;;; 202E;RIGHT-TO-LEFT OVERRIDE;Cf;0;RLO;;;;;N;;;;; 202F;NARROW NO-BREAK SPACE;Zs;0;WS; 0020;;;;N;;;;; 2030;PER MILLE SIGN;Po;0;ET;;;;;N;;;;; 2031;PER TEN THOUSAND SIGN;Po;0;ET;;;;;N;;;;; 2032;PRIME;Po;0;ET;;;;;N;;;;; 2033;DOUBLE PRIME;Po;0;ET; 2032 2032;;;;N;;;;; 2034;TRIPLE PRIME;Po;0;ET; 2032 2032 2032;;;;N;;;;; 2035;REVERSED PRIME;Po;0;ON;;;;;N;;;;; 2036;REVERSED DOUBLE PRIME;Po;0;ON; 2035 2035;;;;N;;;;; 2037;REVERSED TRIPLE PRIME;Po;0;ON; 2035 2035 2035;;;;N;;;;; 2038;CARET;Po;0;ON;;;;;N;;;;; 2039;SINGLE LEFT-POINTING ANGLE QUOTATION MARK;Pi;0;ON;;;;;Y;LEFT POINTING SINGLE GUILLEMET;;;; 203A;SINGLE RIGHT-POINTING ANGLE QUOTATION MARK;Pf;0;ON;;;;;Y;RIGHT POINTING SINGLE GUILLEMET;;;; 203B;REFERENCE MARK;Po;0;ON;;;;;N;;;;; 203C;DOUBLE EXCLAMATION MARK;Po;0;ON; 0021 0021;;;;N;;;;; 203D;INTERROBANG;Po;0;ON;;;;;N;;;;; 203E;OVERLINE;Po;0;ON; 0020 0305;;;;N;SPACING OVERSCORE;;;; 203F;UNDERTIE;Pc;0;ON;;;;;N;;Enotikon;;; 2040;CHARACTER TIE;Pc;0;ON;;;;;N;;;;; 2041;CARET INSERTION POINT;Po;0;ON;;;;;N;;;;; 2042;ASTERISM;Po;0;ON;;;;;N;;;;; 2043;HYPHEN BULLET;Po;0;ON;;;;;N;;;;; 2044;FRACTION SLASH;Sm;0;ON;;;;;N;;;;; 2045;LEFT SQUARE BRACKET WITH QUILL;Ps;0;ON;;;;;Y;;;;; 2046;RIGHT SQUARE BRACKET WITH QUILL;Pe;0;ON;;;;;Y;;;;; 2048;QUESTION EXCLAMATION MARK;Po;0;ON; 003F 0021;;;;N;;;;; 2049;EXCLAMATION QUESTION MARK;Po;0;ON; 0021 003F;;;;N;;;;; 204A;TIRONIAN SIGN ET;Po;0;ON;;;;;N;;;;; 204B;REVERSED PILCROW SIGN;Po;0;ON;;;;;N;;;;; 204C;BLACK LEFTWARDS BULLET;Po;0;ON;;;;;N;;;;; 204D;BLACK RIGHTWARDS BULLET;Po;0;ON;;;;;N;;;;; 206A;INHIBIT SYMMETRIC SWAPPING;Cf;0;BN;;;;;N;;;;; 206B;ACTIVATE SYMMETRIC SWAPPING;Cf;0;BN;;;;;N;;;;; 206C;INHIBIT ARABIC FORM SHAPING;Cf;0;BN;;;;;N;;;;; 206D;ACTIVATE ARABIC FORM SHAPING;Cf;0;BN;;;;;N;;;;; 206E;NATIONAL DIGIT SHAPES;Cf;0;BN;;;;;N;;;;; 206F;NOMINAL DIGIT SHAPES;Cf;0;BN;;;;;N;;;;; 2070;SUPERSCRIPT ZERO;No;0;EN; 0030;0;0;0;N;SUPERSCRIPT DIGIT ZERO;;;; 2074;SUPERSCRIPT FOUR;No;0;EN; 0034;4;4;4;N;SUPERSCRIPT DIGIT FOUR;;;; 2075;SUPERSCRIPT FIVE;No;0;EN; 0035;5;5;5;N;SUPERSCRIPT DIGIT FIVE;;;; 2076;SUPERSCRIPT SIX;No;0;EN; 0036;6;6;6;N;SUPERSCRIPT DIGIT SIX;;;; 2077;SUPERSCRIPT SEVEN;No;0;EN; 0037;7;7;7;N;SUPERSCRIPT DIGIT SEVEN;;;; 2078;SUPERSCRIPT EIGHT;No;0;EN; 0038;8;8;8;N;SUPERSCRIPT DIGIT EIGHT;;;; 2079;SUPERSCRIPT NINE;No;0;EN; 0039;9;9;9;N;SUPERSCRIPT DIGIT NINE;;;; 207A;SUPERSCRIPT PLUS SIGN;Sm;0;ET; 002B;;;;N;;;;; 207B;SUPERSCRIPT MINUS;Sm;0;ET; 2212;;;;N;SUPERSCRIPT HYPHEN-MINUS;;;; 207C;SUPERSCRIPT EQUALS SIGN;Sm;0;ON; 003D;;;;N;;;;; 207D;SUPERSCRIPT LEFT PARENTHESIS;Ps;0;ON; 0028;;;;Y;SUPERSCRIPT OPENING PARENTHESIS;;;; 207E;SUPERSCRIPT RIGHT PARENTHESIS;Pe;0;ON; 0029;;;;Y;SUPERSCRIPT CLOSING PARENTHESIS;;;; 207F;SUPERSCRIPT LATIN SMALL LETTER N;Ll;0;L; 006E;;;;N;;;;; 2080;SUBSCRIPT ZERO;No;0;EN; 0030;0;0;0;N;SUBSCRIPT DIGIT ZERO;;;; 2081;SUBSCRIPT ONE;No;0;EN; 0031;1;1;1;N;SUBSCRIPT DIGIT ONE;;;; 2082;SUBSCRIPT TWO;No;0;EN; 0032;2;2;2;N;SUBSCRIPT DIGIT TWO;;;; 2083;SUBSCRIPT THREE;No;0;EN; 0033;3;3;3;N;SUBSCRIPT DIGIT THREE;;;; 2084;SUBSCRIPT FOUR;No;0;EN; 0034;4;4;4;N;SUBSCRIPT DIGIT FOUR;;;; 2085;SUBSCRIPT FIVE;No;0;EN; 0035;5;5;5;N;SUBSCRIPT DIGIT FIVE;;;; 2086;SUBSCRIPT SIX;No;0;EN; 0036;6;6;6;N;SUBSCRIPT DIGIT SIX;;;; 2087;SUBSCRIPT SEVEN;No;0;EN; 0037;7;7;7;N;SUBSCRIPT DIGIT SEVEN;;;; 2088;SUBSCRIPT EIGHT;No;0;EN; 0038;8;8;8;N;SUBSCRIPT DIGIT EIGHT;;;; 2089;SUBSCRIPT NINE;No;0;EN; 0039;9;9;9;N;SUBSCRIPT DIGIT NINE;;;; 208A;SUBSCRIPT PLUS SIGN;Sm;0;ET; 002B;;;;N;;;;; 208B;SUBSCRIPT MINUS;Sm;0;ET; 2212;;;;N;SUBSCRIPT HYPHEN-MINUS;;;; 208C;SUBSCRIPT EQUALS SIGN;Sm;0;ON; 003D;;;;N;;;;; 208D;SUBSCRIPT LEFT PARENTHESIS;Ps;0;ON; 0028;;;;Y;SUBSCRIPT OPENING PARENTHESIS;;;; 208E;SUBSCRIPT RIGHT PARENTHESIS;Pe;0;ON; 0029;;;;Y;SUBSCRIPT CLOSING PARENTHESIS;;;; 20A0;EURO-CURRENCY SIGN;Sc;0;ET;;;;;N;;;;; 20A1;COLON SIGN;Sc;0;ET;;;;;N;;;;; 20A2;CRUZEIRO SIGN;Sc;0;ET;;;;;N;;;;; 20A3;FRENCH FRANC SIGN;Sc;0;ET;;;;;N;;;;; 20A4;LIRA SIGN;Sc;0;ET;;;;;N;;;;; 20A5;MILL SIGN;Sc;0;ET;;;;;N;;;;; 20A6;NAIRA SIGN;Sc;0;ET;;;;;N;;;;; 20A7;PESETA SIGN;Sc;0;ET;;;;;N;;;;; 20A8;RUPEE SIGN;Sc;0;ET; 0052 0073;;;;N;;;;; 20A9;WON SIGN;Sc;0;ET;;;;;N;;;;; 20AA;NEW SHEQEL SIGN;Sc;0;ET;;;;;N;;;;; 20AB;DONG SIGN;Sc;0;ET;;;;;N;;;;; 20AC;EURO SIGN;Sc;0;ET;;;;;N;;;;; 20AD;KIP SIGN;Sc;0;ET;;;;;N;;;;; 20AE;TUGRIK SIGN;Sc;0;ET;;;;;N;;;;; 20AF;DRACHMA SIGN;Sc;0;ET;;;;;N;;;;; 20D0;COMBINING LEFT HARPOON ABOVE;Mn;230;NSM;;;;;N;NON-SPACING LEFT HARPOON ABOVE;;;; 20D1;COMBINING RIGHT HARPOON ABOVE;Mn;230;NSM;;;;;N;NON-SPACING RIGHT HARPOON ABOVE;;;; 20D2;COMBINING LONG VERTICAL LINE OVERLAY;Mn;1;NSM;;;;;N;NON-SPACING LONG VERTICAL BAR OVERLAY;;;; 20D3;COMBINING SHORT VERTICAL LINE OVERLAY;Mn;1;NSM;;;;;N;NON-SPACING SHORT VERTICAL BAR OVERLAY;;;; 20D4;COMBINING ANTICLOCKWISE ARROW ABOVE;Mn;230;NSM;;;;;N;NON-SPACING ANTICLOCKWISE ARROW ABOVE;;;; 20D5;COMBINING CLOCKWISE ARROW ABOVE;Mn;230;NSM;;;;;N;NON-SPACING CLOCKWISE ARROW ABOVE;;;; 20D6;COMBINING LEFT ARROW ABOVE;Mn;230;NSM;;;;;N;NON-SPACING LEFT ARROW ABOVE;;;; 20D7;COMBINING RIGHT ARROW ABOVE;Mn;230;NSM;;;;;N;NON-SPACING RIGHT ARROW ABOVE;;;; 20D8;COMBINING RING OVERLAY;Mn;1;NSM;;;;;N;NON-SPACING RING OVERLAY;;;; 20D9;COMBINING CLOCKWISE RING OVERLAY;Mn;1;NSM;;;;;N;NON-SPACING CLOCKWISE RING OVERLAY;;;; 20DA;COMBINING ANTICLOCKWISE RING OVERLAY;Mn;1;NSM;;;;;N;NON-SPACING ANTICLOCKWISE RING OVERLAY;;;; 20DB;COMBINING THREE DOTS ABOVE;Mn;230;NSM;;;;;N;NON-SPACING THREE DOTS ABOVE;;;; 20DC;COMBINING FOUR DOTS ABOVE;Mn;230;NSM;;;;;N;NON-SPACING FOUR DOTS ABOVE;;;; 20DD;COMBINING ENCLOSING CIRCLE;Me;0;NSM;;;;;N;ENCLOSING CIRCLE;;;; 20DE;COMBINING ENCLOSING SQUARE;Me;0;NSM;;;;;N;ENCLOSING SQUARE;;;; 20DF;COMBINING ENCLOSING DIAMOND;Me;0;NSM;;;;;N;ENCLOSING DIAMOND;;;; 20E0;COMBINING ENCLOSING CIRCLE BACKSLASH;Me;0;NSM;;;;;N;ENCLOSING CIRCLE SLASH;;;; 20E1;COMBINING LEFT RIGHT ARROW ABOVE;Mn;230;NSM;;;;;N;NON-SPACING LEFT RIGHT ARROW ABOVE;;;; 20E2;COMBINING ENCLOSING SCREEN;Me;0;NSM;;;;;N;;;;; 20E3;COMBINING ENCLOSING KEYCAP;Me;0;NSM;;;;;N;;;;; 2100;ACCOUNT OF;So;0;ON; 0061 002F 0063;;;;N;;;;; 2101;ADDRESSED TO THE SUBJECT;So;0;ON; 0061 002F 0073;;;;N;;;;; 2102;DOUBLE-STRUCK CAPITAL C;Lu;0;L; 0043;;;;N;DOUBLE-STRUCK C;;;; 2103;DEGREE CELSIUS;So;0;ON; 00B0 0043;;;;N;DEGREES CENTIGRADE;;;; 2104;CENTRE LINE SYMBOL;So;0;ON;;;;;N;C L SYMBOL;;;; 2105;CARE OF;So;0;ON; 0063 002F 006F;;;;N;;;;; 2106;CADA UNA;So;0;ON; 0063 002F 0075;;;;N;;;;; 2107;EULER CONSTANT;Lu;0;L; 0190;;;;N;EULERS;;;; 2108;SCRUPLE;So;0;ON;;;;;N;;;;; 2109;DEGREE FAHRENHEIT;So;0;ON; 00B0 0046;;;;N;DEGREES FAHRENHEIT;;;; 210A;SCRIPT SMALL G;Ll;0;L; 0067;;;;N;;;;; 210B;SCRIPT CAPITAL H;Lu;0;L; 0048;;;;N;SCRIPT H;;;; 210C;BLACK-LETTER CAPITAL H;Lu;0;L; 0048;;;;N;BLACK-LETTER H;;;; 210D;DOUBLE-STRUCK CAPITAL H;Lu;0;L; 0048;;;;N;DOUBLE-STRUCK H;;;; 210E;PLANCK CONSTANT;Ll;0;L; 0068;;;;N;;;;; 210F;PLANCK CONSTANT OVER TWO PI;Ll;0;L; 0127;;;;N;PLANCK CONSTANT OVER 2 PI;;;; 2110;SCRIPT CAPITAL I;Lu;0;L; 0049;;;;N;SCRIPT I;;;; 2111;BLACK-LETTER CAPITAL I;Lu;0;L; 0049;;;;N;BLACK-LETTER I;;;; 2112;SCRIPT CAPITAL L;Lu;0;L; 004C;;;;N;SCRIPT L;;;; 2113;SCRIPT SMALL L;Ll;0;L; 006C;;;;N;;;;; 2114;L B BAR SYMBOL;So;0;ON;;;;;N;;;;; 2115;DOUBLE-STRUCK CAPITAL N;Lu;0;L; 004E;;;;N;DOUBLE-STRUCK N;;;; 2116;NUMERO SIGN;So;0;ON; 004E 006F;;;;N;NUMERO;;;; 2117;SOUND RECORDING COPYRIGHT;So;0;ON;;;;;N;;;;; 2118;SCRIPT CAPITAL P;So;0;ON;;;;;N;SCRIPT P;;;; 2119;DOUBLE-STRUCK CAPITAL P;Lu;0;L; 0050;;;;N;DOUBLE-STRUCK P;;;; 211A;DOUBLE-STRUCK CAPITAL Q;Lu;0;L; 0051;;;;N;DOUBLE-STRUCK Q;;;; 211B;SCRIPT CAPITAL R;Lu;0;L; 0052;;;;N;SCRIPT R;;;; 211C;BLACK-LETTER CAPITAL R;Lu;0;L; 0052;;;;N;BLACK-LETTER R;;;; 211D;DOUBLE-STRUCK CAPITAL R;Lu;0;L; 0052;;;;N;DOUBLE-STRUCK R;;;; 211E;PRESCRIPTION TAKE;So;0;ON;;;;;N;;;;; 211F;RESPONSE;So;0;ON;;;;;N;;;;; 2120;SERVICE MARK;So;0;ON; 0053 004D;;;;N;;;;; 2121;TELEPHONE SIGN;So;0;ON; 0054 0045 004C;;;;N;T E L SYMBOL;;;; 2122;TRADE MARK SIGN;So;0;ON; 0054 004D;;;;N;TRADEMARK;;;; 2123;VERSICLE;So;0;ON;;;;;N;;;;; 2124;DOUBLE-STRUCK CAPITAL Z;Lu;0;L; 005A;;;;N;DOUBLE-STRUCK Z;;;; 2125;OUNCE SIGN;So;0;ON;;;;;N;OUNCE;;;; 2126;OHM SIGN;Lu;0;L;03A9;;;;N;OHM;;;03C9; 2127;INVERTED OHM SIGN;So;0;ON;;;;;N;MHO;;;; 2128;BLACK-LETTER CAPITAL Z;Lu;0;L; 005A;;;;N;BLACK-LETTER Z;;;; 2129;TURNED GREEK SMALL LETTER IOTA;So;0;ON;;;;;N;;;;; 212A;KELVIN SIGN;Lu;0;L;004B;;;;N;DEGREES KELVIN;;;006B; 212B;ANGSTROM SIGN;Lu;0;L;00C5;;;;N;ANGSTROM UNIT;;;00E5; 212C;SCRIPT CAPITAL B;Lu;0;L; 0042;;;;N;SCRIPT B;;;; 212D;BLACK-LETTER CAPITAL C;Lu;0;L; 0043;;;;N;BLACK-LETTER C;;;; 212E;ESTIMATED SYMBOL;So;0;ET;;;;;N;;;;; 212F;SCRIPT SMALL E;Ll;0;L; 0065;;;;N;;;;; 2130;SCRIPT CAPITAL E;Lu;0;L; 0045;;;;N;SCRIPT E;;;; 2131;SCRIPT CAPITAL F;Lu;0;L; 0046;;;;N;SCRIPT F;;;; 2132;TURNED CAPITAL F;So;0;ON;;;;;N;TURNED F;;;; 2133;SCRIPT CAPITAL M;Lu;0;L; 004D;;;;N;SCRIPT M;;;; 2134;SCRIPT SMALL O;Ll;0;L; 006F;;;;N;;;;; 2135;ALEF SYMBOL;Lo;0;L; 05D0;;;;N;FIRST TRANSFINITE CARDINAL;;;; 2136;BET SYMBOL;Lo;0;L; 05D1;;;;N;SECOND TRANSFINITE CARDINAL;;;; 2137;GIMEL SYMBOL;Lo;0;L; 05D2;;;;N;THIRD TRANSFINITE CARDINAL;;;; 2138;DALET SYMBOL;Lo;0;L; 05D3;;;;N;FOURTH TRANSFINITE CARDINAL;;;; 2139;INFORMATION SOURCE;Ll;0;L; 0069;;;;N;;;;; 213A;ROTATED CAPITAL Q;So;0;ON;;;;;N;;;;; 2153;VULGAR FRACTION ONE THIRD;No;0;ON; 0031 2044 0033;;;1/3;N;FRACTION ONE THIRD;;;; 2154;VULGAR FRACTION TWO THIRDS;No;0;ON; 0032 2044 0033;;;2/3;N;FRACTION TWO THIRDS;;;; 2155;VULGAR FRACTION ONE FIFTH;No;0;ON; 0031 2044 0035;;;1/5;N;FRACTION ONE FIFTH;;;; 2156;VULGAR FRACTION TWO FIFTHS;No;0;ON; 0032 2044 0035;;;2/5;N;FRACTION TWO FIFTHS;;;; 2157;VULGAR FRACTION THREE FIFTHS;No;0;ON; 0033 2044 0035;;;3/5;N;FRACTION THREE FIFTHS;;;; 2158;VULGAR FRACTION FOUR FIFTHS;No;0;ON; 0034 2044 0035;;;4/5;N;FRACTION FOUR FIFTHS;;;; 2159;VULGAR FRACTION ONE SIXTH;No;0;ON; 0031 2044 0036;;;1/6;N;FRACTION ONE SIXTH;;;; 215A;VULGAR FRACTION FIVE SIXTHS;No;0;ON; 0035 2044 0036;;;5/6;N;FRACTION FIVE SIXTHS;;;; 215B;VULGAR FRACTION ONE EIGHTH;No;0;ON; 0031 2044 0038;;;1/8;N;FRACTION ONE EIGHTH;;;; 215C;VULGAR FRACTION THREE EIGHTHS;No;0;ON; 0033 2044 0038;;;3/8;N;FRACTION THREE EIGHTHS;;;; 215D;VULGAR FRACTION FIVE EIGHTHS;No;0;ON; 0035 2044 0038;;;5/8;N;FRACTION FIVE EIGHTHS;;;; 215E;VULGAR FRACTION SEVEN EIGHTHS;No;0;ON; 0037 2044 0038;;;7/8;N;FRACTION SEVEN EIGHTHS;;;; 215F;FRACTION NUMERATOR ONE;No;0;ON; 0031 2044;;;1;N;;;;; 2160;ROMAN NUMERAL ONE;Nl;0;L; 0049;;;1;N;;;;2170; 2161;ROMAN NUMERAL TWO;Nl;0;L; 0049 0049;;;2;N;;;;2171; 2162;ROMAN NUMERAL THREE;Nl;0;L; 0049 0049 0049;;;3;N;;;;2172; 2163;ROMAN NUMERAL FOUR;Nl;0;L; 0049 0056;;;4;N;;;;2173; 2164;ROMAN NUMERAL FIVE;Nl;0;L; 0056;;;5;N;;;;2174; 2165;ROMAN NUMERAL SIX;Nl;0;L; 0056 0049;;;6;N;;;;2175; 2166;ROMAN NUMERAL SEVEN;Nl;0;L; 0056 0049 0049;;;7;N;;;;2176; 2167;ROMAN NUMERAL EIGHT;Nl;0;L; 0056 0049 0049 0049;;;8;N;;;;2177; 2168;ROMAN NUMERAL NINE;Nl;0;L; 0049 0058;;;9;N;;;;2178; 2169;ROMAN NUMERAL TEN;Nl;0;L; 0058;;;10;N;;;;2179; 216A;ROMAN NUMERAL ELEVEN;Nl;0;L; 0058 0049;;;11;N;;;;217A; 216B;ROMAN NUMERAL TWELVE;Nl;0;L; 0058 0049 0049;;;12;N;;;;217B; 216C;ROMAN NUMERAL FIFTY;Nl;0;L; 004C;;;50;N;;;;217C; 216D;ROMAN NUMERAL ONE HUNDRED;Nl;0;L; 0043;;;100;N;;;;217D; 216E;ROMAN NUMERAL FIVE HUNDRED;Nl;0;L; 0044;;;500;N;;;;217E; 216F;ROMAN NUMERAL ONE THOUSAND;Nl;0;L; 004D;;;1000;N;;;;217F; 2170;SMALL ROMAN NUMERAL ONE;Nl;0;L; 0069;;;1;N;;;2160;;2160 2171;SMALL ROMAN NUMERAL TWO;Nl;0;L; 0069 0069;;;2;N;;;2161;;2161 2172;SMALL ROMAN NUMERAL THREE;Nl;0;L; 0069 0069 0069;;;3;N;;;2162;;2162 2173;SMALL ROMAN NUMERAL FOUR;Nl;0;L; 0069 0076;;;4;N;;;2163;;2163 2174;SMALL ROMAN NUMERAL FIVE;Nl;0;L; 0076;;;5;N;;;2164;;2164 2175;SMALL ROMAN NUMERAL SIX;Nl;0;L; 0076 0069;;;6;N;;;2165;;2165 2176;SMALL ROMAN NUMERAL SEVEN;Nl;0;L; 0076 0069 0069;;;7;N;;;2166;;2166 2177;SMALL ROMAN NUMERAL EIGHT;Nl;0;L; 0076 0069 0069 0069;;;8;N;;;2167;;2167 2178;SMALL ROMAN NUMERAL NINE;Nl;0;L; 0069 0078;;;9;N;;;2168;;2168 2179;SMALL ROMAN NUMERAL TEN;Nl;0;L; 0078;;;10;N;;;2169;;2169 217A;SMALL ROMAN NUMERAL ELEVEN;Nl;0;L; 0078 0069;;;11;N;;;216A;;216A 217B;SMALL ROMAN NUMERAL TWELVE;Nl;0;L; 0078 0069 0069;;;12;N;;;216B;;216B 217C;SMALL ROMAN NUMERAL FIFTY;Nl;0;L; 006C;;;50;N;;;216C;;216C 217D;SMALL ROMAN NUMERAL ONE HUNDRED;Nl;0;L; 0063;;;100;N;;;216D;;216D 217E;SMALL ROMAN NUMERAL FIVE HUNDRED;Nl;0;L; 0064;;;500;N;;;216E;;216E 217F;SMALL ROMAN NUMERAL ONE THOUSAND;Nl;0;L; 006D;;;1000;N;;;216F;;216F 2180;ROMAN NUMERAL ONE THOUSAND C D;Nl;0;L;;;;1000;N;;;;; 2181;ROMAN NUMERAL FIVE THOUSAND;Nl;0;L;;;;5000;N;;;;; 2182;ROMAN NUMERAL TEN THOUSAND;Nl;0;L;;;;10000;N;;;;; 2183;ROMAN NUMERAL REVERSED ONE HUNDRED;Nl;0;L;;;;;N;;;;; 2190;LEFTWARDS ARROW;Sm;0;ON;;;;;N;LEFT ARROW;;;; 2191;UPWARDS ARROW;Sm;0;ON;;;;;N;UP ARROW;;;; 2192;RIGHTWARDS ARROW;Sm;0;ON;;;;;N;RIGHT ARROW;;;; 2193;DOWNWARDS ARROW;Sm;0;ON;;;;;N;DOWN ARROW;;;; 2194;LEFT RIGHT ARROW;Sm;0;ON;;;;;N;;;;; 2195;UP DOWN ARROW;So;0;ON;;;;;N;;;;; 2196;NORTH WEST ARROW;So;0;ON;;;;;N;UPPER LEFT ARROW;;;; 2197;NORTH EAST ARROW;So;0;ON;;;;;N;UPPER RIGHT ARROW;;;; 2198;SOUTH EAST ARROW;So;0;ON;;;;;N;LOWER RIGHT ARROW;;;; 2199;SOUTH WEST ARROW;So;0;ON;;;;;N;LOWER LEFT ARROW;;;; 219A;LEFTWARDS ARROW WITH STROKE;Sm;0;ON;2190 0338;;;;N;LEFT ARROW WITH STROKE;;;; 219B;RIGHTWARDS ARROW WITH STROKE;Sm;0;ON;2192 0338;;;;N;RIGHT ARROW WITH STROKE;;;; 219C;LEFTWARDS WAVE ARROW;So;0;ON;;;;;N;LEFT WAVE ARROW;;;; 219D;RIGHTWARDS WAVE ARROW;So;0;ON;;;;;N;RIGHT WAVE ARROW;;;; 219E;LEFTWARDS TWO HEADED ARROW;So;0;ON;;;;;N;LEFT TWO HEADED ARROW;;;; 219F;UPWARDS TWO HEADED ARROW;So;0;ON;;;;;N;UP TWO HEADED ARROW;;;; 21A0;RIGHTWARDS TWO HEADED ARROW;Sm;0;ON;;;;;N;RIGHT TWO HEADED ARROW;;;; 21A1;DOWNWARDS TWO HEADED ARROW;So;0;ON;;;;;N;DOWN TWO HEADED ARROW;;;; 21A2;LEFTWARDS ARROW WITH TAIL;So;0;ON;;;;;N;LEFT ARROW WITH TAIL;;;; 21A3;RIGHTWARDS ARROW WITH TAIL;Sm;0;ON;;;;;N;RIGHT ARROW WITH TAIL;;;; 21A4;LEFTWARDS ARROW FROM BAR;So;0;ON;;;;;N;LEFT ARROW FROM BAR;;;; 21A5;UPWARDS ARROW FROM BAR;So;0;ON;;;;;N;UP ARROW FROM BAR;;;; 21A6;RIGHTWARDS ARROW FROM BAR;Sm;0;ON;;;;;N;RIGHT ARROW FROM BAR;;;; 21A7;DOWNWARDS ARROW FROM BAR;So;0;ON;;;;;N;DOWN ARROW FROM BAR;;;; 21A8;UP DOWN ARROW WITH BASE;So;0;ON;;;;;N;;;;; 21A9;LEFTWARDS ARROW WITH HOOK;So;0;ON;;;;;N;LEFT ARROW WITH HOOK;;;; 21AA;RIGHTWARDS ARROW WITH HOOK;So;0;ON;;;;;N;RIGHT ARROW WITH HOOK;;;; 21AB;LEFTWARDS ARROW WITH LOOP;So;0;ON;;;;;N;LEFT ARROW WITH LOOP;;;; 21AC;RIGHTWARDS ARROW WITH LOOP;So;0;ON;;;;;N;RIGHT ARROW WITH LOOP;;;; 21AD;LEFT RIGHT WAVE ARROW;So;0;ON;;;;;N;;;;; 21AE;LEFT RIGHT ARROW WITH STROKE;Sm;0;ON;2194 0338;;;;N;;;;; 21AF;DOWNWARDS ZIGZAG ARROW;So;0;ON;;;;;N;DOWN ZIGZAG ARROW;;;; 21B0;UPWARDS ARROW WITH TIP LEFTWARDS;So;0;ON;;;;;N;UP ARROW WITH TIP LEFT;;;; 21B1;UPWARDS ARROW WITH TIP RIGHTWARDS;So;0;ON;;;;;N;UP ARROW WITH TIP RIGHT;;;; 21B2;DOWNWARDS ARROW WITH TIP LEFTWARDS;So;0;ON;;;;;N;DOWN ARROW WITH TIP LEFT;;;; 21B3;DOWNWARDS ARROW WITH TIP RIGHTWARDS;So;0;ON;;;;;N;DOWN ARROW WITH TIP RIGHT;;;; 21B4;RIGHTWARDS ARROW WITH CORNER DOWNWARDS;So;0;ON;;;;;N;RIGHT ARROW WITH CORNER DOWN;;;; 21B5;DOWNWARDS ARROW WITH CORNER LEFTWARDS;So;0;ON;;;;;N;DOWN ARROW WITH CORNER LEFT;;;; 21B6;ANTICLOCKWISE TOP SEMICIRCLE ARROW;So;0;ON;;;;;N;;;;; 21B7;CLOCKWISE TOP SEMICIRCLE ARROW;So;0;ON;;;;;N;;;;; 21B8;NORTH WEST ARROW TO LONG BAR;So;0;ON;;;;;N;UPPER LEFT ARROW TO LONG BAR;;;; 21B9;LEFTWARDS ARROW TO BAR OVER RIGHTWARDS ARROW TO BAR;So;0;ON;;;;;N;LEFT ARROW TO BAR OVER RIGHT ARROW TO BAR;;;; 21BA;ANTICLOCKWISE OPEN CIRCLE ARROW;So;0;ON;;;;;N;;;;; 21BB;CLOCKWISE OPEN CIRCLE ARROW;So;0;ON;;;;;N;;;;; 21BC;LEFTWARDS HARPOON WITH BARB UPWARDS;So;0;ON;;;;;N;LEFT HARPOON WITH BARB UP;;;; 21BD;LEFTWARDS HARPOON WITH BARB DOWNWARDS;So;0;ON;;;;;N;LEFT HARPOON WITH BARB DOWN;;;; 21BE;UPWARDS HARPOON WITH BARB RIGHTWARDS;So;0;ON;;;;;N;UP HARPOON WITH BARB RIGHT;;;; 21BF;UPWARDS HARPOON WITH BARB LEFTWARDS;So;0;ON;;;;;N;UP HARPOON WITH BARB LEFT;;;; 21C0;RIGHTWARDS HARPOON WITH BARB UPWARDS;So;0;ON;;;;;N;RIGHT HARPOON WITH BARB UP;;;; 21C1;RIGHTWARDS HARPOON WITH BARB DOWNWARDS;So;0;ON;;;;;N;RIGHT HARPOON WITH BARB DOWN;;;; 21C2;DOWNWARDS HARPOON WITH BARB RIGHTWARDS;So;0;ON;;;;;N;DOWN HARPOON WITH BARB RIGHT;;;; 21C3;DOWNWARDS HARPOON WITH BARB LEFTWARDS;So;0;ON;;;;;N;DOWN HARPOON WITH BARB LEFT;;;; 21C4;RIGHTWARDS ARROW OVER LEFTWARDS ARROW;So;0;ON;;;;;N;RIGHT ARROW OVER LEFT ARROW;;;; 21C5;UPWARDS ARROW LEFTWARDS OF DOWNWARDS ARROW;So;0;ON;;;;;N;UP ARROW LEFT OF DOWN ARROW;;;; 21C6;LEFTWARDS ARROW OVER RIGHTWARDS ARROW;So;0;ON;;;;;N;LEFT ARROW OVER RIGHT ARROW;;;; 21C7;LEFTWARDS PAIRED ARROWS;So;0;ON;;;;;N;LEFT PAIRED ARROWS;;;; 21C8;UPWARDS PAIRED ARROWS;So;0;ON;;;;;N;UP PAIRED ARROWS;;;; 21C9;RIGHTWARDS PAIRED ARROWS;So;0;ON;;;;;N;RIGHT PAIRED ARROWS;;;; 21CA;DOWNWARDS PAIRED ARROWS;So;0;ON;;;;;N;DOWN PAIRED ARROWS;;;; 21CB;LEFTWARDS HARPOON OVER RIGHTWARDS HARPOON;So;0;ON;;;;;N;LEFT HARPOON OVER RIGHT HARPOON;;;; 21CC;RIGHTWARDS HARPOON OVER LEFTWARDS HARPOON;So;0;ON;;;;;N;RIGHT HARPOON OVER LEFT HARPOON;;;; 21CD;LEFTWARDS DOUBLE ARROW WITH STROKE;So;0;ON;21D0 0338;;;;N;LEFT DOUBLE ARROW WITH STROKE;;;; 21CE;LEFT RIGHT DOUBLE ARROW WITH STROKE;Sm;0;ON;21D4 0338;;;;N;;;;; 21CF;RIGHTWARDS DOUBLE ARROW WITH STROKE;Sm;0;ON;21D2 0338;;;;N;RIGHT DOUBLE ARROW WITH STROKE;;;; 21D0;LEFTWARDS DOUBLE ARROW;So;0;ON;;;;;N;LEFT DOUBLE ARROW;;;; 21D1;UPWARDS DOUBLE ARROW;So;0;ON;;;;;N;UP DOUBLE ARROW;;;; 21D2;RIGHTWARDS DOUBLE ARROW;Sm;0;ON;;;;;N;RIGHT DOUBLE ARROW;;;; 21D3;DOWNWARDS DOUBLE ARROW;So;0;ON;;;;;N;DOWN DOUBLE ARROW;;;; 21D4;LEFT RIGHT DOUBLE ARROW;Sm;0;ON;;;;;N;;;;; 21D5;UP DOWN DOUBLE ARROW;So;0;ON;;;;;N;;;;; 21D6;NORTH WEST DOUBLE ARROW;So;0;ON;;;;;N;UPPER LEFT DOUBLE ARROW;;;; 21D7;NORTH EAST DOUBLE ARROW;So;0;ON;;;;;N;UPPER RIGHT DOUBLE ARROW;;;; 21D8;SOUTH EAST DOUBLE ARROW;So;0;ON;;;;;N;LOWER RIGHT DOUBLE ARROW;;;; 21D9;SOUTH WEST DOUBLE ARROW;So;0;ON;;;;;N;LOWER LEFT DOUBLE ARROW;;;; 21DA;LEFTWARDS TRIPLE ARROW;So;0;ON;;;;;N;LEFT TRIPLE ARROW;;;; 21DB;RIGHTWARDS TRIPLE ARROW;So;0;ON;;;;;N;RIGHT TRIPLE ARROW;;;; 21DC;LEFTWARDS SQUIGGLE ARROW;So;0;ON;;;;;N;LEFT SQUIGGLE ARROW;;;; 21DD;RIGHTWARDS SQUIGGLE ARROW;So;0;ON;;;;;N;RIGHT SQUIGGLE ARROW;;;; 21DE;UPWARDS ARROW WITH DOUBLE STROKE;So;0;ON;;;;;N;UP ARROW WITH DOUBLE STROKE;;;; 21DF;DOWNWARDS ARROW WITH DOUBLE STROKE;So;0;ON;;;;;N;DOWN ARROW WITH DOUBLE STROKE;;;; 21E0;LEFTWARDS DASHED ARROW;So;0;ON;;;;;N;LEFT DASHED ARROW;;;; 21E1;UPWARDS DASHED ARROW;So;0;ON;;;;;N;UP DASHED ARROW;;;; 21E2;RIGHTWARDS DASHED ARROW;So;0;ON;;;;;N;RIGHT DASHED ARROW;;;; 21E3;DOWNWARDS DASHED ARROW;So;0;ON;;;;;N;DOWN DASHED ARROW;;;; 21E4;LEFTWARDS ARROW TO BAR;So;0;ON;;;;;N;LEFT ARROW TO BAR;;;; 21E5;RIGHTWARDS ARROW TO BAR;So;0;ON;;;;;N;RIGHT ARROW TO BAR;;;; 21E6;LEFTWARDS WHITE ARROW;So;0;ON;;;;;N;WHITE LEFT ARROW;;;; 21E7;UPWARDS WHITE ARROW;So;0;ON;;;;;N;WHITE UP ARROW;;;; 21E8;RIGHTWARDS WHITE ARROW;So;0;ON;;;;;N;WHITE RIGHT ARROW;;;; 21E9;DOWNWARDS WHITE ARROW;So;0;ON;;;;;N;WHITE DOWN ARROW;;;; 21EA;UPWARDS WHITE ARROW FROM BAR;So;0;ON;;;;;N;WHITE UP ARROW FROM BAR;;;; 21EB;UPWARDS WHITE ARROW ON PEDESTAL;So;0;ON;;;;;N;;;;; 21EC;UPWARDS WHITE ARROW ON PEDESTAL WITH HORIZONTAL BAR;So;0;ON;;;;;N;;;;; 21ED;UPWARDS WHITE ARROW ON PEDESTAL WITH VERTICAL BAR;So;0;ON;;;;;N;;;;; 21EE;UPWARDS WHITE DOUBLE ARROW;So;0;ON;;;;;N;;;;; 21EF;UPWARDS WHITE DOUBLE ARROW ON PEDESTAL;So;0;ON;;;;;N;;;;; 21F0;RIGHTWARDS WHITE ARROW FROM WALL;So;0;ON;;;;;N;;;;; 21F1;NORTH WEST ARROW TO CORNER;So;0;ON;;;;;N;;;;; 21F2;SOUTH EAST ARROW TO CORNER;So;0;ON;;;;;N;;;;; 21F3;UP DOWN WHITE ARROW;So;0;ON;;;;;N;;;;; 2200;FOR ALL;Sm;0;ON;;;;;N;;;;; 2201;COMPLEMENT;Sm;0;ON;;;;;Y;;;;; 2202;PARTIAL DIFFERENTIAL;Sm;0;ON;;;;;Y;;;;; 2203;THERE EXISTS;Sm;0;ON;;;;;Y;;;;; 2204;THERE DOES NOT EXIST;Sm;0;ON;2203 0338;;;;Y;;;;; 2205;EMPTY SET;Sm;0;ON;;;;;N;;;;; 2206;INCREMENT;Sm;0;ON;;;;;N;;;;; 2207;NABLA;Sm;0;ON;;;;;N;;;;; 2208;ELEMENT OF;Sm;0;ON;;;;;Y;;;;; 2209;NOT AN ELEMENT OF;Sm;0;ON;2208 0338;;;;Y;;;;; 220A;SMALL ELEMENT OF;Sm;0;ON;;;;;Y;;;;; 220B;CONTAINS AS MEMBER;Sm;0;ON;;;;;Y;;;;; 220C;DOES NOT CONTAIN AS MEMBER;Sm;0;ON;220B 0338;;;;Y;;;;; 220D;SMALL CONTAINS AS MEMBER;Sm;0;ON;;;;;Y;;;;; 220E;END OF PROOF;Sm;0;ON;;;;;N;;;;; 220F;N-ARY PRODUCT;Sm;0;ON;;;;;N;;;;; 2210;N-ARY COPRODUCT;Sm;0;ON;;;;;N;;;;; 2211;N-ARY SUMMATION;Sm;0;ON;;;;;Y;;;;; 2212;MINUS SIGN;Sm;0;ET;;;;;N;;;;; 2213;MINUS-OR-PLUS SIGN;Sm;0;ET;;;;;N;;;;; 2214;DOT PLUS;Sm;0;ON;;;;;N;;;;; 2215;DIVISION SLASH;Sm;0;ON;;;;;Y;;;;; 2216;SET MINUS;Sm;0;ON;;;;;Y;;;;; 2217;ASTERISK OPERATOR;Sm;0;ON;;;;;N;;;;; 2218;RING OPERATOR;Sm;0;ON;;;;;N;;;;; 2219;BULLET OPERATOR;Sm;0;ON;;;;;N;;;;; 221A;SQUARE ROOT;Sm;0;ON;;;;;Y;;;;; 221B;CUBE ROOT;Sm;0;ON;;;;;Y;;;;; 221C;FOURTH ROOT;Sm;0;ON;;;;;Y;;;;; 221D;PROPORTIONAL TO;Sm;0;ON;;;;;Y;;;;; 221E;INFINITY;Sm;0;ON;;;;;N;;;;; 221F;RIGHT ANGLE;Sm;0;ON;;;;;Y;;;;; 2220;ANGLE;Sm;0;ON;;;;;Y;;;;; 2221;MEASURED ANGLE;Sm;0;ON;;;;;Y;;;;; 2222;SPHERICAL ANGLE;Sm;0;ON;;;;;Y;;;;; 2223;DIVIDES;Sm;0;ON;;;;;N;;;;; 2224;DOES NOT DIVIDE;Sm;0;ON;2223 0338;;;;Y;;;;; 2225;PARALLEL TO;Sm;0;ON;;;;;N;;;;; 2226;NOT PARALLEL TO;Sm;0;ON;2225 0338;;;;Y;;;;; 2227;LOGICAL AND;Sm;0;ON;;;;;N;;;;; 2228;LOGICAL OR;Sm;0;ON;;;;;N;;;;; 2229;INTERSECTION;Sm;0;ON;;;;;N;;;;; 222A;UNION;Sm;0;ON;;;;;N;;;;; 222B;INTEGRAL;Sm;0;ON;;;;;Y;;;;; 222C;DOUBLE INTEGRAL;Sm;0;ON; 222B 222B;;;;Y;;;;; 222D;TRIPLE INTEGRAL;Sm;0;ON; 222B 222B 222B;;;;Y;;;;; 222E;CONTOUR INTEGRAL;Sm;0;ON;;;;;Y;;;;; 222F;SURFACE INTEGRAL;Sm;0;ON; 222E 222E;;;;Y;;;;; 2230;VOLUME INTEGRAL;Sm;0;ON; 222E 222E 222E;;;;Y;;;;; 2231;CLOCKWISE INTEGRAL;Sm;0;ON;;;;;Y;;;;; 2232;CLOCKWISE CONTOUR INTEGRAL;Sm;0;ON;;;;;Y;;;;; 2233;ANTICLOCKWISE CONTOUR INTEGRAL;Sm;0;ON;;;;;Y;;;;; 2234;THEREFORE;Sm;0;ON;;;;;N;;;;; 2235;BECAUSE;Sm;0;ON;;;;;N;;;;; 2236;RATIO;Sm;0;ON;;;;;N;;;;; 2237;PROPORTION;Sm;0;ON;;;;;N;;;;; 2238;DOT MINUS;Sm;0;ON;;;;;N;;;;; 2239;EXCESS;Sm;0;ON;;;;;Y;;;;; 223A;GEOMETRIC PROPORTION;Sm;0;ON;;;;;N;;;;; 223B;HOMOTHETIC;Sm;0;ON;;;;;Y;;;;; 223C;TILDE OPERATOR;Sm;0;ON;;;;;Y;;;;; 223D;REVERSED TILDE;Sm;0;ON;;;;;Y;;lazy S;;; 223E;INVERTED LAZY S;Sm;0;ON;;;;;Y;;;;; 223F;SINE WAVE;Sm;0;ON;;;;;Y;;;;; 2240;WREATH PRODUCT;Sm;0;ON;;;;;Y;;;;; 2241;NOT TILDE;Sm;0;ON;223C 0338;;;;Y;;;;; 2242;MINUS TILDE;Sm;0;ON;;;;;Y;;;;; 2243;ASYMPTOTICALLY EQUAL TO;Sm;0;ON;;;;;Y;;;;; 2244;NOT ASYMPTOTICALLY EQUAL TO;Sm;0;ON;2243 0338;;;;Y;;;;; 2245;APPROXIMATELY EQUAL TO;Sm;0;ON;;;;;Y;;;;; 2246;APPROXIMATELY BUT NOT ACTUALLY EQUAL TO;Sm;0;ON;;;;;Y;;;;; 2247;NEITHER APPROXIMATELY NOR ACTUALLY EQUAL TO;Sm;0;ON;2245 0338;;;;Y;;;;; 2248;ALMOST EQUAL TO;Sm;0;ON;;;;;Y;;;;; 2249;NOT ALMOST EQUAL TO;Sm;0;ON;2248 0338;;;;Y;;;;; 224A;ALMOST EQUAL OR EQUAL TO;Sm;0;ON;;;;;Y;;;;; 224B;TRIPLE TILDE;Sm;0;ON;;;;;Y;;;;; 224C;ALL EQUAL TO;Sm;0;ON;;;;;Y;;;;; 224D;EQUIVALENT TO;Sm;0;ON;;;;;N;;;;; 224E;GEOMETRICALLY EQUIVALENT TO;Sm;0;ON;;;;;N;;;;; 224F;DIFFERENCE BETWEEN;Sm;0;ON;;;;;N;;;;; 2250;APPROACHES THE LIMIT;Sm;0;ON;;;;;N;;;;; 2251;GEOMETRICALLY EQUAL TO;Sm;0;ON;;;;;N;;;;; 2252;APPROXIMATELY EQUAL TO OR THE IMAGE OF;Sm;0;ON;;;;;Y;;;;; 2253;IMAGE OF OR APPROXIMATELY EQUAL TO;Sm;0;ON;;;;;Y;;;;; 2254;COLON EQUALS;Sm;0;ON;;;;;Y;COLON EQUAL;;;; 2255;EQUALS COLON;Sm;0;ON;;;;;Y;EQUAL COLON;;;; 2256;RING IN EQUAL TO;Sm;0;ON;;;;;N;;;;; 2257;RING EQUAL TO;Sm;0;ON;;;;;N;;;;; 2258;CORRESPONDS TO;Sm;0;ON;;;;;N;;;;; 2259;ESTIMATES;Sm;0;ON;;;;;N;;;;; 225A;EQUIANGULAR TO;Sm;0;ON;;;;;N;;;;; 225B;STAR EQUALS;Sm;0;ON;;;;;N;;;;; 225C;DELTA EQUAL TO;Sm;0;ON;;;;;N;;;;; 225D;EQUAL TO BY DEFINITION;Sm;0;ON;;;;;N;;;;; 225E;MEASURED BY;Sm;0;ON;;;;;N;;;;; 225F;QUESTIONED EQUAL TO;Sm;0;ON;;;;;Y;;;;; 2260;NOT EQUAL TO;Sm;0;ON;003D 0338;;;;Y;;;;; 2261;IDENTICAL TO;Sm;0;ON;;;;;N;;;;; 2262;NOT IDENTICAL TO;Sm;0;ON;2261 0338;;;;Y;;;;; 2263;STRICTLY EQUIVALENT TO;Sm;0;ON;;;;;N;;;;; 2264;LESS-THAN OR EQUAL TO;Sm;0;ON;;;;;Y;LESS THAN OR EQUAL TO;;;; 2265;GREATER-THAN OR EQUAL TO;Sm;0;ON;;;;;Y;GREATER THAN OR EQUAL TO;;;; 2266;LESS-THAN OVER EQUAL TO;Sm;0;ON;;;;;Y;LESS THAN OVER EQUAL TO;;;; 2267;GREATER-THAN OVER EQUAL TO;Sm;0;ON;;;;;Y;GREATER THAN OVER EQUAL TO;;;; 2268;LESS-THAN BUT NOT EQUAL TO;Sm;0;ON;;;;;Y;LESS THAN BUT NOT EQUAL TO;;;; 2269;GREATER-THAN BUT NOT EQUAL TO;Sm;0;ON;;;;;Y;GREATER THAN BUT NOT EQUAL TO;;;; 226A;MUCH LESS-THAN;Sm;0;ON;;;;;Y;MUCH LESS THAN;;;; 226B;MUCH GREATER-THAN;Sm;0;ON;;;;;Y;MUCH GREATER THAN;;;; 226C;BETWEEN;Sm;0;ON;;;;;N;;;;; 226D;NOT EQUIVALENT TO;Sm;0;ON;224D 0338;;;;N;;;;; 226E;NOT LESS-THAN;Sm;0;ON;003C 0338;;;;Y;NOT LESS THAN;;;; 226F;NOT GREATER-THAN;Sm;0;ON;003E 0338;;;;Y;NOT GREATER THAN;;;; 2270;NEITHER LESS-THAN NOR EQUAL TO;Sm;0;ON;2264 0338;;;;Y;NEITHER LESS THAN NOR EQUAL TO;;;; 2271;NEITHER GREATER-THAN NOR EQUAL TO;Sm;0;ON;2265 0338;;;;Y;NEITHER GREATER THAN NOR EQUAL TO;;;; 2272;LESS-THAN OR EQUIVALENT TO;Sm;0;ON;;;;;Y;LESS THAN OR EQUIVALENT TO;;;; 2273;GREATER-THAN OR EQUIVALENT TO;Sm;0;ON;;;;;Y;GREATER THAN OR EQUIVALENT TO;;;; 2274;NEITHER LESS-THAN NOR EQUIVALENT TO;Sm;0;ON;2272 0338;;;;Y;NEITHER LESS THAN NOR EQUIVALENT TO;;;; 2275;NEITHER GREATER-THAN NOR EQUIVALENT TO;Sm;0;ON;2273 0338;;;;Y;NEITHER GREATER THAN NOR EQUIVALENT TO;;;; 2276;LESS-THAN OR GREATER-THAN;Sm;0;ON;;;;;Y;LESS THAN OR GREATER THAN;;;; 2277;GREATER-THAN OR LESS-THAN;Sm;0;ON;;;;;Y;GREATER THAN OR LESS THAN;;;; 2278;NEITHER LESS-THAN NOR GREATER-THAN;Sm;0;ON;2276 0338;;;;Y;NEITHER LESS THAN NOR GREATER THAN;;;; 2279;NEITHER GREATER-THAN NOR LESS-THAN;Sm;0;ON;2277 0338;;;;Y;NEITHER GREATER THAN NOR LESS THAN;;;; 227A;PRECEDES;Sm;0;ON;;;;;Y;;;;; 227B;SUCCEEDS;Sm;0;ON;;;;;Y;;;;; 227C;PRECEDES OR EQUAL TO;Sm;0;ON;;;;;Y;;;;; 227D;SUCCEEDS OR EQUAL TO;Sm;0;ON;;;;;Y;;;;; 227E;PRECEDES OR EQUIVALENT TO;Sm;0;ON;;;;;Y;;;;; 227F;SUCCEEDS OR EQUIVALENT TO;Sm;0;ON;;;;;Y;;;;; 2280;DOES NOT PRECEDE;Sm;0;ON;227A 0338;;;;Y;;;;; 2281;DOES NOT SUCCEED;Sm;0;ON;227B 0338;;;;Y;;;;; 2282;SUBSET OF;Sm;0;ON;;;;;Y;;;;; 2283;SUPERSET OF;Sm;0;ON;;;;;Y;;;;; 2284;NOT A SUBSET OF;Sm;0;ON;2282 0338;;;;Y;;;;; 2285;NOT A SUPERSET OF;Sm;0;ON;2283 0338;;;;Y;;;;; 2286;SUBSET OF OR EQUAL TO;Sm;0;ON;;;;;Y;;;;; 2287;SUPERSET OF OR EQUAL TO;Sm;0;ON;;;;;Y;;;;; 2288;NEITHER A SUBSET OF NOR EQUAL TO;Sm;0;ON;2286 0338;;;;Y;;;;; 2289;NEITHER A SUPERSET OF NOR EQUAL TO;Sm;0;ON;2287 0338;;;;Y;;;;; 228A;SUBSET OF WITH NOT EQUAL TO;Sm;0;ON;;;;;Y;SUBSET OF OR NOT EQUAL TO;;;; 228B;SUPERSET OF WITH NOT EQUAL TO;Sm;0;ON;;;;;Y;SUPERSET OF OR NOT EQUAL TO;;;; 228C;MULTISET;Sm;0;ON;;;;;Y;;;;; 228D;MULTISET MULTIPLICATION;Sm;0;ON;;;;;N;;;;; 228E;MULTISET UNION;Sm;0;ON;;;;;N;;;;; 228F;SQUARE IMAGE OF;Sm;0;ON;;;;;Y;;;;; 2290;SQUARE ORIGINAL OF;Sm;0;ON;;;;;Y;;;;; 2291;SQUARE IMAGE OF OR EQUAL TO;Sm;0;ON;;;;;Y;;;;; 2292;SQUARE ORIGINAL OF OR EQUAL TO;Sm;0;ON;;;;;Y;;;;; 2293;SQUARE CAP;Sm;0;ON;;;;;N;;;;; 2294;SQUARE CUP;Sm;0;ON;;;;;N;;;;; 2295;CIRCLED PLUS;Sm;0;ON;;;;;N;;;;; 2296;CIRCLED MINUS;Sm;0;ON;;;;;N;;;;; 2297;CIRCLED TIMES;Sm;0;ON;;;;;N;;;;; 2298;CIRCLED DIVISION SLASH;Sm;0;ON;;;;;Y;;;;; 2299;CIRCLED DOT OPERATOR;Sm;0;ON;;;;;N;;;;; 229A;CIRCLED RING OPERATOR;Sm;0;ON;;;;;N;;;;; 229B;CIRCLED ASTERISK OPERATOR;Sm;0;ON;;;;;N;;;;; 229C;CIRCLED EQUALS;Sm;0;ON;;;;;N;;;;; 229D;CIRCLED DASH;Sm;0;ON;;;;;N;;;;; 229E;SQUARED PLUS;Sm;0;ON;;;;;N;;;;; 229F;SQUARED MINUS;Sm;0;ON;;;;;N;;;;; 22A0;SQUARED TIMES;Sm;0;ON;;;;;N;;;;; 22A1;SQUARED DOT OPERATOR;Sm;0;ON;;;;;N;;;;; 22A2;RIGHT TACK;Sm;0;ON;;;;;Y;;;;; 22A3;LEFT TACK;Sm;0;ON;;;;;Y;;;;; 22A4;DOWN TACK;Sm;0;ON;;;;;N;;;;; 22A5;UP TACK;Sm;0;ON;;;;;N;;;;; 22A6;ASSERTION;Sm;0;ON;;;;;Y;;;;; 22A7;MODELS;Sm;0;ON;;;;;Y;;;;; 22A8;TRUE;Sm;0;ON;;;;;Y;;;;; 22A9;FORCES;Sm;0;ON;;;;;Y;;;;; 22AA;TRIPLE VERTICAL BAR RIGHT TURNSTILE;Sm;0;ON;;;;;Y;;;;; 22AB;DOUBLE VERTICAL BAR DOUBLE RIGHT TURNSTILE;Sm;0;ON;;;;;Y;;;;; 22AC;DOES NOT PROVE;Sm;0;ON;22A2 0338;;;;Y;;;;; 22AD;NOT TRUE;Sm;0;ON;22A8 0338;;;;Y;;;;; 22AE;DOES NOT FORCE;Sm;0;ON;22A9 0338;;;;Y;;;;; 22AF;NEGATED DOUBLE VERTICAL BAR DOUBLE RIGHT TURNSTILE;Sm;0;ON;22AB 0338;;;;Y;;;;; 22B0;PRECEDES UNDER RELATION;Sm;0;ON;;;;;Y;;;;; 22B1;SUCCEEDS UNDER RELATION;Sm;0;ON;;;;;Y;;;;; 22B2;NORMAL SUBGROUP OF;Sm;0;ON;;;;;Y;;;;; 22B3;CONTAINS AS NORMAL SUBGROUP;Sm;0;ON;;;;;Y;;;;; 22B4;NORMAL SUBGROUP OF OR EQUAL TO;Sm;0;ON;;;;;Y;;;;; 22B5;CONTAINS AS NORMAL SUBGROUP OR EQUAL TO;Sm;0;ON;;;;;Y;;;;; 22B6;ORIGINAL OF;Sm;0;ON;;;;;Y;;;;; 22B7;IMAGE OF;Sm;0;ON;;;;;Y;;;;; 22B8;MULTIMAP;Sm;0;ON;;;;;Y;;;;; 22B9;HERMITIAN CONJUGATE MATRIX;Sm;0;ON;;;;;N;;;;; 22BA;INTERCALATE;Sm;0;ON;;;;;N;;;;; 22BB;XOR;Sm;0;ON;;;;;N;;;;; 22BC;NAND;Sm;0;ON;;;;;N;;;;; 22BD;NOR;Sm;0;ON;;;;;N;;;;; 22BE;RIGHT ANGLE WITH ARC;Sm;0;ON;;;;;Y;;;;; 22BF;RIGHT TRIANGLE;Sm;0;ON;;;;;Y;;;;; 22C0;N-ARY LOGICAL AND;Sm;0;ON;;;;;N;;;;; 22C1;N-ARY LOGICAL OR;Sm;0;ON;;;;;N;;;;; 22C2;N-ARY INTERSECTION;Sm;0;ON;;;;;N;;;;; 22C3;N-ARY UNION;Sm;0;ON;;;;;N;;;;; 22C4;DIAMOND OPERATOR;Sm;0;ON;;;;;N;;;;; 22C5;DOT OPERATOR;Sm;0;ON;;;;;N;;;;; 22C6;STAR OPERATOR;Sm;0;ON;;;;;N;;;;; 22C7;DIVISION TIMES;Sm;0;ON;;;;;N;;;;; 22C8;BOWTIE;Sm;0;ON;;;;;N;;;;; 22C9;LEFT NORMAL FACTOR SEMIDIRECT PRODUCT;Sm;0;ON;;;;;Y;;;;; 22CA;RIGHT NORMAL FACTOR SEMIDIRECT PRODUCT;Sm;0;ON;;;;;Y;;;;; 22CB;LEFT SEMIDIRECT PRODUCT;Sm;0;ON;;;;;Y;;;;; 22CC;RIGHT SEMIDIRECT PRODUCT;Sm;0;ON;;;;;Y;;;;; 22CD;REVERSED TILDE EQUALS;Sm;0;ON;;;;;Y;;;;; 22CE;CURLY LOGICAL OR;Sm;0;ON;;;;;N;;;;; 22CF;CURLY LOGICAL AND;Sm;0;ON;;;;;N;;;;; 22D0;DOUBLE SUBSET;Sm;0;ON;;;;;Y;;;;; 22D1;DOUBLE SUPERSET;Sm;0;ON;;;;;Y;;;;; 22D2;DOUBLE INTERSECTION;Sm;0;ON;;;;;N;;;;; 22D3;DOUBLE UNION;Sm;0;ON;;;;;N;;;;; 22D4;PITCHFORK;Sm;0;ON;;;;;N;;;;; 22D5;EQUAL AND PARALLEL TO;Sm;0;ON;;;;;N;;;;; 22D6;LESS-THAN WITH DOT;Sm;0;ON;;;;;Y;LESS THAN WITH DOT;;;; 22D7;GREATER-THAN WITH DOT;Sm;0;ON;;;;;Y;GREATER THAN WITH DOT;;;; 22D8;VERY MUCH LESS-THAN;Sm;0;ON;;;;;Y;VERY MUCH LESS THAN;;;; 22D9;VERY MUCH GREATER-THAN;Sm;0;ON;;;;;Y;VERY MUCH GREATER THAN;;;; 22DA;LESS-THAN EQUAL TO OR GREATER-THAN;Sm;0;ON;;;;;Y;LESS THAN EQUAL TO OR GREATER THAN;;;; 22DB;GREATER-THAN EQUAL TO OR LESS-THAN;Sm;0;ON;;;;;Y;GREATER THAN EQUAL TO OR LESS THAN;;;; 22DC;EQUAL TO OR LESS-THAN;Sm;0;ON;;;;;Y;EQUAL TO OR LESS THAN;;;; 22DD;EQUAL TO OR GREATER-THAN;Sm;0;ON;;;;;Y;EQUAL TO OR GREATER THAN;;;; 22DE;EQUAL TO OR PRECEDES;Sm;0;ON;;;;;Y;;;;; 22DF;EQUAL TO OR SUCCEEDS;Sm;0;ON;;;;;Y;;;;; 22E0;DOES NOT PRECEDE OR EQUAL;Sm;0;ON;227C 0338;;;;Y;;;;; 22E1;DOES NOT SUCCEED OR EQUAL;Sm;0;ON;227D 0338;;;;Y;;;;; 22E2;NOT SQUARE IMAGE OF OR EQUAL TO;Sm;0;ON;2291 0338;;;;Y;;;;; 22E3;NOT SQUARE ORIGINAL OF OR EQUAL TO;Sm;0;ON;2292 0338;;;;Y;;;;; 22E4;SQUARE IMAGE OF OR NOT EQUAL TO;Sm;0;ON;;;;;Y;;;;; 22E5;SQUARE ORIGINAL OF OR NOT EQUAL TO;Sm;0;ON;;;;;Y;;;;; 22E6;LESS-THAN BUT NOT EQUIVALENT TO;Sm;0;ON;;;;;Y;LESS THAN BUT NOT EQUIVALENT TO;;;; 22E7;GREATER-THAN BUT NOT EQUIVALENT TO;Sm;0;ON;;;;;Y;GREATER THAN BUT NOT EQUIVALENT TO;;;; 22E8;PRECEDES BUT NOT EQUIVALENT TO;Sm;0;ON;;;;;Y;;;;; 22E9;SUCCEEDS BUT NOT EQUIVALENT TO;Sm;0;ON;;;;;Y;;;;; 22EA;NOT NORMAL SUBGROUP OF;Sm;0;ON;22B2 0338;;;;Y;;;;; 22EB;DOES NOT CONTAIN AS NORMAL SUBGROUP;Sm;0;ON;22B3 0338;;;;Y;;;;; 22EC;NOT NORMAL SUBGROUP OF OR EQUAL TO;Sm;0;ON;22B4 0338;;;;Y;;;;; 22ED;DOES NOT CONTAIN AS NORMAL SUBGROUP OR EQUAL;Sm;0;ON;22B5 0338;;;;Y;;;;; 22EE;VERTICAL ELLIPSIS;Sm;0;ON;;;;;N;;;;; 22EF;MIDLINE HORIZONTAL ELLIPSIS;Sm;0;ON;;;;;N;;;;; 22F0;UP RIGHT DIAGONAL ELLIPSIS;Sm;0;ON;;;;;Y;;;;; 22F1;DOWN RIGHT DIAGONAL ELLIPSIS;Sm;0;ON;;;;;Y;;;;; 2300;DIAMETER SIGN;So;0;ON;;;;;N;;;;; 2301;ELECTRIC ARROW;So;0;ON;;;;;N;;;;; 2302;HOUSE;So;0;ON;;;;;N;;;;; 2303;UP ARROWHEAD;So;0;ON;;;;;N;;;;; 2304;DOWN ARROWHEAD;So;0;ON;;;;;N;;;;; 2305;PROJECTIVE;So;0;ON;;;;;N;;;;; 2306;PERSPECTIVE;So;0;ON;;;;;N;;;;; 2307;WAVY LINE;So;0;ON;;;;;N;;;;; 2308;LEFT CEILING;Sm;0;ON;;;;;Y;;;;; 2309;RIGHT CEILING;Sm;0;ON;;;;;Y;;;;; 230A;LEFT FLOOR;Sm;0;ON;;;;;Y;;;;; 230B;RIGHT FLOOR;Sm;0;ON;;;;;Y;;;;; 230C;BOTTOM RIGHT CROP;So;0;ON;;;;;N;;;;; 230D;BOTTOM LEFT CROP;So;0;ON;;;;;N;;;;; 230E;TOP RIGHT CROP;So;0;ON;;;;;N;;;;; 230F;TOP LEFT CROP;So;0;ON;;;;;N;;;;; 2310;REVERSED NOT SIGN;So;0;ON;;;;;N;;;;; 2311;SQUARE LOZENGE;So;0;ON;;;;;N;;;;; 2312;ARC;So;0;ON;;;;;N;;;;; 2313;SEGMENT;So;0;ON;;;;;N;;;;; 2314;SECTOR;So;0;ON;;;;;N;;;;; 2315;TELEPHONE RECORDER;So;0;ON;;;;;N;;;;; 2316;POSITION INDICATOR;So;0;ON;;;;;N;;;;; 2317;VIEWDATA SQUARE;So;0;ON;;;;;N;;;;; 2318;PLACE OF INTEREST SIGN;So;0;ON;;;;;N;COMMAND KEY;;;; 2319;TURNED NOT SIGN;So;0;ON;;;;;N;;;;; 231A;WATCH;So;0;ON;;;;;N;;;;; 231B;HOURGLASS;So;0;ON;;;;;N;;;;; 231C;TOP LEFT CORNER;So;0;ON;;;;;N;;;;; 231D;TOP RIGHT CORNER;So;0;ON;;;;;N;;;;; 231E;BOTTOM LEFT CORNER;So;0;ON;;;;;N;;;;; 231F;BOTTOM RIGHT CORNER;So;0;ON;;;;;N;;;;; 2320;TOP HALF INTEGRAL;Sm;0;ON;;;;;Y;;;;; 2321;BOTTOM HALF INTEGRAL;Sm;0;ON;;;;;Y;;;;; 2322;FROWN;So;0;ON;;;;;N;;;;; 2323;SMILE;So;0;ON;;;;;N;;;;; 2324;UP ARROWHEAD BETWEEN TWO HORIZONTAL BARS;So;0;ON;;;;;N;ENTER KEY;;;; 2325;OPTION KEY;So;0;ON;;;;;N;;;;; 2326;ERASE TO THE RIGHT;So;0;ON;;;;;N;DELETE TO THE RIGHT KEY;;;; 2327;X IN A RECTANGLE BOX;So;0;ON;;;;;N;CLEAR KEY;;;; 2328;KEYBOARD;So;0;ON;;;;;N;;;;; 2329;LEFT-POINTING ANGLE BRACKET;Ps;0;ON;3008;;;;Y;BRA;;;; 232A;RIGHT-POINTING ANGLE BRACKET;Pe;0;ON;3009;;;;Y;KET;;;; 232B;ERASE TO THE LEFT;So;0;ON;;;;;N;DELETE TO THE LEFT KEY;;;; 232C;BENZENE RING;So;0;ON;;;;;N;;;;; 232D;CYLINDRICITY;So;0;ON;;;;;N;;;;; 232E;ALL AROUND-PROFILE;So;0;ON;;;;;N;;;;; 232F;SYMMETRY;So;0;ON;;;;;N;;;;; 2330;TOTAL RUNOUT;So;0;ON;;;;;N;;;;; 2331;DIMENSION ORIGIN;So;0;ON;;;;;N;;;;; 2332;CONICAL TAPER;So;0;ON;;;;;N;;;;; 2333;SLOPE;So;0;ON;;;;;N;;;;; 2334;COUNTERBORE;So;0;ON;;;;;N;;;;; 2335;COUNTERSINK;So;0;ON;;;;;N;;;;; 2336;APL FUNCTIONAL SYMBOL I-BEAM;So;0;L;;;;;N;;;;; 2337;APL FUNCTIONAL SYMBOL SQUISH QUAD;So;0;L;;;;;N;;;;; 2338;APL FUNCTIONAL SYMBOL QUAD EQUAL;So;0;L;;;;;N;;;;; 2339;APL FUNCTIONAL SYMBOL QUAD DIVIDE;So;0;L;;;;;N;;;;; 233A;APL FUNCTIONAL SYMBOL QUAD DIAMOND;So;0;L;;;;;N;;;;; 233B;APL FUNCTIONAL SYMBOL QUAD JOT;So;0;L;;;;;N;;;;; 233C;APL FUNCTIONAL SYMBOL QUAD CIRCLE;So;0;L;;;;;N;;;;; 233D;APL FUNCTIONAL SYMBOL CIRCLE STILE;So;0;L;;;;;N;;;;; 233E;APL FUNCTIONAL SYMBOL CIRCLE JOT;So;0;L;;;;;N;;;;; 233F;APL FUNCTIONAL SYMBOL SLASH BAR;So;0;L;;;;;N;;;;; 2340;APL FUNCTIONAL SYMBOL BACKSLASH BAR;So;0;L;;;;;N;;;;; 2341;APL FUNCTIONAL SYMBOL QUAD SLASH;So;0;L;;;;;N;;;;; 2342;APL FUNCTIONAL SYMBOL QUAD BACKSLASH;So;0;L;;;;;N;;;;; 2343;APL FUNCTIONAL SYMBOL QUAD LESS-THAN;So;0;L;;;;;N;;;;; 2344;APL FUNCTIONAL SYMBOL QUAD GREATER-THAN;So;0;L;;;;;N;;;;; 2345;APL FUNCTIONAL SYMBOL LEFTWARDS VANE;So;0;L;;;;;N;;;;; 2346;APL FUNCTIONAL SYMBOL RIGHTWARDS VANE;So;0;L;;;;;N;;;;; 2347;APL FUNCTIONAL SYMBOL QUAD LEFTWARDS ARROW;So;0;L;;;;;N;;;;; 2348;APL FUNCTIONAL SYMBOL QUAD RIGHTWARDS ARROW;So;0;L;;;;;N;;;;; 2349;APL FUNCTIONAL SYMBOL CIRCLE BACKSLASH;So;0;L;;;;;N;;;;; 234A;APL FUNCTIONAL SYMBOL DOWN TACK UNDERBAR;So;0;L;;;;;N;;*;;; 234B;APL FUNCTIONAL SYMBOL DELTA STILE;So;0;L;;;;;N;;;;; 234C;APL FUNCTIONAL SYMBOL QUAD DOWN CARET;So;0;L;;;;;N;;;;; 234D;APL FUNCTIONAL SYMBOL QUAD DELTA;So;0;L;;;;;N;;;;; 234E;APL FUNCTIONAL SYMBOL DOWN TACK JOT;So;0;L;;;;;N;;*;;; 234F;APL FUNCTIONAL SYMBOL UPWARDS VANE;So;0;L;;;;;N;;;;; 2350;APL FUNCTIONAL SYMBOL QUAD UPWARDS ARROW;So;0;L;;;;;N;;;;; 2351;APL FUNCTIONAL SYMBOL UP TACK OVERBAR;So;0;L;;;;;N;;*;;; 2352;APL FUNCTIONAL SYMBOL DEL STILE;So;0;L;;;;;N;;;;; 2353;APL FUNCTIONAL SYMBOL QUAD UP CARET;So;0;L;;;;;N;;;;; 2354;APL FUNCTIONAL SYMBOL QUAD DEL;So;0;L;;;;;N;;;;; 2355;APL FUNCTIONAL SYMBOL UP TACK JOT;So;0;L;;;;;N;;*;;; 2356;APL FUNCTIONAL SYMBOL DOWNWARDS VANE;So;0;L;;;;;N;;;;; 2357;APL FUNCTIONAL SYMBOL QUAD DOWNWARDS ARROW;So;0;L;;;;;N;;;;; 2358;APL FUNCTIONAL SYMBOL QUOTE UNDERBAR;So;0;L;;;;;N;;;;; 2359;APL FUNCTIONAL SYMBOL DELTA UNDERBAR;So;0;L;;;;;N;;;;; 235A;APL FUNCTIONAL SYMBOL DIAMOND UNDERBAR;So;0;L;;;;;N;;;;; 235B;APL FUNCTIONAL SYMBOL JOT UNDERBAR;So;0;L;;;;;N;;;;; 235C;APL FUNCTIONAL SYMBOL CIRCLE UNDERBAR;So;0;L;;;;;N;;;;; 235D;APL FUNCTIONAL SYMBOL UP SHOE JOT;So;0;L;;;;;N;;;;; 235E;APL FUNCTIONAL SYMBOL QUOTE QUAD;So;0;L;;;;;N;;;;; 235F;APL FUNCTIONAL SYMBOL CIRCLE STAR;So;0;L;;;;;N;;;;; 2360;APL FUNCTIONAL SYMBOL QUAD COLON;So;0;L;;;;;N;;;;; 2361;APL FUNCTIONAL SYMBOL UP TACK DIAERESIS;So;0;L;;;;;N;;*;;; 2362;APL FUNCTIONAL SYMBOL DEL DIAERESIS;So;0;L;;;;;N;;;;; 2363;APL FUNCTIONAL SYMBOL STAR DIAERESIS;So;0;L;;;;;N;;;;; 2364;APL FUNCTIONAL SYMBOL JOT DIAERESIS;So;0;L;;;;;N;;;;; 2365;APL FUNCTIONAL SYMBOL CIRCLE DIAERESIS;So;0;L;;;;;N;;;;; 2366;APL FUNCTIONAL SYMBOL DOWN SHOE STILE;So;0;L;;;;;N;;;;; 2367;APL FUNCTIONAL SYMBOL LEFT SHOE STILE;So;0;L;;;;;N;;;;; 2368;APL FUNCTIONAL SYMBOL TILDE DIAERESIS;So;0;L;;;;;N;;;;; 2369;APL FUNCTIONAL SYMBOL GREATER-THAN DIAERESIS;So;0;L;;;;;N;;;;; 236A;APL FUNCTIONAL SYMBOL COMMA BAR;So;0;L;;;;;N;;;;; 236B;APL FUNCTIONAL SYMBOL DEL TILDE;So;0;L;;;;;N;;;;; 236C;APL FUNCTIONAL SYMBOL ZILDE;So;0;L;;;;;N;;;;; 236D;APL FUNCTIONAL SYMBOL STILE TILDE;So;0;L;;;;;N;;;;; 236E;APL FUNCTIONAL SYMBOL SEMICOLON UNDERBAR;So;0;L;;;;;N;;;;; 236F;APL FUNCTIONAL SYMBOL QUAD NOT EQUAL;So;0;L;;;;;N;;;;; 2370;APL FUNCTIONAL SYMBOL QUAD QUESTION;So;0;L;;;;;N;;;;; 2371;APL FUNCTIONAL SYMBOL DOWN CARET TILDE;So;0;L;;;;;N;;;;; 2372;APL FUNCTIONAL SYMBOL UP CARET TILDE;So;0;L;;;;;N;;;;; 2373;APL FUNCTIONAL SYMBOL IOTA;So;0;L;;;;;N;;;;; 2374;APL FUNCTIONAL SYMBOL RHO;So;0;L;;;;;N;;;;; 2375;APL FUNCTIONAL SYMBOL OMEGA;So;0;L;;;;;N;;;;; 2376;APL FUNCTIONAL SYMBOL ALPHA UNDERBAR;So;0;L;;;;;N;;;;; 2377;APL FUNCTIONAL SYMBOL EPSILON UNDERBAR;So;0;L;;;;;N;;;;; 2378;APL FUNCTIONAL SYMBOL IOTA UNDERBAR;So;0;L;;;;;N;;;;; 2379;APL FUNCTIONAL SYMBOL OMEGA UNDERBAR;So;0;L;;;;;N;;;;; 237A;APL FUNCTIONAL SYMBOL ALPHA;So;0;L;;;;;N;;;;; 237B;NOT CHECK MARK;So;0;ON;;;;;N;;;;; 237D;SHOULDERED OPEN BOX;So;0;ON;;;;;N;;;;; 237E;BELL SYMBOL;So;0;ON;;;;;N;;;;; 237F;VERTICAL LINE WITH MIDDLE DOT;So;0;ON;;;;;N;;;;; 2380;INSERTION SYMBOL;So;0;ON;;;;;N;;;;; 2381;CONTINUOUS UNDERLINE SYMBOL;So;0;ON;;;;;N;;;;; 2382;DISCONTINUOUS UNDERLINE SYMBOL;So;0;ON;;;;;N;;;;; 2383;EMPHASIS SYMBOL;So;0;ON;;;;;N;;;;; 2384;COMPOSITION SYMBOL;So;0;ON;;;;;N;;;;; 2385;WHITE SQUARE WITH CENTRE VERTICAL LINE;So;0;ON;;;;;N;;;;; 2386;ENTER SYMBOL;So;0;ON;;;;;N;;;;; 2387;ALTERNATIVE KEY SYMBOL;So;0;ON;;;;;N;;;;; 2388;HELM SYMBOL;So;0;ON;;;;;N;;;;; 2389;CIRCLED HORIZONTAL BAR WITH NOTCH;So;0;ON;;;;;N;;pause;;; 238A;CIRCLED TRIANGLE DOWN;So;0;ON;;;;;N;;break;;; 238B;BROKEN CIRCLE WITH NORTHWEST ARROW;So;0;ON;;;;;N;;escape;;; 238C;UNDO SYMBOL;So;0;ON;;;;;N;;;;; 238D;MONOSTABLE SYMBOL;So;0;ON;;;;;N;;;;; 238E;HYSTERESIS SYMBOL;So;0;ON;;;;;N;;;;; 238F;OPEN-CIRCUIT-OUTPUT H-TYPE SYMBOL;So;0;ON;;;;;N;;;;; 2390;OPEN-CIRCUIT-OUTPUT L-TYPE SYMBOL;So;0;ON;;;;;N;;;;; 2391;PASSIVE-PULL-DOWN-OUTPUT SYMBOL;So;0;ON;;;;;N;;;;; 2392;PASSIVE-PULL-UP-OUTPUT SYMBOL;So;0;ON;;;;;N;;;;; 2393;DIRECT CURRENT SYMBOL FORM TWO;So;0;ON;;;;;N;;;;; 2394;SOFTWARE-FUNCTION SYMBOL;So;0;ON;;;;;N;;;;; 2395;APL FUNCTIONAL SYMBOL QUAD;So;0;L;;;;;N;;;;; 2396;DECIMAL SEPARATOR KEY SYMBOL;So;0;ON;;;;;N;;;;; 2397;PREVIOUS PAGE;So;0;ON;;;;;N;;;;; 2398;NEXT PAGE;So;0;ON;;;;;N;;;;; 2399;PRINT SCREEN SYMBOL;So;0;ON;;;;;N;;;;; 239A;CLEAR SCREEN SYMBOL;So;0;ON;;;;;N;;;;; 2400;SYMBOL FOR NULL;So;0;ON;;;;;N;GRAPHIC FOR NULL;;;; 2401;SYMBOL FOR START OF HEADING;So;0;ON;;;;;N;GRAPHIC FOR START OF HEADING;;;; 2402;SYMBOL FOR START OF TEXT;So;0;ON;;;;;N;GRAPHIC FOR START OF TEXT;;;; 2403;SYMBOL FOR END OF TEXT;So;0;ON;;;;;N;GRAPHIC FOR END OF TEXT;;;; 2404;SYMBOL FOR END OF TRANSMISSION;So;0;ON;;;;;N;GRAPHIC FOR END OF TRANSMISSION;;;; 2405;SYMBOL FOR ENQUIRY;So;0;ON;;;;;N;GRAPHIC FOR ENQUIRY;;;; 2406;SYMBOL FOR ACKNOWLEDGE;So;0;ON;;;;;N;GRAPHIC FOR ACKNOWLEDGE;;;; 2407;SYMBOL FOR BELL;So;0;ON;;;;;N;GRAPHIC FOR BELL;;;; 2408;SYMBOL FOR BACKSPACE;So;0;ON;;;;;N;GRAPHIC FOR BACKSPACE;;;; 2409;SYMBOL FOR HORIZONTAL TABULATION;So;0;ON;;;;;N;GRAPHIC FOR HORIZONTAL TABULATION;;;; 240A;SYMBOL FOR LINE FEED;So;0;ON;;;;;N;GRAPHIC FOR LINE FEED;;;; 240B;SYMBOL FOR VERTICAL TABULATION;So;0;ON;;;;;N;GRAPHIC FOR VERTICAL TABULATION;;;; 240C;SYMBOL FOR FORM FEED;So;0;ON;;;;;N;GRAPHIC FOR FORM FEED;;;; 240D;SYMBOL FOR CARRIAGE RETURN;So;0;ON;;;;;N;GRAPHIC FOR CARRIAGE RETURN;;;; 240E;SYMBOL FOR SHIFT OUT;So;0;ON;;;;;N;GRAPHIC FOR SHIFT OUT;;;; 240F;SYMBOL FOR SHIFT IN;So;0;ON;;;;;N;GRAPHIC FOR SHIFT IN;;;; 2410;SYMBOL FOR DATA LINK ESCAPE;So;0;ON;;;;;N;GRAPHIC FOR DATA LINK ESCAPE;;;; 2411;SYMBOL FOR DEVICE CONTROL ONE;So;0;ON;;;;;N;GRAPHIC FOR DEVICE CONTROL ONE;;;; 2412;SYMBOL FOR DEVICE CONTROL TWO;So;0;ON;;;;;N;GRAPHIC FOR DEVICE CONTROL TWO;;;; 2413;SYMBOL FOR DEVICE CONTROL THREE;So;0;ON;;;;;N;GRAPHIC FOR DEVICE CONTROL THREE;;;; 2414;SYMBOL FOR DEVICE CONTROL FOUR;So;0;ON;;;;;N;GRAPHIC FOR DEVICE CONTROL FOUR;;;; 2415;SYMBOL FOR NEGATIVE ACKNOWLEDGE;So;0;ON;;;;;N;GRAPHIC FOR NEGATIVE ACKNOWLEDGE;;;; 2416;SYMBOL FOR SYNCHRONOUS IDLE;So;0;ON;;;;;N;GRAPHIC FOR SYNCHRONOUS IDLE;;;; 2417;SYMBOL FOR END OF TRANSMISSION BLOCK;So;0;ON;;;;;N;GRAPHIC FOR END OF TRANSMISSION BLOCK;;;; 2418;SYMBOL FOR CANCEL;So;0;ON;;;;;N;GRAPHIC FOR CANCEL;;;; 2419;SYMBOL FOR END OF MEDIUM;So;0;ON;;;;;N;GRAPHIC FOR END OF MEDIUM;;;; 241A;SYMBOL FOR SUBSTITUTE;So;0;ON;;;;;N;GRAPHIC FOR SUBSTITUTE;;;; 241B;SYMBOL FOR ESCAPE;So;0;ON;;;;;N;GRAPHIC FOR ESCAPE;;;; 241C;SYMBOL FOR FILE SEPARATOR;So;0;ON;;;;;N;GRAPHIC FOR FILE SEPARATOR;;;; 241D;SYMBOL FOR GROUP SEPARATOR;So;0;ON;;;;;N;GRAPHIC FOR GROUP SEPARATOR;;;; 241E;SYMBOL FOR RECORD SEPARATOR;So;0;ON;;;;;N;GRAPHIC FOR RECORD SEPARATOR;;;; 241F;SYMBOL FOR UNIT SEPARATOR;So;0;ON;;;;;N;GRAPHIC FOR UNIT SEPARATOR;;;; 2420;SYMBOL FOR SPACE;So;0;ON;;;;;N;GRAPHIC FOR SPACE;;;; 2421;SYMBOL FOR DELETE;So;0;ON;;;;;N;GRAPHIC FOR DELETE;;;; 2422;BLANK SYMBOL;So;0;ON;;;;;N;BLANK;;;; 2423;OPEN BOX;So;0;ON;;;;;N;;;;; 2424;SYMBOL FOR NEWLINE;So;0;ON;;;;;N;GRAPHIC FOR NEWLINE;;;; 2425;SYMBOL FOR DELETE FORM TWO;So;0;ON;;;;;N;;;;; 2426;SYMBOL FOR SUBSTITUTE FORM TWO;So;0;ON;;;;;N;;;;; 2440;OCR HOOK;So;0;ON;;;;;N;;;;; 2441;OCR CHAIR;So;0;ON;;;;;N;;;;; 2442;OCR FORK;So;0;ON;;;;;N;;;;; 2443;OCR INVERTED FORK;So;0;ON;;;;;N;;;;; 2444;OCR BELT BUCKLE;So;0;ON;;;;;N;;;;; 2445;OCR BOW TIE;So;0;ON;;;;;N;;;;; 2446;OCR BRANCH BANK IDENTIFICATION;So;0;ON;;;;;N;;;;; 2447;OCR AMOUNT OF CHECK;So;0;ON;;;;;N;;;;; 2448;OCR DASH;So;0;ON;;;;;N;;;;; 2449;OCR CUSTOMER ACCOUNT NUMBER;So;0;ON;;;;;N;;;;; 244A;OCR DOUBLE BACKSLASH;So;0;ON;;;;;N;;;;; 2460;CIRCLED DIGIT ONE;No;0;EN; 0031;;1;1;N;;;;; 2461;CIRCLED DIGIT TWO;No;0;EN; 0032;;2;2;N;;;;; 2462;CIRCLED DIGIT THREE;No;0;EN; 0033;;3;3;N;;;;; 2463;CIRCLED DIGIT FOUR;No;0;EN; 0034;;4;4;N;;;;; 2464;CIRCLED DIGIT FIVE;No;0;EN; 0035;;5;5;N;;;;; 2465;CIRCLED DIGIT SIX;No;0;EN; 0036;;6;6;N;;;;; 2466;CIRCLED DIGIT SEVEN;No;0;EN; 0037;;7;7;N;;;;; 2467;CIRCLED DIGIT EIGHT;No;0;EN; 0038;;8;8;N;;;;; 2468;CIRCLED DIGIT NINE;No;0;EN; 0039;;9;9;N;;;;; 2469;CIRCLED NUMBER TEN;No;0;EN; 0031 0030;;;10;N;;;;; 246A;CIRCLED NUMBER ELEVEN;No;0;EN; 0031 0031;;;11;N;;;;; 246B;CIRCLED NUMBER TWELVE;No;0;EN; 0031 0032;;;12;N;;;;; 246C;CIRCLED NUMBER THIRTEEN;No;0;EN; 0031 0033;;;13;N;;;;; 246D;CIRCLED NUMBER FOURTEEN;No;0;EN; 0031 0034;;;14;N;;;;; 246E;CIRCLED NUMBER FIFTEEN;No;0;EN; 0031 0035;;;15;N;;;;; 246F;CIRCLED NUMBER SIXTEEN;No;0;EN; 0031 0036;;;16;N;;;;; 2470;CIRCLED NUMBER SEVENTEEN;No;0;EN; 0031 0037;;;17;N;;;;; 2471;CIRCLED NUMBER EIGHTEEN;No;0;EN; 0031 0038;;;18;N;;;;; 2472;CIRCLED NUMBER NINETEEN;No;0;EN; 0031 0039;;;19;N;;;;; 2473;CIRCLED NUMBER TWENTY;No;0;EN; 0032 0030;;;20;N;;;;; 2474;PARENTHESIZED DIGIT ONE;No;0;EN; 0028 0031 0029;;1;1;N;;;;; 2475;PARENTHESIZED DIGIT TWO;No;0;EN; 0028 0032 0029;;2;2;N;;;;; 2476;PARENTHESIZED DIGIT THREE;No;0;EN; 0028 0033 0029;;3;3;N;;;;; 2477;PARENTHESIZED DIGIT FOUR;No;0;EN; 0028 0034 0029;;4;4;N;;;;; 2478;PARENTHESIZED DIGIT FIVE;No;0;EN; 0028 0035 0029;;5;5;N;;;;; 2479;PARENTHESIZED DIGIT SIX;No;0;EN; 0028 0036 0029;;6;6;N;;;;; 247A;PARENTHESIZED DIGIT SEVEN;No;0;EN; 0028 0037 0029;;7;7;N;;;;; 247B;PARENTHESIZED DIGIT EIGHT;No;0;EN; 0028 0038 0029;;8;8;N;;;;; 247C;PARENTHESIZED DIGIT NINE;No;0;EN; 0028 0039 0029;;9;9;N;;;;; 247D;PARENTHESIZED NUMBER TEN;No;0;EN; 0028 0031 0030 0029;;;10;N;;;;; 247E;PARENTHESIZED NUMBER ELEVEN;No;0;EN; 0028 0031 0031 0029;;;11;N;;;;; 247F;PARENTHESIZED NUMBER TWELVE;No;0;EN; 0028 0031 0032 0029;;;12;N;;;;; 2480;PARENTHESIZED NUMBER THIRTEEN;No;0;EN; 0028 0031 0033 0029;;;13;N;;;;; 2481;PARENTHESIZED NUMBER FOURTEEN;No;0;EN; 0028 0031 0034 0029;;;14;N;;;;; 2482;PARENTHESIZED NUMBER FIFTEEN;No;0;EN; 0028 0031 0035 0029;;;15;N;;;;; 2483;PARENTHESIZED NUMBER SIXTEEN;No;0;EN; 0028 0031 0036 0029;;;16;N;;;;; 2484;PARENTHESIZED NUMBER SEVENTEEN;No;0;EN; 0028 0031 0037 0029;;;17;N;;;;; 2485;PARENTHESIZED NUMBER EIGHTEEN;No;0;EN; 0028 0031 0038 0029;;;18;N;;;;; 2486;PARENTHESIZED NUMBER NINETEEN;No;0;EN; 0028 0031 0039 0029;;;19;N;;;;; 2487;PARENTHESIZED NUMBER TWENTY;No;0;EN; 0028 0032 0030 0029;;;20;N;;;;; 2488;DIGIT ONE FULL STOP;No;0;EN; 0031 002E;;1;1;N;DIGIT ONE PERIOD;;;; 2489;DIGIT TWO FULL STOP;No;0;EN; 0032 002E;;2;2;N;DIGIT TWO PERIOD;;;; 248A;DIGIT THREE FULL STOP;No;0;EN; 0033 002E;;3;3;N;DIGIT THREE PERIOD;;;; 248B;DIGIT FOUR FULL STOP;No;0;EN; 0034 002E;;4;4;N;DIGIT FOUR PERIOD;;;; 248C;DIGIT FIVE FULL STOP;No;0;EN; 0035 002E;;5;5;N;DIGIT FIVE PERIOD;;;; 248D;DIGIT SIX FULL STOP;No;0;EN; 0036 002E;;6;6;N;DIGIT SIX PERIOD;;;; 248E;DIGIT SEVEN FULL STOP;No;0;EN; 0037 002E;;7;7;N;DIGIT SEVEN PERIOD;;;; 248F;DIGIT EIGHT FULL STOP;No;0;EN; 0038 002E;;8;8;N;DIGIT EIGHT PERIOD;;;; 2490;DIGIT NINE FULL STOP;No;0;EN; 0039 002E;;9;9;N;DIGIT NINE PERIOD;;;; 2491;NUMBER TEN FULL STOP;No;0;EN; 0031 0030 002E;;;10;N;NUMBER TEN PERIOD;;;; 2492;NUMBER ELEVEN FULL STOP;No;0;EN; 0031 0031 002E;;;11;N;NUMBER ELEVEN PERIOD;;;; 2493;NUMBER TWELVE FULL STOP;No;0;EN; 0031 0032 002E;;;12;N;NUMBER TWELVE PERIOD;;;; 2494;NUMBER THIRTEEN FULL STOP;No;0;EN; 0031 0033 002E;;;13;N;NUMBER THIRTEEN PERIOD;;;; 2495;NUMBER FOURTEEN FULL STOP;No;0;EN; 0031 0034 002E;;;14;N;NUMBER FOURTEEN PERIOD;;;; 2496;NUMBER FIFTEEN FULL STOP;No;0;EN; 0031 0035 002E;;;15;N;NUMBER FIFTEEN PERIOD;;;; 2497;NUMBER SIXTEEN FULL STOP;No;0;EN; 0031 0036 002E;;;16;N;NUMBER SIXTEEN PERIOD;;;; 2498;NUMBER SEVENTEEN FULL STOP;No;0;EN; 0031 0037 002E;;;17;N;NUMBER SEVENTEEN PERIOD;;;; 2499;NUMBER EIGHTEEN FULL STOP;No;0;EN; 0031 0038 002E;;;18;N;NUMBER EIGHTEEN PERIOD;;;; 249A;NUMBER NINETEEN FULL STOP;No;0;EN; 0031 0039 002E;;;19;N;NUMBER NINETEEN PERIOD;;;; 249B;NUMBER TWENTY FULL STOP;No;0;EN; 0032 0030 002E;;;20;N;NUMBER TWENTY PERIOD;;;; 249C;PARENTHESIZED LATIN SMALL LETTER A;So;0;L; 0028 0061 0029;;;;N;;;;; 249D;PARENTHESIZED LATIN SMALL LETTER B;So;0;L; 0028 0062 0029;;;;N;;;;; 249E;PARENTHESIZED LATIN SMALL LETTER C;So;0;L; 0028 0063 0029;;;;N;;;;; 249F;PARENTHESIZED LATIN SMALL LETTER D;So;0;L; 0028 0064 0029;;;;N;;;;; 24A0;PARENTHESIZED LATIN SMALL LETTER E;So;0;L; 0028 0065 0029;;;;N;;;;; 24A1;PARENTHESIZED LATIN SMALL LETTER F;So;0;L; 0028 0066 0029;;;;N;;;;; 24A2;PARENTHESIZED LATIN SMALL LETTER G;So;0;L; 0028 0067 0029;;;;N;;;;; 24A3;PARENTHESIZED LATIN SMALL LETTER H;So;0;L; 0028 0068 0029;;;;N;;;;; 24A4;PARENTHESIZED LATIN SMALL LETTER I;So;0;L; 0028 0069 0029;;;;N;;;;; 24A5;PARENTHESIZED LATIN SMALL LETTER J;So;0;L; 0028 006A 0029;;;;N;;;;; 24A6;PARENTHESIZED LATIN SMALL LETTER K;So;0;L; 0028 006B 0029;;;;N;;;;; 24A7;PARENTHESIZED LATIN SMALL LETTER L;So;0;L; 0028 006C 0029;;;;N;;;;; 24A8;PARENTHESIZED LATIN SMALL LETTER M;So;0;L; 0028 006D 0029;;;;N;;;;; 24A9;PARENTHESIZED LATIN SMALL LETTER N;So;0;L; 0028 006E 0029;;;;N;;;;; 24AA;PARENTHESIZED LATIN SMALL LETTER O;So;0;L; 0028 006F 0029;;;;N;;;;; 24AB;PARENTHESIZED LATIN SMALL LETTER P;So;0;L; 0028 0070 0029;;;;N;;;;; 24AC;PARENTHESIZED LATIN SMALL LETTER Q;So;0;L; 0028 0071 0029;;;;N;;;;; 24AD;PARENTHESIZED LATIN SMALL LETTER R;So;0;L; 0028 0072 0029;;;;N;;;;; 24AE;PARENTHESIZED LATIN SMALL LETTER S;So;0;L; 0028 0073 0029;;;;N;;;;; 24AF;PARENTHESIZED LATIN SMALL LETTER T;So;0;L; 0028 0074 0029;;;;N;;;;; 24B0;PARENTHESIZED LATIN SMALL LETTER U;So;0;L; 0028 0075 0029;;;;N;;;;; 24B1;PARENTHESIZED LATIN SMALL LETTER V;So;0;L; 0028 0076 0029;;;;N;;;;; 24B2;PARENTHESIZED LATIN SMALL LETTER W;So;0;L; 0028 0077 0029;;;;N;;;;; 24B3;PARENTHESIZED LATIN SMALL LETTER X;So;0;L; 0028 0078 0029;;;;N;;;;; 24B4;PARENTHESIZED LATIN SMALL LETTER Y;So;0;L; 0028 0079 0029;;;;N;;;;; 24B5;PARENTHESIZED LATIN SMALL LETTER Z;So;0;L; 0028 007A 0029;;;;N;;;;; 24B6;CIRCLED LATIN CAPITAL LETTER A;So;0;L; 0041;;;;N;;;;24D0; 24B7;CIRCLED LATIN CAPITAL LETTER B;So;0;L; 0042;;;;N;;;;24D1; 24B8;CIRCLED LATIN CAPITAL LETTER C;So;0;L; 0043;;;;N;;;;24D2; 24B9;CIRCLED LATIN CAPITAL LETTER D;So;0;L; 0044;;;;N;;;;24D3; 24BA;CIRCLED LATIN CAPITAL LETTER E;So;0;L; 0045;;;;N;;;;24D4; 24BB;CIRCLED LATIN CAPITAL LETTER F;So;0;L; 0046;;;;N;;;;24D5; 24BC;CIRCLED LATIN CAPITAL LETTER G;So;0;L; 0047;;;;N;;;;24D6; 24BD;CIRCLED LATIN CAPITAL LETTER H;So;0;L; 0048;;;;N;;;;24D7; 24BE;CIRCLED LATIN CAPITAL LETTER I;So;0;L; 0049;;;;N;;;;24D8; 24BF;CIRCLED LATIN CAPITAL LETTER J;So;0;L; 004A;;;;N;;;;24D9; 24C0;CIRCLED LATIN CAPITAL LETTER K;So;0;L; 004B;;;;N;;;;24DA; 24C1;CIRCLED LATIN CAPITAL LETTER L;So;0;L; 004C;;;;N;;;;24DB; 24C2;CIRCLED LATIN CAPITAL LETTER M;So;0;L; 004D;;;;N;;;;24DC; 24C3;CIRCLED LATIN CAPITAL LETTER N;So;0;L; 004E;;;;N;;;;24DD; 24C4;CIRCLED LATIN CAPITAL LETTER O;So;0;L; 004F;;;;N;;;;24DE; 24C5;CIRCLED LATIN CAPITAL LETTER P;So;0;L; 0050;;;;N;;;;24DF; 24C6;CIRCLED LATIN CAPITAL LETTER Q;So;0;L; 0051;;;;N;;;;24E0; 24C7;CIRCLED LATIN CAPITAL LETTER R;So;0;L; 0052;;;;N;;;;24E1; 24C8;CIRCLED LATIN CAPITAL LETTER S;So;0;L; 0053;;;;N;;;;24E2; 24C9;CIRCLED LATIN CAPITAL LETTER T;So;0;L; 0054;;;;N;;;;24E3; 24CA;CIRCLED LATIN CAPITAL LETTER U;So;0;L; 0055;;;;N;;;;24E4; 24CB;CIRCLED LATIN CAPITAL LETTER V;So;0;L; 0056;;;;N;;;;24E5; 24CC;CIRCLED LATIN CAPITAL LETTER W;So;0;L; 0057;;;;N;;;;24E6; 24CD;CIRCLED LATIN CAPITAL LETTER X;So;0;L; 0058;;;;N;;;;24E7; 24CE;CIRCLED LATIN CAPITAL LETTER Y;So;0;L; 0059;;;;N;;;;24E8; 24CF;CIRCLED LATIN CAPITAL LETTER Z;So;0;L; 005A;;;;N;;;;24E9; 24D0;CIRCLED LATIN SMALL LETTER A;So;0;L; 0061;;;;N;;;24B6;;24B6 24D1;CIRCLED LATIN SMALL LETTER B;So;0;L; 0062;;;;N;;;24B7;;24B7 24D2;CIRCLED LATIN SMALL LETTER C;So;0;L; 0063;;;;N;;;24B8;;24B8 24D3;CIRCLED LATIN SMALL LETTER D;So;0;L; 0064;;;;N;;;24B9;;24B9 24D4;CIRCLED LATIN SMALL LETTER E;So;0;L; 0065;;;;N;;;24BA;;24BA 24D5;CIRCLED LATIN SMALL LETTER F;So;0;L; 0066;;;;N;;;24BB;;24BB 24D6;CIRCLED LATIN SMALL LETTER G;So;0;L; 0067;;;;N;;;24BC;;24BC 24D7;CIRCLED LATIN SMALL LETTER H;So;0;L; 0068;;;;N;;;24BD;;24BD 24D8;CIRCLED LATIN SMALL LETTER I;So;0;L; 0069;;;;N;;;24BE;;24BE 24D9;CIRCLED LATIN SMALL LETTER J;So;0;L; 006A;;;;N;;;24BF;;24BF 24DA;CIRCLED LATIN SMALL LETTER K;So;0;L; 006B;;;;N;;;24C0;;24C0 24DB;CIRCLED LATIN SMALL LETTER L;So;0;L; 006C;;;;N;;;24C1;;24C1 24DC;CIRCLED LATIN SMALL LETTER M;So;0;L; 006D;;;;N;;;24C2;;24C2 24DD;CIRCLED LATIN SMALL LETTER N;So;0;L; 006E;;;;N;;;24C3;;24C3 24DE;CIRCLED LATIN SMALL LETTER O;So;0;L; 006F;;;;N;;;24C4;;24C4 24DF;CIRCLED LATIN SMALL LETTER P;So;0;L; 0070;;;;N;;;24C5;;24C5 24E0;CIRCLED LATIN SMALL LETTER Q;So;0;L; 0071;;;;N;;;24C6;;24C6 24E1;CIRCLED LATIN SMALL LETTER R;So;0;L; 0072;;;;N;;;24C7;;24C7 24E2;CIRCLED LATIN SMALL LETTER S;So;0;L; 0073;;;;N;;;24C8;;24C8 24E3;CIRCLED LATIN SMALL LETTER T;So;0;L; 0074;;;;N;;;24C9;;24C9 24E4;CIRCLED LATIN SMALL LETTER U;So;0;L; 0075;;;;N;;;24CA;;24CA 24E5;CIRCLED LATIN SMALL LETTER V;So;0;L; 0076;;;;N;;;24CB;;24CB 24E6;CIRCLED LATIN SMALL LETTER W;So;0;L; 0077;;;;N;;;24CC;;24CC 24E7;CIRCLED LATIN SMALL LETTER X;So;0;L; 0078;;;;N;;;24CD;;24CD 24E8;CIRCLED LATIN SMALL LETTER Y;So;0;L; 0079;;;;N;;;24CE;;24CE 24E9;CIRCLED LATIN SMALL LETTER Z;So;0;L; 007A;;;;N;;;24CF;;24CF 24EA;CIRCLED DIGIT ZERO;No;0;EN; 0030;;0;0;N;;;;; 2500;BOX DRAWINGS LIGHT HORIZONTAL;So;0;ON;;;;;N;FORMS LIGHT HORIZONTAL;;;; 2501;BOX DRAWINGS HEAVY HORIZONTAL;So;0;ON;;;;;N;FORMS HEAVY HORIZONTAL;;;; 2502;BOX DRAWINGS LIGHT VERTICAL;So;0;ON;;;;;N;FORMS LIGHT VERTICAL;;;; 2503;BOX DRAWINGS HEAVY VERTICAL;So;0;ON;;;;;N;FORMS HEAVY VERTICAL;;;; 2504;BOX DRAWINGS LIGHT TRIPLE DASH HORIZONTAL;So;0;ON;;;;;N;FORMS LIGHT TRIPLE DASH HORIZONTAL;;;; 2505;BOX DRAWINGS HEAVY TRIPLE DASH HORIZONTAL;So;0;ON;;;;;N;FORMS HEAVY TRIPLE DASH HORIZONTAL;;;; 2506;BOX DRAWINGS LIGHT TRIPLE DASH VERTICAL;So;0;ON;;;;;N;FORMS LIGHT TRIPLE DASH VERTICAL;;;; 2507;BOX DRAWINGS HEAVY TRIPLE DASH VERTICAL;So;0;ON;;;;;N;FORMS HEAVY TRIPLE DASH VERTICAL;;;; 2508;BOX DRAWINGS LIGHT QUADRUPLE DASH HORIZONTAL;So;0;ON;;;;;N;FORMS LIGHT QUADRUPLE DASH HORIZONTAL;;;; 2509;BOX DRAWINGS HEAVY QUADRUPLE DASH HORIZONTAL;So;0;ON;;;;;N;FORMS HEAVY QUADRUPLE DASH HORIZONTAL;;;; 250A;BOX DRAWINGS LIGHT QUADRUPLE DASH VERTICAL;So;0;ON;;;;;N;FORMS LIGHT QUADRUPLE DASH VERTICAL;;;; 250B;BOX DRAWINGS HEAVY QUADRUPLE DASH VERTICAL;So;0;ON;;;;;N;FORMS HEAVY QUADRUPLE DASH VERTICAL;;;; 250C;BOX DRAWINGS LIGHT DOWN AND RIGHT;So;0;ON;;;;;N;FORMS LIGHT DOWN AND RIGHT;;;; 250D;BOX DRAWINGS DOWN LIGHT AND RIGHT HEAVY;So;0;ON;;;;;N;FORMS DOWN LIGHT AND RIGHT HEAVY;;;; 250E;BOX DRAWINGS DOWN HEAVY AND RIGHT LIGHT;So;0;ON;;;;;N;FORMS DOWN HEAVY AND RIGHT LIGHT;;;; 250F;BOX DRAWINGS HEAVY DOWN AND RIGHT;So;0;ON;;;;;N;FORMS HEAVY DOWN AND RIGHT;;;; 2510;BOX DRAWINGS LIGHT DOWN AND LEFT;So;0;ON;;;;;N;FORMS LIGHT DOWN AND LEFT;;;; 2511;BOX DRAWINGS DOWN LIGHT AND LEFT HEAVY;So;0;ON;;;;;N;FORMS DOWN LIGHT AND LEFT HEAVY;;;; 2512;BOX DRAWINGS DOWN HEAVY AND LEFT LIGHT;So;0;ON;;;;;N;FORMS DOWN HEAVY AND LEFT LIGHT;;;; 2513;BOX DRAWINGS HEAVY DOWN AND LEFT;So;0;ON;;;;;N;FORMS HEAVY DOWN AND LEFT;;;; 2514;BOX DRAWINGS LIGHT UP AND RIGHT;So;0;ON;;;;;N;FORMS LIGHT UP AND RIGHT;;;; 2515;BOX DRAWINGS UP LIGHT AND RIGHT HEAVY;So;0;ON;;;;;N;FORMS UP LIGHT AND RIGHT HEAVY;;;; 2516;BOX DRAWINGS UP HEAVY AND RIGHT LIGHT;So;0;ON;;;;;N;FORMS UP HEAVY AND RIGHT LIGHT;;;; 2517;BOX DRAWINGS HEAVY UP AND RIGHT;So;0;ON;;;;;N;FORMS HEAVY UP AND RIGHT;;;; 2518;BOX DRAWINGS LIGHT UP AND LEFT;So;0;ON;;;;;N;FORMS LIGHT UP AND LEFT;;;; 2519;BOX DRAWINGS UP LIGHT AND LEFT HEAVY;So;0;ON;;;;;N;FORMS UP LIGHT AND LEFT HEAVY;;;; 251A;BOX DRAWINGS UP HEAVY AND LEFT LIGHT;So;0;ON;;;;;N;FORMS UP HEAVY AND LEFT LIGHT;;;; 251B;BOX DRAWINGS HEAVY UP AND LEFT;So;0;ON;;;;;N;FORMS HEAVY UP AND LEFT;;;; 251C;BOX DRAWINGS LIGHT VERTICAL AND RIGHT;So;0;ON;;;;;N;FORMS LIGHT VERTICAL AND RIGHT;;;; 251D;BOX DRAWINGS VERTICAL LIGHT AND RIGHT HEAVY;So;0;ON;;;;;N;FORMS VERTICAL LIGHT AND RIGHT HEAVY;;;; 251E;BOX DRAWINGS UP HEAVY AND RIGHT DOWN LIGHT;So;0;ON;;;;;N;FORMS UP HEAVY AND RIGHT DOWN LIGHT;;;; 251F;BOX DRAWINGS DOWN HEAVY AND RIGHT UP LIGHT;So;0;ON;;;;;N;FORMS DOWN HEAVY AND RIGHT UP LIGHT;;;; 2520;BOX DRAWINGS VERTICAL HEAVY AND RIGHT LIGHT;So;0;ON;;;;;N;FORMS VERTICAL HEAVY AND RIGHT LIGHT;;;; 2521;BOX DRAWINGS DOWN LIGHT AND RIGHT UP HEAVY;So;0;ON;;;;;N;FORMS DOWN LIGHT AND RIGHT UP HEAVY;;;; 2522;BOX DRAWINGS UP LIGHT AND RIGHT DOWN HEAVY;So;0;ON;;;;;N;FORMS UP LIGHT AND RIGHT DOWN HEAVY;;;; 2523;BOX DRAWINGS HEAVY VERTICAL AND RIGHT;So;0;ON;;;;;N;FORMS HEAVY VERTICAL AND RIGHT;;;; 2524;BOX DRAWINGS LIGHT VERTICAL AND LEFT;So;0;ON;;;;;N;FORMS LIGHT VERTICAL AND LEFT;;;; 2525;BOX DRAWINGS VERTICAL LIGHT AND LEFT HEAVY;So;0;ON;;;;;N;FORMS VERTICAL LIGHT AND LEFT HEAVY;;;; 2526;BOX DRAWINGS UP HEAVY AND LEFT DOWN LIGHT;So;0;ON;;;;;N;FORMS UP HEAVY AND LEFT DOWN LIGHT;;;; 2527;BOX DRAWINGS DOWN HEAVY AND LEFT UP LIGHT;So;0;ON;;;;;N;FORMS DOWN HEAVY AND LEFT UP LIGHT;;;; 2528;BOX DRAWINGS VERTICAL HEAVY AND LEFT LIGHT;So;0;ON;;;;;N;FORMS VERTICAL HEAVY AND LEFT LIGHT;;;; 2529;BOX DRAWINGS DOWN LIGHT AND LEFT UP HEAVY;So;0;ON;;;;;N;FORMS DOWN LIGHT AND LEFT UP HEAVY;;;; 252A;BOX DRAWINGS UP LIGHT AND LEFT DOWN HEAVY;So;0;ON;;;;;N;FORMS UP LIGHT AND LEFT DOWN HEAVY;;;; 252B;BOX DRAWINGS HEAVY VERTICAL AND LEFT;So;0;ON;;;;;N;FORMS HEAVY VERTICAL AND LEFT;;;; 252C;BOX DRAWINGS LIGHT DOWN AND HORIZONTAL;So;0;ON;;;;;N;FORMS LIGHT DOWN AND HORIZONTAL;;;; 252D;BOX DRAWINGS LEFT HEAVY AND RIGHT DOWN LIGHT;So;0;ON;;;;;N;FORMS LEFT HEAVY AND RIGHT DOWN LIGHT;;;; 252E;BOX DRAWINGS RIGHT HEAVY AND LEFT DOWN LIGHT;So;0;ON;;;;;N;FORMS RIGHT HEAVY AND LEFT DOWN LIGHT;;;; 252F;BOX DRAWINGS DOWN LIGHT AND HORIZONTAL HEAVY;So;0;ON;;;;;N;FORMS DOWN LIGHT AND HORIZONTAL HEAVY;;;; 2530;BOX DRAWINGS DOWN HEAVY AND HORIZONTAL LIGHT;So;0;ON;;;;;N;FORMS DOWN HEAVY AND HORIZONTAL LIGHT;;;; 2531;BOX DRAWINGS RIGHT LIGHT AND LEFT DOWN HEAVY;So;0;ON;;;;;N;FORMS RIGHT LIGHT AND LEFT DOWN HEAVY;;;; 2532;BOX DRAWINGS LEFT LIGHT AND RIGHT DOWN HEAVY;So;0;ON;;;;;N;FORMS LEFT LIGHT AND RIGHT DOWN HEAVY;;;; 2533;BOX DRAWINGS HEAVY DOWN AND HORIZONTAL;So;0;ON;;;;;N;FORMS HEAVY DOWN AND HORIZONTAL;;;; 2534;BOX DRAWINGS LIGHT UP AND HORIZONTAL;So;0;ON;;;;;N;FORMS LIGHT UP AND HORIZONTAL;;;; 2535;BOX DRAWINGS LEFT HEAVY AND RIGHT UP LIGHT;So;0;ON;;;;;N;FORMS LEFT HEAVY AND RIGHT UP LIGHT;;;; 2536;BOX DRAWINGS RIGHT HEAVY AND LEFT UP LIGHT;So;0;ON;;;;;N;FORMS RIGHT HEAVY AND LEFT UP LIGHT;;;; 2537;BOX DRAWINGS UP LIGHT AND HORIZONTAL HEAVY;So;0;ON;;;;;N;FORMS UP LIGHT AND HORIZONTAL HEAVY;;;; 2538;BOX DRAWINGS UP HEAVY AND HORIZONTAL LIGHT;So;0;ON;;;;;N;FORMS UP HEAVY AND HORIZONTAL LIGHT;;;; 2539;BOX DRAWINGS RIGHT LIGHT AND LEFT UP HEAVY;So;0;ON;;;;;N;FORMS RIGHT LIGHT AND LEFT UP HEAVY;;;; 253A;BOX DRAWINGS LEFT LIGHT AND RIGHT UP HEAVY;So;0;ON;;;;;N;FORMS LEFT LIGHT AND RIGHT UP HEAVY;;;; 253B;BOX DRAWINGS HEAVY UP AND HORIZONTAL;So;0;ON;;;;;N;FORMS HEAVY UP AND HORIZONTAL;;;; 253C;BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL;So;0;ON;;;;;N;FORMS LIGHT VERTICAL AND HORIZONTAL;;;; 253D;BOX DRAWINGS LEFT HEAVY AND RIGHT VERTICAL LIGHT;So;0;ON;;;;;N;FORMS LEFT HEAVY AND RIGHT VERTICAL LIGHT;;;; 253E;BOX DRAWINGS RIGHT HEAVY AND LEFT VERTICAL LIGHT;So;0;ON;;;;;N;FORMS RIGHT HEAVY AND LEFT VERTICAL LIGHT;;;; 253F;BOX DRAWINGS VERTICAL LIGHT AND HORIZONTAL HEAVY;So;0;ON;;;;;N;FORMS VERTICAL LIGHT AND HORIZONTAL HEAVY;;;; 2540;BOX DRAWINGS UP HEAVY AND DOWN HORIZONTAL LIGHT;So;0;ON;;;;;N;FORMS UP HEAVY AND DOWN HORIZONTAL LIGHT;;;; 2541;BOX DRAWINGS DOWN HEAVY AND UP HORIZONTAL LIGHT;So;0;ON;;;;;N;FORMS DOWN HEAVY AND UP HORIZONTAL LIGHT;;;; 2542;BOX DRAWINGS VERTICAL HEAVY AND HORIZONTAL LIGHT;So;0;ON;;;;;N;FORMS VERTICAL HEAVY AND HORIZONTAL LIGHT;;;; 2543;BOX DRAWINGS LEFT UP HEAVY AND RIGHT DOWN LIGHT;So;0;ON;;;;;N;FORMS LEFT UP HEAVY AND RIGHT DOWN LIGHT;;;; 2544;BOX DRAWINGS RIGHT UP HEAVY AND LEFT DOWN LIGHT;So;0;ON;;;;;N;FORMS RIGHT UP HEAVY AND LEFT DOWN LIGHT;;;; 2545;BOX DRAWINGS LEFT DOWN HEAVY AND RIGHT UP LIGHT;So;0;ON;;;;;N;FORMS LEFT DOWN HEAVY AND RIGHT UP LIGHT;;;; 2546;BOX DRAWINGS RIGHT DOWN HEAVY AND LEFT UP LIGHT;So;0;ON;;;;;N;FORMS RIGHT DOWN HEAVY AND LEFT UP LIGHT;;;; 2547;BOX DRAWINGS DOWN LIGHT AND UP HORIZONTAL HEAVY;So;0;ON;;;;;N;FORMS DOWN LIGHT AND UP HORIZONTAL HEAVY;;;; 2548;BOX DRAWINGS UP LIGHT AND DOWN HORIZONTAL HEAVY;So;0;ON;;;;;N;FORMS UP LIGHT AND DOWN HORIZONTAL HEAVY;;;; 2549;BOX DRAWINGS RIGHT LIGHT AND LEFT VERTICAL HEAVY;So;0;ON;;;;;N;FORMS RIGHT LIGHT AND LEFT VERTICAL HEAVY;;;; 254A;BOX DRAWINGS LEFT LIGHT AND RIGHT VERTICAL HEAVY;So;0;ON;;;;;N;FORMS LEFT LIGHT AND RIGHT VERTICAL HEAVY;;;; 254B;BOX DRAWINGS HEAVY VERTICAL AND HORIZONTAL;So;0;ON;;;;;N;FORMS HEAVY VERTICAL AND HORIZONTAL;;;; 254C;BOX DRAWINGS LIGHT DOUBLE DASH HORIZONTAL;So;0;ON;;;;;N;FORMS LIGHT DOUBLE DASH HORIZONTAL;;;; 254D;BOX DRAWINGS HEAVY DOUBLE DASH HORIZONTAL;So;0;ON;;;;;N;FORMS HEAVY DOUBLE DASH HORIZONTAL;;;; 254E;BOX DRAWINGS LIGHT DOUBLE DASH VERTICAL;So;0;ON;;;;;N;FORMS LIGHT DOUBLE DASH VERTICAL;;;; 254F;BOX DRAWINGS HEAVY DOUBLE DASH VERTICAL;So;0;ON;;;;;N;FORMS HEAVY DOUBLE DASH VERTICAL;;;; 2550;BOX DRAWINGS DOUBLE HORIZONTAL;So;0;ON;;;;;N;FORMS DOUBLE HORIZONTAL;;;; 2551;BOX DRAWINGS DOUBLE VERTICAL;So;0;ON;;;;;N;FORMS DOUBLE VERTICAL;;;; 2552;BOX DRAWINGS DOWN SINGLE AND RIGHT DOUBLE;So;0;ON;;;;;N;FORMS DOWN SINGLE AND RIGHT DOUBLE;;;; 2553;BOX DRAWINGS DOWN DOUBLE AND RIGHT SINGLE;So;0;ON;;;;;N;FORMS DOWN DOUBLE AND RIGHT SINGLE;;;; 2554;BOX DRAWINGS DOUBLE DOWN AND RIGHT;So;0;ON;;;;;N;FORMS DOUBLE DOWN AND RIGHT;;;; 2555;BOX DRAWINGS DOWN SINGLE AND LEFT DOUBLE;So;0;ON;;;;;N;FORMS DOWN SINGLE AND LEFT DOUBLE;;;; 2556;BOX DRAWINGS DOWN DOUBLE AND LEFT SINGLE;So;0;ON;;;;;N;FORMS DOWN DOUBLE AND LEFT SINGLE;;;; 2557;BOX DRAWINGS DOUBLE DOWN AND LEFT;So;0;ON;;;;;N;FORMS DOUBLE DOWN AND LEFT;;;; 2558;BOX DRAWINGS UP SINGLE AND RIGHT DOUBLE;So;0;ON;;;;;N;FORMS UP SINGLE AND RIGHT DOUBLE;;;; 2559;BOX DRAWINGS UP DOUBLE AND RIGHT SINGLE;So;0;ON;;;;;N;FORMS UP DOUBLE AND RIGHT SINGLE;;;; 255A;BOX DRAWINGS DOUBLE UP AND RIGHT;So;0;ON;;;;;N;FORMS DOUBLE UP AND RIGHT;;;; 255B;BOX DRAWINGS UP SINGLE AND LEFT DOUBLE;So;0;ON;;;;;N;FORMS UP SINGLE AND LEFT DOUBLE;;;; 255C;BOX DRAWINGS UP DOUBLE AND LEFT SINGLE;So;0;ON;;;;;N;FORMS UP DOUBLE AND LEFT SINGLE;;;; 255D;BOX DRAWINGS DOUBLE UP AND LEFT;So;0;ON;;;;;N;FORMS DOUBLE UP AND LEFT;;;; 255E;BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE;So;0;ON;;;;;N;FORMS VERTICAL SINGLE AND RIGHT DOUBLE;;;; 255F;BOX DRAWINGS VERTICAL DOUBLE AND RIGHT SINGLE;So;0;ON;;;;;N;FORMS VERTICAL DOUBLE AND RIGHT SINGLE;;;; 2560;BOX DRAWINGS DOUBLE VERTICAL AND RIGHT;So;0;ON;;;;;N;FORMS DOUBLE VERTICAL AND RIGHT;;;; 2561;BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE;So;0;ON;;;;;N;FORMS VERTICAL SINGLE AND LEFT DOUBLE;;;; 2562;BOX DRAWINGS VERTICAL DOUBLE AND LEFT SINGLE;So;0;ON;;;;;N;FORMS VERTICAL DOUBLE AND LEFT SINGLE;;;; 2563;BOX DRAWINGS DOUBLE VERTICAL AND LEFT;So;0;ON;;;;;N;FORMS DOUBLE VERTICAL AND LEFT;;;; 2564;BOX DRAWINGS DOWN SINGLE AND HORIZONTAL DOUBLE;So;0;ON;;;;;N;FORMS DOWN SINGLE AND HORIZONTAL DOUBLE;;;; 2565;BOX DRAWINGS DOWN DOUBLE AND HORIZONTAL SINGLE;So;0;ON;;;;;N;FORMS DOWN DOUBLE AND HORIZONTAL SINGLE;;;; 2566;BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL;So;0;ON;;;;;N;FORMS DOUBLE DOWN AND HORIZONTAL;;;; 2567;BOX DRAWINGS UP SINGLE AND HORIZONTAL DOUBLE;So;0;ON;;;;;N;FORMS UP SINGLE AND HORIZONTAL DOUBLE;;;; 2568;BOX DRAWINGS UP DOUBLE AND HORIZONTAL SINGLE;So;0;ON;;;;;N;FORMS UP DOUBLE AND HORIZONTAL SINGLE;;;; 2569;BOX DRAWINGS DOUBLE UP AND HORIZONTAL;So;0;ON;;;;;N;FORMS DOUBLE UP AND HORIZONTAL;;;; 256A;BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE;So;0;ON;;;;;N;FORMS VERTICAL SINGLE AND HORIZONTAL DOUBLE;;;; 256B;BOX DRAWINGS VERTICAL DOUBLE AND HORIZONTAL SINGLE;So;0;ON;;;;;N;FORMS VERTICAL DOUBLE AND HORIZONTAL SINGLE;;;; 256C;BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL;So;0;ON;;;;;N;FORMS DOUBLE VERTICAL AND HORIZONTAL;;;; 256D;BOX DRAWINGS LIGHT ARC DOWN AND RIGHT;So;0;ON;;;;;N;FORMS LIGHT ARC DOWN AND RIGHT;;;; 256E;BOX DRAWINGS LIGHT ARC DOWN AND LEFT;So;0;ON;;;;;N;FORMS LIGHT ARC DOWN AND LEFT;;;; 256F;BOX DRAWINGS LIGHT ARC UP AND LEFT;So;0;ON;;;;;N;FORMS LIGHT ARC UP AND LEFT;;;; 2570;BOX DRAWINGS LIGHT ARC UP AND RIGHT;So;0;ON;;;;;N;FORMS LIGHT ARC UP AND RIGHT;;;; 2571;BOX DRAWINGS LIGHT DIAGONAL UPPER RIGHT TO LOWER LEFT;So;0;ON;;;;;N;FORMS LIGHT DIAGONAL UPPER RIGHT TO LOWER LEFT;;;; 2572;BOX DRAWINGS LIGHT DIAGONAL UPPER LEFT TO LOWER RIGHT;So;0;ON;;;;;N;FORMS LIGHT DIAGONAL UPPER LEFT TO LOWER RIGHT;;;; 2573;BOX DRAWINGS LIGHT DIAGONAL CROSS;So;0;ON;;;;;N;FORMS LIGHT DIAGONAL CROSS;;;; 2574;BOX DRAWINGS LIGHT LEFT;So;0;ON;;;;;N;FORMS LIGHT LEFT;;;; 2575;BOX DRAWINGS LIGHT UP;So;0;ON;;;;;N;FORMS LIGHT UP;;;; 2576;BOX DRAWINGS LIGHT RIGHT;So;0;ON;;;;;N;FORMS LIGHT RIGHT;;;; 2577;BOX DRAWINGS LIGHT DOWN;So;0;ON;;;;;N;FORMS LIGHT DOWN;;;; 2578;BOX DRAWINGS HEAVY LEFT;So;0;ON;;;;;N;FORMS HEAVY LEFT;;;; 2579;BOX DRAWINGS HEAVY UP;So;0;ON;;;;;N;FORMS HEAVY UP;;;; 257A;BOX DRAWINGS HEAVY RIGHT;So;0;ON;;;;;N;FORMS HEAVY RIGHT;;;; 257B;BOX DRAWINGS HEAVY DOWN;So;0;ON;;;;;N;FORMS HEAVY DOWN;;;; 257C;BOX DRAWINGS LIGHT LEFT AND HEAVY RIGHT;So;0;ON;;;;;N;FORMS LIGHT LEFT AND HEAVY RIGHT;;;; 257D;BOX DRAWINGS LIGHT UP AND HEAVY DOWN;So;0;ON;;;;;N;FORMS LIGHT UP AND HEAVY DOWN;;;; 257E;BOX DRAWINGS HEAVY LEFT AND LIGHT RIGHT;So;0;ON;;;;;N;FORMS HEAVY LEFT AND LIGHT RIGHT;;;; 257F;BOX DRAWINGS HEAVY UP AND LIGHT DOWN;So;0;ON;;;;;N;FORMS HEAVY UP AND LIGHT DOWN;;;; 2580;UPPER HALF BLOCK;So;0;ON;;;;;N;;;;; 2581;LOWER ONE EIGHTH BLOCK;So;0;ON;;;;;N;;;;; 2582;LOWER ONE QUARTER BLOCK;So;0;ON;;;;;N;;;;; 2583;LOWER THREE EIGHTHS BLOCK;So;0;ON;;;;;N;;;;; 2584;LOWER HALF BLOCK;So;0;ON;;;;;N;;;;; 2585;LOWER FIVE EIGHTHS BLOCK;So;0;ON;;;;;N;;;;; 2586;LOWER THREE QUARTERS BLOCK;So;0;ON;;;;;N;LOWER THREE QUARTER BLOCK;;;; 2587;LOWER SEVEN EIGHTHS BLOCK;So;0;ON;;;;;N;;;;; 2588;FULL BLOCK;So;0;ON;;;;;N;;;;; 2589;LEFT SEVEN EIGHTHS BLOCK;So;0;ON;;;;;N;;;;; 258A;LEFT THREE QUARTERS BLOCK;So;0;ON;;;;;N;LEFT THREE QUARTER BLOCK;;;; 258B;LEFT FIVE EIGHTHS BLOCK;So;0;ON;;;;;N;;;;; 258C;LEFT HALF BLOCK;So;0;ON;;;;;N;;;;; 258D;LEFT THREE EIGHTHS BLOCK;So;0;ON;;;;;N;;;;; 258E;LEFT ONE QUARTER BLOCK;So;0;ON;;;;;N;;;;; 258F;LEFT ONE EIGHTH BLOCK;So;0;ON;;;;;N;;;;; 2590;RIGHT HALF BLOCK;So;0;ON;;;;;N;;;;; 2591;LIGHT SHADE;So;0;ON;;;;;N;;;;; 2592;MEDIUM SHADE;So;0;ON;;;;;N;;;;; 2593;DARK SHADE;So;0;ON;;;;;N;;;;; 2594;UPPER ONE EIGHTH BLOCK;So;0;ON;;;;;N;;;;; 2595;RIGHT ONE EIGHTH BLOCK;So;0;ON;;;;;N;;;;; 25A0;BLACK SQUARE;So;0;ON;;;;;N;;;;; 25A1;WHITE SQUARE;So;0;ON;;;;;N;;;;; 25A2;WHITE SQUARE WITH ROUNDED CORNERS;So;0;ON;;;;;N;;;;; 25A3;WHITE SQUARE CONTAINING BLACK SMALL SQUARE;So;0;ON;;;;;N;;;;; 25A4;SQUARE WITH HORIZONTAL FILL;So;0;ON;;;;;N;;;;; 25A5;SQUARE WITH VERTICAL FILL;So;0;ON;;;;;N;;;;; 25A6;SQUARE WITH ORTHOGONAL CROSSHATCH FILL;So;0;ON;;;;;N;;;;; 25A7;SQUARE WITH UPPER LEFT TO LOWER RIGHT FILL;So;0;ON;;;;;N;;;;; 25A8;SQUARE WITH UPPER RIGHT TO LOWER LEFT FILL;So;0;ON;;;;;N;;;;; 25A9;SQUARE WITH DIAGONAL CROSSHATCH FILL;So;0;ON;;;;;N;;;;; 25AA;BLACK SMALL SQUARE;So;0;ON;;;;;N;;;;; 25AB;WHITE SMALL SQUARE;So;0;ON;;;;;N;;;;; 25AC;BLACK RECTANGLE;So;0;ON;;;;;N;;;;; 25AD;WHITE RECTANGLE;So;0;ON;;;;;N;;;;; 25AE;BLACK VERTICAL RECTANGLE;So;0;ON;;;;;N;;;;; 25AF;WHITE VERTICAL RECTANGLE;So;0;ON;;;;;N;;;;; 25B0;BLACK PARALLELOGRAM;So;0;ON;;;;;N;;;;; 25B1;WHITE PARALLELOGRAM;So;0;ON;;;;;N;;;;; 25B2;BLACK UP-POINTING TRIANGLE;So;0;ON;;;;;N;BLACK UP POINTING TRIANGLE;;;; 25B3;WHITE UP-POINTING TRIANGLE;So;0;ON;;;;;N;WHITE UP POINTING TRIANGLE;;;; 25B4;BLACK UP-POINTING SMALL TRIANGLE;So;0;ON;;;;;N;BLACK UP POINTING SMALL TRIANGLE;;;; 25B5;WHITE UP-POINTING SMALL TRIANGLE;So;0;ON;;;;;N;WHITE UP POINTING SMALL TRIANGLE;;;; 25B6;BLACK RIGHT-POINTING TRIANGLE;So;0;ON;;;;;N;BLACK RIGHT POINTING TRIANGLE;;;; 25B7;WHITE RIGHT-POINTING TRIANGLE;Sm;0;ON;;;;;N;WHITE RIGHT POINTING TRIANGLE;;;; 25B8;BLACK RIGHT-POINTING SMALL TRIANGLE;So;0;ON;;;;;N;BLACK RIGHT POINTING SMALL TRIANGLE;;;; 25B9;WHITE RIGHT-POINTING SMALL TRIANGLE;So;0;ON;;;;;N;WHITE RIGHT POINTING SMALL TRIANGLE;;;; 25BA;BLACK RIGHT-POINTING POINTER;So;0;ON;;;;;N;BLACK RIGHT POINTING POINTER;;;; 25BB;WHITE RIGHT-POINTING POINTER;So;0;ON;;;;;N;WHITE RIGHT POINTING POINTER;;;; 25BC;BLACK DOWN-POINTING TRIANGLE;So;0;ON;;;;;N;BLACK DOWN POINTING TRIANGLE;;;; 25BD;WHITE DOWN-POINTING TRIANGLE;So;0;ON;;;;;N;WHITE DOWN POINTING TRIANGLE;;;; 25BE;BLACK DOWN-POINTING SMALL TRIANGLE;So;0;ON;;;;;N;BLACK DOWN POINTING SMALL TRIANGLE;;;; 25BF;WHITE DOWN-POINTING SMALL TRIANGLE;So;0;ON;;;;;N;WHITE DOWN POINTING SMALL TRIANGLE;;;; 25C0;BLACK LEFT-POINTING TRIANGLE;So;0;ON;;;;;N;BLACK LEFT POINTING TRIANGLE;;;; 25C1;WHITE LEFT-POINTING TRIANGLE;Sm;0;ON;;;;;N;WHITE LEFT POINTING TRIANGLE;;;; 25C2;BLACK LEFT-POINTING SMALL TRIANGLE;So;0;ON;;;;;N;BLACK LEFT POINTING SMALL TRIANGLE;;;; 25C3;WHITE LEFT-POINTING SMALL TRIANGLE;So;0;ON;;;;;N;WHITE LEFT POINTING SMALL TRIANGLE;;;; 25C4;BLACK LEFT-POINTING POINTER;So;0;ON;;;;;N;BLACK LEFT POINTING POINTER;;;; 25C5;WHITE LEFT-POINTING POINTER;So;0;ON;;;;;N;WHITE LEFT POINTING POINTER;;;; 25C6;BLACK DIAMOND;So;0;ON;;;;;N;;;;; 25C7;WHITE DIAMOND;So;0;ON;;;;;N;;;;; 25C8;WHITE DIAMOND CONTAINING BLACK SMALL DIAMOND;So;0;ON;;;;;N;;;;; 25C9;FISHEYE;So;0;ON;;;;;N;;;;; 25CA;LOZENGE;So;0;ON;;;;;N;;;;; 25CB;WHITE CIRCLE;So;0;ON;;;;;N;;;;; 25CC;DOTTED CIRCLE;So;0;ON;;;;;N;;;;; 25CD;CIRCLE WITH VERTICAL FILL;So;0;ON;;;;;N;;;;; 25CE;BULLSEYE;So;0;ON;;;;;N;;;;; 25CF;BLACK CIRCLE;So;0;ON;;;;;N;;;;; 25D0;CIRCLE WITH LEFT HALF BLACK;So;0;ON;;;;;N;;;;; 25D1;CIRCLE WITH RIGHT HALF BLACK;So;0;ON;;;;;N;;;;; 25D2;CIRCLE WITH LOWER HALF BLACK;So;0;ON;;;;;N;;;;; 25D3;CIRCLE WITH UPPER HALF BLACK;So;0;ON;;;;;N;;;;; 25D4;CIRCLE WITH UPPER RIGHT QUADRANT BLACK;So;0;ON;;;;;N;;;;; 25D5;CIRCLE WITH ALL BUT UPPER LEFT QUADRANT BLACK;So;0;ON;;;;;N;;;;; 25D6;LEFT HALF BLACK CIRCLE;So;0;ON;;;;;N;;;;; 25D7;RIGHT HALF BLACK CIRCLE;So;0;ON;;;;;N;;;;; 25D8;INVERSE BULLET;So;0;ON;;;;;N;;;;; 25D9;INVERSE WHITE CIRCLE;So;0;ON;;;;;N;;;;; 25DA;UPPER HALF INVERSE WHITE CIRCLE;So;0;ON;;;;;N;;;;; 25DB;LOWER HALF INVERSE WHITE CIRCLE;So;0;ON;;;;;N;;;;; 25DC;UPPER LEFT QUADRANT CIRCULAR ARC;So;0;ON;;;;;N;;;;; 25DD;UPPER RIGHT QUADRANT CIRCULAR ARC;So;0;ON;;;;;N;;;;; 25DE;LOWER RIGHT QUADRANT CIRCULAR ARC;So;0;ON;;;;;N;;;;; 25DF;LOWER LEFT QUADRANT CIRCULAR ARC;So;0;ON;;;;;N;;;;; 25E0;UPPER HALF CIRCLE;So;0;ON;;;;;N;;;;; 25E1;LOWER HALF CIRCLE;So;0;ON;;;;;N;;;;; 25E2;BLACK LOWER RIGHT TRIANGLE;So;0;ON;;;;;N;;;;; 25E3;BLACK LOWER LEFT TRIANGLE;So;0;ON;;;;;N;;;;; 25E4;BLACK UPPER LEFT TRIANGLE;So;0;ON;;;;;N;;;;; 25E5;BLACK UPPER RIGHT TRIANGLE;So;0;ON;;;;;N;;;;; 25E6;WHITE BULLET;So;0;ON;;;;;N;;;;; 25E7;SQUARE WITH LEFT HALF BLACK;So;0;ON;;;;;N;;;;; 25E8;SQUARE WITH RIGHT HALF BLACK;So;0;ON;;;;;N;;;;; 25E9;SQUARE WITH UPPER LEFT DIAGONAL HALF BLACK;So;0;ON;;;;;N;;;;; 25EA;SQUARE WITH LOWER RIGHT DIAGONAL HALF BLACK;So;0;ON;;;;;N;;;;; 25EB;WHITE SQUARE WITH VERTICAL BISECTING LINE;So;0;ON;;;;;N;;;;; 25EC;WHITE UP-POINTING TRIANGLE WITH DOT;So;0;ON;;;;;N;WHITE UP POINTING TRIANGLE WITH DOT;;;; 25ED;UP-POINTING TRIANGLE WITH LEFT HALF BLACK;So;0;ON;;;;;N;UP POINTING TRIANGLE WITH LEFT HALF BLACK;;;; 25EE;UP-POINTING TRIANGLE WITH RIGHT HALF BLACK;So;0;ON;;;;;N;UP POINTING TRIANGLE WITH RIGHT HALF BLACK;;;; 25EF;LARGE CIRCLE;So;0;ON;;;;;N;;;;; 25F0;WHITE SQUARE WITH UPPER LEFT QUADRANT;So;0;ON;;;;;N;;;;; 25F1;WHITE SQUARE WITH LOWER LEFT QUADRANT;So;0;ON;;;;;N;;;;; 25F2;WHITE SQUARE WITH LOWER RIGHT QUADRANT;So;0;ON;;;;;N;;;;; 25F3;WHITE SQUARE WITH UPPER RIGHT QUADRANT;So;0;ON;;;;;N;;;;; 25F4;WHITE CIRCLE WITH UPPER LEFT QUADRANT;So;0;ON;;;;;N;;;;; 25F5;WHITE CIRCLE WITH LOWER LEFT QUADRANT;So;0;ON;;;;;N;;;;; 25F6;WHITE CIRCLE WITH LOWER RIGHT QUADRANT;So;0;ON;;;;;N;;;;; 25F7;WHITE CIRCLE WITH UPPER RIGHT QUADRANT;So;0;ON;;;;;N;;;;; 2600;BLACK SUN WITH RAYS;So;0;ON;;;;;N;;;;; 2601;CLOUD;So;0;ON;;;;;N;;;;; 2602;UMBRELLA;So;0;ON;;;;;N;;;;; 2603;SNOWMAN;So;0;ON;;;;;N;;;;; 2604;COMET;So;0;ON;;;;;N;;;;; 2605;BLACK STAR;So;0;ON;;;;;N;;;;; 2606;WHITE STAR;So;0;ON;;;;;N;;;;; 2607;LIGHTNING;So;0;ON;;;;;N;;;;; 2608;THUNDERSTORM;So;0;ON;;;;;N;;;;; 2609;SUN;So;0;ON;;;;;N;;;;; 260A;ASCENDING NODE;So;0;ON;;;;;N;;;;; 260B;DESCENDING NODE;So;0;ON;;;;;N;;;;; 260C;CONJUNCTION;So;0;ON;;;;;N;;;;; 260D;OPPOSITION;So;0;ON;;;;;N;;;;; 260E;BLACK TELEPHONE;So;0;ON;;;;;N;;;;; 260F;WHITE TELEPHONE;So;0;ON;;;;;N;;;;; 2610;BALLOT BOX;So;0;ON;;;;;N;;;;; 2611;BALLOT BOX WITH CHECK;So;0;ON;;;;;N;;;;; 2612;BALLOT BOX WITH X;So;0;ON;;;;;N;;;;; 2613;SALTIRE;So;0;ON;;;;;N;;;;; 2619;REVERSED ROTATED FLORAL HEART BULLET;So;0;ON;;;;;N;;;;; 261A;BLACK LEFT POINTING INDEX;So;0;ON;;;;;N;;;;; 261B;BLACK RIGHT POINTING INDEX;So;0;ON;;;;;N;;;;; 261C;WHITE LEFT POINTING INDEX;So;0;ON;;;;;N;;;;; 261D;WHITE UP POINTING INDEX;So;0;ON;;;;;N;;;;; 261E;WHITE RIGHT POINTING INDEX;So;0;ON;;;;;N;;;;; 261F;WHITE DOWN POINTING INDEX;So;0;ON;;;;;N;;;;; 2620;SKULL AND CROSSBONES;So;0;ON;;;;;N;;;;; 2621;CAUTION SIGN;So;0;ON;;;;;N;;;;; 2622;RADIOACTIVE SIGN;So;0;ON;;;;;N;;;;; 2623;BIOHAZARD SIGN;So;0;ON;;;;;N;;;;; 2624;CADUCEUS;So;0;ON;;;;;N;;;;; 2625;ANKH;So;0;ON;;;;;N;;;;; 2626;ORTHODOX CROSS;So;0;ON;;;;;N;;;;; 2627;CHI RHO;So;0;ON;;;;;N;;;;; 2628;CROSS OF LORRAINE;So;0;ON;;;;;N;;;;; 2629;CROSS OF JERUSALEM;So;0;ON;;;;;N;;;;; 262A;STAR AND CRESCENT;So;0;ON;;;;;N;;;;; 262B;FARSI SYMBOL;So;0;ON;;;;;N;SYMBOL OF IRAN;;;; 262C;ADI SHAKTI;So;0;ON;;;;;N;;;;; 262D;HAMMER AND SICKLE;So;0;ON;;;;;N;;;;; 262E;PEACE SYMBOL;So;0;ON;;;;;N;;;;; 262F;YIN YANG;So;0;ON;;;;;N;;;;; 2630;TRIGRAM FOR HEAVEN;So;0;ON;;;;;N;;;;; 2631;TRIGRAM FOR LAKE;So;0;ON;;;;;N;;;;; 2632;TRIGRAM FOR FIRE;So;0;ON;;;;;N;;;;; 2633;TRIGRAM FOR THUNDER;So;0;ON;;;;;N;;;;; 2634;TRIGRAM FOR WIND;So;0;ON;;;;;N;;;;; 2635;TRIGRAM FOR WATER;So;0;ON;;;;;N;;;;; 2636;TRIGRAM FOR MOUNTAIN;So;0;ON;;;;;N;;;;; 2637;TRIGRAM FOR EARTH;So;0;ON;;;;;N;;;;; 2638;WHEEL OF DHARMA;So;0;ON;;;;;N;;;;; 2639;WHITE FROWNING FACE;So;0;ON;;;;;N;;;;; 263A;WHITE SMILING FACE;So;0;ON;;;;;N;;;;; 263B;BLACK SMILING FACE;So;0;ON;;;;;N;;;;; 263C;WHITE SUN WITH RAYS;So;0;ON;;;;;N;;;;; 263D;FIRST QUARTER MOON;So;0;ON;;;;;N;;;;; 263E;LAST QUARTER MOON;So;0;ON;;;;;N;;;;; 263F;MERCURY;So;0;ON;;;;;N;;;;; 2640;FEMALE SIGN;So;0;ON;;;;;N;;;;; 2641;EARTH;So;0;ON;;;;;N;;;;; 2642;MALE SIGN;So;0;ON;;;;;N;;;;; 2643;JUPITER;So;0;ON;;;;;N;;;;; 2644;SATURN;So;0;ON;;;;;N;;;;; 2645;URANUS;So;0;ON;;;;;N;;;;; 2646;NEPTUNE;So;0;ON;;;;;N;;;;; 2647;PLUTO;So;0;ON;;;;;N;;;;; 2648;ARIES;So;0;ON;;;;;N;;;;; 2649;TAURUS;So;0;ON;;;;;N;;;;; 264A;GEMINI;So;0;ON;;;;;N;;;;; 264B;CANCER;So;0;ON;;;;;N;;;;; 264C;LEO;So;0;ON;;;;;N;;;;; 264D;VIRGO;So;0;ON;;;;;N;;;;; 264E;LIBRA;So;0;ON;;;;;N;;;;; 264F;SCORPIUS;So;0;ON;;;;;N;;;;; 2650;SAGITTARIUS;So;0;ON;;;;;N;;;;; 2651;CAPRICORN;So;0;ON;;;;;N;;;;; 2652;AQUARIUS;So;0;ON;;;;;N;;;;; 2653;PISCES;So;0;ON;;;;;N;;;;; 2654;WHITE CHESS KING;So;0;ON;;;;;N;;;;; 2655;WHITE CHESS QUEEN;So;0;ON;;;;;N;;;;; 2656;WHITE CHESS ROOK;So;0;ON;;;;;N;;;;; 2657;WHITE CHESS BISHOP;So;0;ON;;;;;N;;;;; 2658;WHITE CHESS KNIGHT;So;0;ON;;;;;N;;;;; 2659;WHITE CHESS PAWN;So;0;ON;;;;;N;;;;; 265A;BLACK CHESS KING;So;0;ON;;;;;N;;;;; 265B;BLACK CHESS QUEEN;So;0;ON;;;;;N;;;;; 265C;BLACK CHESS ROOK;So;0;ON;;;;;N;;;;; 265D;BLACK CHESS BISHOP;So;0;ON;;;;;N;;;;; 265E;BLACK CHESS KNIGHT;So;0;ON;;;;;N;;;;; 265F;BLACK CHESS PAWN;So;0;ON;;;;;N;;;;; 2660;BLACK SPADE SUIT;So;0;ON;;;;;N;;;;; 2661;WHITE HEART SUIT;So;0;ON;;;;;N;;;;; 2662;WHITE DIAMOND SUIT;So;0;ON;;;;;N;;;;; 2663;BLACK CLUB SUIT;So;0;ON;;;;;N;;;;; 2664;WHITE SPADE SUIT;So;0;ON;;;;;N;;;;; 2665;BLACK HEART SUIT;So;0;ON;;;;;N;;;;; 2666;BLACK DIAMOND SUIT;So;0;ON;;;;;N;;;;; 2667;WHITE CLUB SUIT;So;0;ON;;;;;N;;;;; 2668;HOT SPRINGS;So;0;ON;;;;;N;;;;; 2669;QUARTER NOTE;So;0;ON;;;;;N;;;;; 266A;EIGHTH NOTE;So;0;ON;;;;;N;;;;; 266B;BEAMED EIGHTH NOTES;So;0;ON;;;;;N;BARRED EIGHTH NOTES;;;; 266C;BEAMED SIXTEENTH NOTES;So;0;ON;;;;;N;BARRED SIXTEENTH NOTES;;;; 266D;MUSIC FLAT SIGN;So;0;ON;;;;;N;FLAT;;;; 266E;MUSIC NATURAL SIGN;So;0;ON;;;;;N;NATURAL;;;; 266F;MUSIC SHARP SIGN;Sm;0;ON;;;;;N;SHARP;;;; 2670;WEST SYRIAC CROSS;So;0;ON;;;;;N;;;;; 2671;EAST SYRIAC CROSS;So;0;ON;;;;;N;;;;; 2701;UPPER BLADE SCISSORS;So;0;ON;;;;;N;;;;; 2702;BLACK SCISSORS;So;0;ON;;;;;N;;;;; 2703;LOWER BLADE SCISSORS;So;0;ON;;;;;N;;;;; 2704;WHITE SCISSORS;So;0;ON;;;;;N;;;;; 2706;TELEPHONE LOCATION SIGN;So;0;ON;;;;;N;;;;; 2707;TAPE DRIVE;So;0;ON;;;;;N;;;;; 2708;AIRPLANE;So;0;ON;;;;;N;;;;; 2709;ENVELOPE;So;0;ON;;;;;N;;;;; 270C;VICTORY HAND;So;0;ON;;;;;N;;;;; 270D;WRITING HAND;So;0;ON;;;;;N;;;;; 270E;LOWER RIGHT PENCIL;So;0;ON;;;;;N;;;;; 270F;PENCIL;So;0;ON;;;;;N;;;;; 2710;UPPER RIGHT PENCIL;So;0;ON;;;;;N;;;;; 2711;WHITE NIB;So;0;ON;;;;;N;;;;; 2712;BLACK NIB;So;0;ON;;;;;N;;;;; 2713;CHECK MARK;So;0;ON;;;;;N;;;;; 2714;HEAVY CHECK MARK;So;0;ON;;;;;N;;;;; 2715;MULTIPLICATION X;So;0;ON;;;;;N;;;;; 2716;HEAVY MULTIPLICATION X;So;0;ON;;;;;N;;;;; 2717;BALLOT X;So;0;ON;;;;;N;;;;; 2718;HEAVY BALLOT X;So;0;ON;;;;;N;;;;; 2719;OUTLINED GREEK CROSS;So;0;ON;;;;;N;;;;; 271A;HEAVY GREEK CROSS;So;0;ON;;;;;N;;;;; 271B;OPEN CENTRE CROSS;So;0;ON;;;;;N;OPEN CENTER CROSS;;;; 271C;HEAVY OPEN CENTRE CROSS;So;0;ON;;;;;N;HEAVY OPEN CENTER CROSS;;;; 271D;LATIN CROSS;So;0;ON;;;;;N;;;;; 271E;SHADOWED WHITE LATIN CROSS;So;0;ON;;;;;N;;;;; 271F;OUTLINED LATIN CROSS;So;0;ON;;;;;N;;;;; 2720;MALTESE CROSS;So;0;ON;;;;;N;;;;; 2721;STAR OF DAVID;So;0;ON;;;;;N;;;;; 2722;FOUR TEARDROP-SPOKED ASTERISK;So;0;ON;;;;;N;;;;; 2723;FOUR BALLOON-SPOKED ASTERISK;So;0;ON;;;;;N;;;;; 2724;HEAVY FOUR BALLOON-SPOKED ASTERISK;So;0;ON;;;;;N;;;;; 2725;FOUR CLUB-SPOKED ASTERISK;So;0;ON;;;;;N;;;;; 2726;BLACK FOUR POINTED STAR;So;0;ON;;;;;N;;;;; 2727;WHITE FOUR POINTED STAR;So;0;ON;;;;;N;;;;; 2729;STRESS OUTLINED WHITE STAR;So;0;ON;;;;;N;;;;; 272A;CIRCLED WHITE STAR;So;0;ON;;;;;N;;;;; 272B;OPEN CENTRE BLACK STAR;So;0;ON;;;;;N;OPEN CENTER BLACK STAR;;;; 272C;BLACK CENTRE WHITE STAR;So;0;ON;;;;;N;BLACK CENTER WHITE STAR;;;; 272D;OUTLINED BLACK STAR;So;0;ON;;;;;N;;;;; 272E;HEAVY OUTLINED BLACK STAR;So;0;ON;;;;;N;;;;; 272F;PINWHEEL STAR;So;0;ON;;;;;N;;;;; 2730;SHADOWED WHITE STAR;So;0;ON;;;;;N;;;;; 2731;HEAVY ASTERISK;So;0;ON;;;;;N;;;;; 2732;OPEN CENTRE ASTERISK;So;0;ON;;;;;N;OPEN CENTER ASTERISK;;;; 2733;EIGHT SPOKED ASTERISK;So;0;ON;;;;;N;;;;; 2734;EIGHT POINTED BLACK STAR;So;0;ON;;;;;N;;;;; 2735;EIGHT POINTED PINWHEEL STAR;So;0;ON;;;;;N;;;;; 2736;SIX POINTED BLACK STAR;So;0;ON;;;;;N;;;;; 2737;EIGHT POINTED RECTILINEAR BLACK STAR;So;0;ON;;;;;N;;;;; 2738;HEAVY EIGHT POINTED RECTILINEAR BLACK STAR;So;0;ON;;;;;N;;;;; 2739;TWELVE POINTED BLACK STAR;So;0;ON;;;;;N;;;;; 273A;SIXTEEN POINTED ASTERISK;So;0;ON;;;;;N;;;;; 273B;TEARDROP-SPOKED ASTERISK;So;0;ON;;;;;N;;;;; 273C;OPEN CENTRE TEARDROP-SPOKED ASTERISK;So;0;ON;;;;;N;OPEN CENTER TEARDROP-SPOKED ASTERISK;;;; 273D;HEAVY TEARDROP-SPOKED ASTERISK;So;0;ON;;;;;N;;;;; 273E;SIX PETALLED BLACK AND WHITE FLORETTE;So;0;ON;;;;;N;;;;; 273F;BLACK FLORETTE;So;0;ON;;;;;N;;;;; 2740;WHITE FLORETTE;So;0;ON;;;;;N;;;;; 2741;EIGHT PETALLED OUTLINED BLACK FLORETTE;So;0;ON;;;;;N;;;;; 2742;CIRCLED OPEN CENTRE EIGHT POINTED STAR;So;0;ON;;;;;N;CIRCLED OPEN CENTER EIGHT POINTED STAR;;;; 2743;HEAVY TEARDROP-SPOKED PINWHEEL ASTERISK;So;0;ON;;;;;N;;;;; 2744;SNOWFLAKE;So;0;ON;;;;;N;;;;; 2745;TIGHT TRIFOLIATE SNOWFLAKE;So;0;ON;;;;;N;;;;; 2746;HEAVY CHEVRON SNOWFLAKE;So;0;ON;;;;;N;;;;; 2747;SPARKLE;So;0;ON;;;;;N;;;;; 2748;HEAVY SPARKLE;So;0;ON;;;;;N;;;;; 2749;BALLOON-SPOKED ASTERISK;So;0;ON;;;;;N;;;;; 274A;EIGHT TEARDROP-SPOKED PROPELLER ASTERISK;So;0;ON;;;;;N;;;;; 274B;HEAVY EIGHT TEARDROP-SPOKED PROPELLER ASTERISK;So;0;ON;;;;;N;;;;; 274D;SHADOWED WHITE CIRCLE;So;0;ON;;;;;N;;;;; 274F;LOWER RIGHT DROP-SHADOWED WHITE SQUARE;So;0;ON;;;;;N;;;;; 2750;UPPER RIGHT DROP-SHADOWED WHITE SQUARE;So;0;ON;;;;;N;;;;; 2751;LOWER RIGHT SHADOWED WHITE SQUARE;So;0;ON;;;;;N;;;;; 2752;UPPER RIGHT SHADOWED WHITE SQUARE;So;0;ON;;;;;N;;;;; 2756;BLACK DIAMOND MINUS WHITE X;So;0;ON;;;;;N;;;;; 2758;LIGHT VERTICAL BAR;So;0;ON;;;;;N;;;;; 2759;MEDIUM VERTICAL BAR;So;0;ON;;;;;N;;;;; 275A;HEAVY VERTICAL BAR;So;0;ON;;;;;N;;;;; 275B;HEAVY SINGLE TURNED COMMA QUOTATION MARK ORNAMENT;So;0;ON;;;;;N;;;;; 275C;HEAVY SINGLE COMMA QUOTATION MARK ORNAMENT;So;0;ON;;;;;N;;;;; 275D;HEAVY DOUBLE TURNED COMMA QUOTATION MARK ORNAMENT;So;0;ON;;;;;N;;;;; 275E;HEAVY DOUBLE COMMA QUOTATION MARK ORNAMENT;So;0;ON;;;;;N;;;;; 2761;CURVED STEM PARAGRAPH SIGN ORNAMENT;So;0;ON;;;;;N;;;;; 2762;HEAVY EXCLAMATION MARK ORNAMENT;So;0;ON;;;;;N;;;;; 2763;HEAVY HEART EXCLAMATION MARK ORNAMENT;So;0;ON;;;;;N;;;;; 2764;HEAVY BLACK HEART;So;0;ON;;;;;N;;;;; 2765;ROTATED HEAVY BLACK HEART BULLET;So;0;ON;;;;;N;;;;; 2766;FLORAL HEART;So;0;ON;;;;;N;;;;; 2767;ROTATED FLORAL HEART BULLET;So;0;ON;;;;;N;;;;; 2776;DINGBAT NEGATIVE CIRCLED DIGIT ONE;No;0;ON;;;1;1;N;INVERSE CIRCLED DIGIT ONE;;;; 2777;DINGBAT NEGATIVE CIRCLED DIGIT TWO;No;0;ON;;;2;2;N;INVERSE CIRCLED DIGIT TWO;;;; 2778;DINGBAT NEGATIVE CIRCLED DIGIT THREE;No;0;ON;;;3;3;N;INVERSE CIRCLED DIGIT THREE;;;; 2779;DINGBAT NEGATIVE CIRCLED DIGIT FOUR;No;0;ON;;;4;4;N;INVERSE CIRCLED DIGIT FOUR;;;; 277A;DINGBAT NEGATIVE CIRCLED DIGIT FIVE;No;0;ON;;;5;5;N;INVERSE CIRCLED DIGIT FIVE;;;; 277B;DINGBAT NEGATIVE CIRCLED DIGIT SIX;No;0;ON;;;6;6;N;INVERSE CIRCLED DIGIT SIX;;;; 277C;DINGBAT NEGATIVE CIRCLED DIGIT SEVEN;No;0;ON;;;7;7;N;INVERSE CIRCLED DIGIT SEVEN;;;; 277D;DINGBAT NEGATIVE CIRCLED DIGIT EIGHT;No;0;ON;;;8;8;N;INVERSE CIRCLED DIGIT EIGHT;;;; 277E;DINGBAT NEGATIVE CIRCLED DIGIT NINE;No;0;ON;;;9;9;N;INVERSE CIRCLED DIGIT NINE;;;; 277F;DINGBAT NEGATIVE CIRCLED NUMBER TEN;No;0;ON;;;;10;N;INVERSE CIRCLED NUMBER TEN;;;; 2780;DINGBAT CIRCLED SANS-SERIF DIGIT ONE;No;0;ON;;;1;1;N;CIRCLED SANS-SERIF DIGIT ONE;;;; 2781;DINGBAT CIRCLED SANS-SERIF DIGIT TWO;No;0;ON;;;2;2;N;CIRCLED SANS-SERIF DIGIT TWO;;;; 2782;DINGBAT CIRCLED SANS-SERIF DIGIT THREE;No;0;ON;;;3;3;N;CIRCLED SANS-SERIF DIGIT THREE;;;; 2783;DINGBAT CIRCLED SANS-SERIF DIGIT FOUR;No;0;ON;;;4;4;N;CIRCLED SANS-SERIF DIGIT FOUR;;;; 2784;DINGBAT CIRCLED SANS-SERIF DIGIT FIVE;No;0;ON;;;5;5;N;CIRCLED SANS-SERIF DIGIT FIVE;;;; 2785;DINGBAT CIRCLED SANS-SERIF DIGIT SIX;No;0;ON;;;6;6;N;CIRCLED SANS-SERIF DIGIT SIX;;;; 2786;DINGBAT CIRCLED SANS-SERIF DIGIT SEVEN;No;0;ON;;;7;7;N;CIRCLED SANS-SERIF DIGIT SEVEN;;;; 2787;DINGBAT CIRCLED SANS-SERIF DIGIT EIGHT;No;0;ON;;;8;8;N;CIRCLED SANS-SERIF DIGIT EIGHT;;;; 2788;DINGBAT CIRCLED SANS-SERIF DIGIT NINE;No;0;ON;;;9;9;N;CIRCLED SANS-SERIF DIGIT NINE;;;; 2789;DINGBAT CIRCLED SANS-SERIF NUMBER TEN;No;0;ON;;;;10;N;CIRCLED SANS-SERIF NUMBER TEN;;;; 278A;DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT ONE;No;0;ON;;;1;1;N;INVERSE CIRCLED SANS-SERIF DIGIT ONE;;;; 278B;DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT TWO;No;0;ON;;;2;2;N;INVERSE CIRCLED SANS-SERIF DIGIT TWO;;;; 278C;DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT THREE;No;0;ON;;;3;3;N;INVERSE CIRCLED SANS-SERIF DIGIT THREE;;;; 278D;DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT FOUR;No;0;ON;;;4;4;N;INVERSE CIRCLED SANS-SERIF DIGIT FOUR;;;; 278E;DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT FIVE;No;0;ON;;;5;5;N;INVERSE CIRCLED SANS-SERIF DIGIT FIVE;;;; 278F;DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT SIX;No;0;ON;;;6;6;N;INVERSE CIRCLED SANS-SERIF DIGIT SIX;;;; 2790;DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT SEVEN;No;0;ON;;;7;7;N;INVERSE CIRCLED SANS-SERIF DIGIT SEVEN;;;; 2791;DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT EIGHT;No;0;ON;;;8;8;N;INVERSE CIRCLED SANS-SERIF DIGIT EIGHT;;;; 2792;DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT NINE;No;0;ON;;;9;9;N;INVERSE CIRCLED SANS-SERIF DIGIT NINE;;;; 2793;DINGBAT NEGATIVE CIRCLED SANS-SERIF NUMBER TEN;No;0;ON;;;;10;N;INVERSE CIRCLED SANS-SERIF NUMBER TEN;;;; 2794;HEAVY WIDE-HEADED RIGHTWARDS ARROW;So;0;ON;;;;;N;HEAVY WIDE-HEADED RIGHT ARROW;;;; 2798;HEAVY SOUTH EAST ARROW;So;0;ON;;;;;N;HEAVY LOWER RIGHT ARROW;;;; 2799;HEAVY RIGHTWARDS ARROW;So;0;ON;;;;;N;HEAVY RIGHT ARROW;;;; 279A;HEAVY NORTH EAST ARROW;So;0;ON;;;;;N;HEAVY UPPER RIGHT ARROW;;;; 279B;DRAFTING POINT RIGHTWARDS ARROW;So;0;ON;;;;;N;DRAFTING POINT RIGHT ARROW;;;; 279C;HEAVY ROUND-TIPPED RIGHTWARDS ARROW;So;0;ON;;;;;N;HEAVY ROUND-TIPPED RIGHT ARROW;;;; 279D;TRIANGLE-HEADED RIGHTWARDS ARROW;So;0;ON;;;;;N;TRIANGLE-HEADED RIGHT ARROW;;;; 279E;HEAVY TRIANGLE-HEADED RIGHTWARDS ARROW;So;0;ON;;;;;N;HEAVY TRIANGLE-HEADED RIGHT ARROW;;;; 279F;DASHED TRIANGLE-HEADED RIGHTWARDS ARROW;So;0;ON;;;;;N;DASHED TRIANGLE-HEADED RIGHT ARROW;;;; 27A0;HEAVY DASHED TRIANGLE-HEADED RIGHTWARDS ARROW;So;0;ON;;;;;N;HEAVY DASHED TRIANGLE-HEADED RIGHT ARROW;;;; 27A1;BLACK RIGHTWARDS ARROW;So;0;ON;;;;;N;BLACK RIGHT ARROW;;;; 27A2;THREE-D TOP-LIGHTED RIGHTWARDS ARROWHEAD;So;0;ON;;;;;N;THREE-D TOP-LIGHTED RIGHT ARROWHEAD;;;; 27A3;THREE-D BOTTOM-LIGHTED RIGHTWARDS ARROWHEAD;So;0;ON;;;;;N;THREE-D BOTTOM-LIGHTED RIGHT ARROWHEAD;;;; 27A4;BLACK RIGHTWARDS ARROWHEAD;So;0;ON;;;;;N;BLACK RIGHT ARROWHEAD;;;; 27A5;HEAVY BLACK CURVED DOWNWARDS AND RIGHTWARDS ARROW;So;0;ON;;;;;N;HEAVY BLACK CURVED DOWN AND RIGHT ARROW;;;; 27A6;HEAVY BLACK CURVED UPWARDS AND RIGHTWARDS ARROW;So;0;ON;;;;;N;HEAVY BLACK CURVED UP AND RIGHT ARROW;;;; 27A7;SQUAT BLACK RIGHTWARDS ARROW;So;0;ON;;;;;N;SQUAT BLACK RIGHT ARROW;;;; 27A8;HEAVY CONCAVE-POINTED BLACK RIGHTWARDS ARROW;So;0;ON;;;;;N;HEAVY CONCAVE-POINTED BLACK RIGHT ARROW;;;; 27A9;RIGHT-SHADED WHITE RIGHTWARDS ARROW;So;0;ON;;;;;N;RIGHT-SHADED WHITE RIGHT ARROW;;;; 27AA;LEFT-SHADED WHITE RIGHTWARDS ARROW;So;0;ON;;;;;N;LEFT-SHADED WHITE RIGHT ARROW;;;; 27AB;BACK-TILTED SHADOWED WHITE RIGHTWARDS ARROW;So;0;ON;;;;;N;BACK-TILTED SHADOWED WHITE RIGHT ARROW;;;; 27AC;FRONT-TILTED SHADOWED WHITE RIGHTWARDS ARROW;So;0;ON;;;;;N;FRONT-TILTED SHADOWED WHITE RIGHT ARROW;;;; 27AD;HEAVY LOWER RIGHT-SHADOWED WHITE RIGHTWARDS ARROW;So;0;ON;;;;;N;HEAVY LOWER RIGHT-SHADOWED WHITE RIGHT ARROW;;;; 27AE;HEAVY UPPER RIGHT-SHADOWED WHITE RIGHTWARDS ARROW;So;0;ON;;;;;N;HEAVY UPPER RIGHT-SHADOWED WHITE RIGHT ARROW;;;; 27AF;NOTCHED LOWER RIGHT-SHADOWED WHITE RIGHTWARDS ARROW;So;0;ON;;;;;N;NOTCHED LOWER RIGHT-SHADOWED WHITE RIGHT ARROW;;;; 27B1;NOTCHED UPPER RIGHT-SHADOWED WHITE RIGHTWARDS ARROW;So;0;ON;;;;;N;NOTCHED UPPER RIGHT-SHADOWED WHITE RIGHT ARROW;;;; 27B2;CIRCLED HEAVY WHITE RIGHTWARDS ARROW;So;0;ON;;;;;N;CIRCLED HEAVY WHITE RIGHT ARROW;;;; 27B3;WHITE-FEATHERED RIGHTWARDS ARROW;So;0;ON;;;;;N;WHITE-FEATHERED RIGHT ARROW;;;; 27B4;BLACK-FEATHERED SOUTH EAST ARROW;So;0;ON;;;;;N;BLACK-FEATHERED LOWER RIGHT ARROW;;;; 27B5;BLACK-FEATHERED RIGHTWARDS ARROW;So;0;ON;;;;;N;BLACK-FEATHERED RIGHT ARROW;;;; 27B6;BLACK-FEATHERED NORTH EAST ARROW;So;0;ON;;;;;N;BLACK-FEATHERED UPPER RIGHT ARROW;;;; 27B7;HEAVY BLACK-FEATHERED SOUTH EAST ARROW;So;0;ON;;;;;N;HEAVY BLACK-FEATHERED LOWER RIGHT ARROW;;;; 27B8;HEAVY BLACK-FEATHERED RIGHTWARDS ARROW;So;0;ON;;;;;N;HEAVY BLACK-FEATHERED RIGHT ARROW;;;; 27B9;HEAVY BLACK-FEATHERED NORTH EAST ARROW;So;0;ON;;;;;N;HEAVY BLACK-FEATHERED UPPER RIGHT ARROW;;;; 27BA;TEARDROP-BARBED RIGHTWARDS ARROW;So;0;ON;;;;;N;TEARDROP-BARBED RIGHT ARROW;;;; 27BB;HEAVY TEARDROP-SHANKED RIGHTWARDS ARROW;So;0;ON;;;;;N;HEAVY TEARDROP-SHANKED RIGHT ARROW;;;; 27BC;WEDGE-TAILED RIGHTWARDS ARROW;So;0;ON;;;;;N;WEDGE-TAILED RIGHT ARROW;;;; 27BD;HEAVY WEDGE-TAILED RIGHTWARDS ARROW;So;0;ON;;;;;N;HEAVY WEDGE-TAILED RIGHT ARROW;;;; 27BE;OPEN-OUTLINED RIGHTWARDS ARROW;So;0;ON;;;;;N;OPEN-OUTLINED RIGHT ARROW;;;; 2800;BRAILLE PATTERN BLANK;So;0;ON;;;;;N;;;;; 2801;BRAILLE PATTERN DOTS-1;So;0;ON;;;;;N;;;;; 2802;BRAILLE PATTERN DOTS-2;So;0;ON;;;;;N;;;;; 2803;BRAILLE PATTERN DOTS-12;So;0;ON;;;;;N;;;;; 2804;BRAILLE PATTERN DOTS-3;So;0;ON;;;;;N;;;;; 2805;BRAILLE PATTERN DOTS-13;So;0;ON;;;;;N;;;;; 2806;BRAILLE PATTERN DOTS-23;So;0;ON;;;;;N;;;;; 2807;BRAILLE PATTERN DOTS-123;So;0;ON;;;;;N;;;;; 2808;BRAILLE PATTERN DOTS-4;So;0;ON;;;;;N;;;;; 2809;BRAILLE PATTERN DOTS-14;So;0;ON;;;;;N;;;;; 280A;BRAILLE PATTERN DOTS-24;So;0;ON;;;;;N;;;;; 280B;BRAILLE PATTERN DOTS-124;So;0;ON;;;;;N;;;;; 280C;BRAILLE PATTERN DOTS-34;So;0;ON;;;;;N;;;;; 280D;BRAILLE PATTERN DOTS-134;So;0;ON;;;;;N;;;;; 280E;BRAILLE PATTERN DOTS-234;So;0;ON;;;;;N;;;;; 280F;BRAILLE PATTERN DOTS-1234;So;0;ON;;;;;N;;;;; 2810;BRAILLE PATTERN DOTS-5;So;0;ON;;;;;N;;;;; 2811;BRAILLE PATTERN DOTS-15;So;0;ON;;;;;N;;;;; 2812;BRAILLE PATTERN DOTS-25;So;0;ON;;;;;N;;;;; 2813;BRAILLE PATTERN DOTS-125;So;0;ON;;;;;N;;;;; 2814;BRAILLE PATTERN DOTS-35;So;0;ON;;;;;N;;;;; 2815;BRAILLE PATTERN DOTS-135;So;0;ON;;;;;N;;;;; 2816;BRAILLE PATTERN DOTS-235;So;0;ON;;;;;N;;;;; 2817;BRAILLE PATTERN DOTS-1235;So;0;ON;;;;;N;;;;; 2818;BRAILLE PATTERN DOTS-45;So;0;ON;;;;;N;;;;; 2819;BRAILLE PATTERN DOTS-145;So;0;ON;;;;;N;;;;; 281A;BRAILLE PATTERN DOTS-245;So;0;ON;;;;;N;;;;; 281B;BRAILLE PATTERN DOTS-1245;So;0;ON;;;;;N;;;;; 281C;BRAILLE PATTERN DOTS-345;So;0;ON;;;;;N;;;;; 281D;BRAILLE PATTERN DOTS-1345;So;0;ON;;;;;N;;;;; 281E;BRAILLE PATTERN DOTS-2345;So;0;ON;;;;;N;;;;; 281F;BRAILLE PATTERN DOTS-12345;So;0;ON;;;;;N;;;;; 2820;BRAILLE PATTERN DOTS-6;So;0;ON;;;;;N;;;;; 2821;BRAILLE PATTERN DOTS-16;So;0;ON;;;;;N;;;;; 2822;BRAILLE PATTERN DOTS-26;So;0;ON;;;;;N;;;;; 2823;BRAILLE PATTERN DOTS-126;So;0;ON;;;;;N;;;;; 2824;BRAILLE PATTERN DOTS-36;So;0;ON;;;;;N;;;;; 2825;BRAILLE PATTERN DOTS-136;So;0;ON;;;;;N;;;;; 2826;BRAILLE PATTERN DOTS-236;So;0;ON;;;;;N;;;;; 2827;BRAILLE PATTERN DOTS-1236;So;0;ON;;;;;N;;;;; 2828;BRAILLE PATTERN DOTS-46;So;0;ON;;;;;N;;;;; 2829;BRAILLE PATTERN DOTS-146;So;0;ON;;;;;N;;;;; 282A;BRAILLE PATTERN DOTS-246;So;0;ON;;;;;N;;;;; 282B;BRAILLE PATTERN DOTS-1246;So;0;ON;;;;;N;;;;; 282C;BRAILLE PATTERN DOTS-346;So;0;ON;;;;;N;;;;; 282D;BRAILLE PATTERN DOTS-1346;So;0;ON;;;;;N;;;;; 282E;BRAILLE PATTERN DOTS-2346;So;0;ON;;;;;N;;;;; 282F;BRAILLE PATTERN DOTS-12346;So;0;ON;;;;;N;;;;; 2830;BRAILLE PATTERN DOTS-56;So;0;ON;;;;;N;;;;; 2831;BRAILLE PATTERN DOTS-156;So;0;ON;;;;;N;;;;; 2832;BRAILLE PATTERN DOTS-256;So;0;ON;;;;;N;;;;; 2833;BRAILLE PATTERN DOTS-1256;So;0;ON;;;;;N;;;;; 2834;BRAILLE PATTERN DOTS-356;So;0;ON;;;;;N;;;;; 2835;BRAILLE PATTERN DOTS-1356;So;0;ON;;;;;N;;;;; 2836;BRAILLE PATTERN DOTS-2356;So;0;ON;;;;;N;;;;; 2837;BRAILLE PATTERN DOTS-12356;So;0;ON;;;;;N;;;;; 2838;BRAILLE PATTERN DOTS-456;So;0;ON;;;;;N;;;;; 2839;BRAILLE PATTERN DOTS-1456;So;0;ON;;;;;N;;;;; 283A;BRAILLE PATTERN DOTS-2456;So;0;ON;;;;;N;;;;; 283B;BRAILLE PATTERN DOTS-12456;So;0;ON;;;;;N;;;;; 283C;BRAILLE PATTERN DOTS-3456;So;0;ON;;;;;N;;;;; 283D;BRAILLE PATTERN DOTS-13456;So;0;ON;;;;;N;;;;; 283E;BRAILLE PATTERN DOTS-23456;So;0;ON;;;;;N;;;;; 283F;BRAILLE PATTERN DOTS-123456;So;0;ON;;;;;N;;;;; 2840;BRAILLE PATTERN DOTS-7;So;0;ON;;;;;N;;;;; 2841;BRAILLE PATTERN DOTS-17;So;0;ON;;;;;N;;;;; 2842;BRAILLE PATTERN DOTS-27;So;0;ON;;;;;N;;;;; 2843;BRAILLE PATTERN DOTS-127;So;0;ON;;;;;N;;;;; 2844;BRAILLE PATTERN DOTS-37;So;0;ON;;;;;N;;;;; 2845;BRAILLE PATTERN DOTS-137;So;0;ON;;;;;N;;;;; 2846;BRAILLE PATTERN DOTS-237;So;0;ON;;;;;N;;;;; 2847;BRAILLE PATTERN DOTS-1237;So;0;ON;;;;;N;;;;; 2848;BRAILLE PATTERN DOTS-47;So;0;ON;;;;;N;;;;; 2849;BRAILLE PATTERN DOTS-147;So;0;ON;;;;;N;;;;; 284A;BRAILLE PATTERN DOTS-247;So;0;ON;;;;;N;;;;; 284B;BRAILLE PATTERN DOTS-1247;So;0;ON;;;;;N;;;;; 284C;BRAILLE PATTERN DOTS-347;So;0;ON;;;;;N;;;;; 284D;BRAILLE PATTERN DOTS-1347;So;0;ON;;;;;N;;;;; 284E;BRAILLE PATTERN DOTS-2347;So;0;ON;;;;;N;;;;; 284F;BRAILLE PATTERN DOTS-12347;So;0;ON;;;;;N;;;;; 2850;BRAILLE PATTERN DOTS-57;So;0;ON;;;;;N;;;;; 2851;BRAILLE PATTERN DOTS-157;So;0;ON;;;;;N;;;;; 2852;BRAILLE PATTERN DOTS-257;So;0;ON;;;;;N;;;;; 2853;BRAILLE PATTERN DOTS-1257;So;0;ON;;;;;N;;;;; 2854;BRAILLE PATTERN DOTS-357;So;0;ON;;;;;N;;;;; 2855;BRAILLE PATTERN DOTS-1357;So;0;ON;;;;;N;;;;; 2856;BRAILLE PATTERN DOTS-2357;So;0;ON;;;;;N;;;;; 2857;BRAILLE PATTERN DOTS-12357;So;0;ON;;;;;N;;;;; 2858;BRAILLE PATTERN DOTS-457;So;0;ON;;;;;N;;;;; 2859;BRAILLE PATTERN DOTS-1457;So;0;ON;;;;;N;;;;; 285A;BRAILLE PATTERN DOTS-2457;So;0;ON;;;;;N;;;;; 285B;BRAILLE PATTERN DOTS-12457;So;0;ON;;;;;N;;;;; 285C;BRAILLE PATTERN DOTS-3457;So;0;ON;;;;;N;;;;; 285D;BRAILLE PATTERN DOTS-13457;So;0;ON;;;;;N;;;;; 285E;BRAILLE PATTERN DOTS-23457;So;0;ON;;;;;N;;;;; 285F;BRAILLE PATTERN DOTS-123457;So;0;ON;;;;;N;;;;; 2860;BRAILLE PATTERN DOTS-67;So;0;ON;;;;;N;;;;; 2861;BRAILLE PATTERN DOTS-167;So;0;ON;;;;;N;;;;; 2862;BRAILLE PATTERN DOTS-267;So;0;ON;;;;;N;;;;; 2863;BRAILLE PATTERN DOTS-1267;So;0;ON;;;;;N;;;;; 2864;BRAILLE PATTERN DOTS-367;So;0;ON;;;;;N;;;;; 2865;BRAILLE PATTERN DOTS-1367;So;0;ON;;;;;N;;;;; 2866;BRAILLE PATTERN DOTS-2367;So;0;ON;;;;;N;;;;; 2867;BRAILLE PATTERN DOTS-12367;So;0;ON;;;;;N;;;;; 2868;BRAILLE PATTERN DOTS-467;So;0;ON;;;;;N;;;;; 2869;BRAILLE PATTERN DOTS-1467;So;0;ON;;;;;N;;;;; 286A;BRAILLE PATTERN DOTS-2467;So;0;ON;;;;;N;;;;; 286B;BRAILLE PATTERN DOTS-12467;So;0;ON;;;;;N;;;;; 286C;BRAILLE PATTERN DOTS-3467;So;0;ON;;;;;N;;;;; 286D;BRAILLE PATTERN DOTS-13467;So;0;ON;;;;;N;;;;; 286E;BRAILLE PATTERN DOTS-23467;So;0;ON;;;;;N;;;;; 286F;BRAILLE PATTERN DOTS-123467;So;0;ON;;;;;N;;;;; 2870;BRAILLE PATTERN DOTS-567;So;0;ON;;;;;N;;;;; 2871;BRAILLE PATTERN DOTS-1567;So;0;ON;;;;;N;;;;; 2872;BRAILLE PATTERN DOTS-2567;So;0;ON;;;;;N;;;;; 2873;BRAILLE PATTERN DOTS-12567;So;0;ON;;;;;N;;;;; 2874;BRAILLE PATTERN DOTS-3567;So;0;ON;;;;;N;;;;; 2875;BRAILLE PATTERN DOTS-13567;So;0;ON;;;;;N;;;;; 2876;BRAILLE PATTERN DOTS-23567;So;0;ON;;;;;N;;;;; 2877;BRAILLE PATTERN DOTS-123567;So;0;ON;;;;;N;;;;; 2878;BRAILLE PATTERN DOTS-4567;So;0;ON;;;;;N;;;;; 2879;BRAILLE PATTERN DOTS-14567;So;0;ON;;;;;N;;;;; 287A;BRAILLE PATTERN DOTS-24567;So;0;ON;;;;;N;;;;; 287B;BRAILLE PATTERN DOTS-124567;So;0;ON;;;;;N;;;;; 287C;BRAILLE PATTERN DOTS-34567;So;0;ON;;;;;N;;;;; 287D;BRAILLE PATTERN DOTS-134567;So;0;ON;;;;;N;;;;; 287E;BRAILLE PATTERN DOTS-234567;So;0;ON;;;;;N;;;;; 287F;BRAILLE PATTERN DOTS-1234567;So;0;ON;;;;;N;;;;; 2880;BRAILLE PATTERN DOTS-8;So;0;ON;;;;;N;;;;; 2881;BRAILLE PATTERN DOTS-18;So;0;ON;;;;;N;;;;; 2882;BRAILLE PATTERN DOTS-28;So;0;ON;;;;;N;;;;; 2883;BRAILLE PATTERN DOTS-128;So;0;ON;;;;;N;;;;; 2884;BRAILLE PATTERN DOTS-38;So;0;ON;;;;;N;;;;; 2885;BRAILLE PATTERN DOTS-138;So;0;ON;;;;;N;;;;; 2886;BRAILLE PATTERN DOTS-238;So;0;ON;;;;;N;;;;; 2887;BRAILLE PATTERN DOTS-1238;So;0;ON;;;;;N;;;;; 2888;BRAILLE PATTERN DOTS-48;So;0;ON;;;;;N;;;;; 2889;BRAILLE PATTERN DOTS-148;So;0;ON;;;;;N;;;;; 288A;BRAILLE PATTERN DOTS-248;So;0;ON;;;;;N;;;;; 288B;BRAILLE PATTERN DOTS-1248;So;0;ON;;;;;N;;;;; 288C;BRAILLE PATTERN DOTS-348;So;0;ON;;;;;N;;;;; 288D;BRAILLE PATTERN DOTS-1348;So;0;ON;;;;;N;;;;; 288E;BRAILLE PATTERN DOTS-2348;So;0;ON;;;;;N;;;;; 288F;BRAILLE PATTERN DOTS-12348;So;0;ON;;;;;N;;;;; 2890;BRAILLE PATTERN DOTS-58;So;0;ON;;;;;N;;;;; 2891;BRAILLE PATTERN DOTS-158;So;0;ON;;;;;N;;;;; 2892;BRAILLE PATTERN DOTS-258;So;0;ON;;;;;N;;;;; 2893;BRAILLE PATTERN DOTS-1258;So;0;ON;;;;;N;;;;; 2894;BRAILLE PATTERN DOTS-358;So;0;ON;;;;;N;;;;; 2895;BRAILLE PATTERN DOTS-1358;So;0;ON;;;;;N;;;;; 2896;BRAILLE PATTERN DOTS-2358;So;0;ON;;;;;N;;;;; 2897;BRAILLE PATTERN DOTS-12358;So;0;ON;;;;;N;;;;; 2898;BRAILLE PATTERN DOTS-458;So;0;ON;;;;;N;;;;; 2899;BRAILLE PATTERN DOTS-1458;So;0;ON;;;;;N;;;;; 289A;BRAILLE PATTERN DOTS-2458;So;0;ON;;;;;N;;;;; 289B;BRAILLE PATTERN DOTS-12458;So;0;ON;;;;;N;;;;; 289C;BRAILLE PATTERN DOTS-3458;So;0;ON;;;;;N;;;;; 289D;BRAILLE PATTERN DOTS-13458;So;0;ON;;;;;N;;;;; 289E;BRAILLE PATTERN DOTS-23458;So;0;ON;;;;;N;;;;; 289F;BRAILLE PATTERN DOTS-123458;So;0;ON;;;;;N;;;;; 28A0;BRAILLE PATTERN DOTS-68;So;0;ON;;;;;N;;;;; 28A1;BRAILLE PATTERN DOTS-168;So;0;ON;;;;;N;;;;; 28A2;BRAILLE PATTERN DOTS-268;So;0;ON;;;;;N;;;;; 28A3;BRAILLE PATTERN DOTS-1268;So;0;ON;;;;;N;;;;; 28A4;BRAILLE PATTERN DOTS-368;So;0;ON;;;;;N;;;;; 28A5;BRAILLE PATTERN DOTS-1368;So;0;ON;;;;;N;;;;; 28A6;BRAILLE PATTERN DOTS-2368;So;0;ON;;;;;N;;;;; 28A7;BRAILLE PATTERN DOTS-12368;So;0;ON;;;;;N;;;;; 28A8;BRAILLE PATTERN DOTS-468;So;0;ON;;;;;N;;;;; 28A9;BRAILLE PATTERN DOTS-1468;So;0;ON;;;;;N;;;;; 28AA;BRAILLE PATTERN DOTS-2468;So;0;ON;;;;;N;;;;; 28AB;BRAILLE PATTERN DOTS-12468;So;0;ON;;;;;N;;;;; 28AC;BRAILLE PATTERN DOTS-3468;So;0;ON;;;;;N;;;;; 28AD;BRAILLE PATTERN DOTS-13468;So;0;ON;;;;;N;;;;; 28AE;BRAILLE PATTERN DOTS-23468;So;0;ON;;;;;N;;;;; 28AF;BRAILLE PATTERN DOTS-123468;So;0;ON;;;;;N;;;;; 28B0;BRAILLE PATTERN DOTS-568;So;0;ON;;;;;N;;;;; 28B1;BRAILLE PATTERN DOTS-1568;So;0;ON;;;;;N;;;;; 28B2;BRAILLE PATTERN DOTS-2568;So;0;ON;;;;;N;;;;; 28B3;BRAILLE PATTERN DOTS-12568;So;0;ON;;;;;N;;;;; 28B4;BRAILLE PATTERN DOTS-3568;So;0;ON;;;;;N;;;;; 28B5;BRAILLE PATTERN DOTS-13568;So;0;ON;;;;;N;;;;; 28B6;BRAILLE PATTERN DOTS-23568;So;0;ON;;;;;N;;;;; 28B7;BRAILLE PATTERN DOTS-123568;So;0;ON;;;;;N;;;;; 28B8;BRAILLE PATTERN DOTS-4568;So;0;ON;;;;;N;;;;; 28B9;BRAILLE PATTERN DOTS-14568;So;0;ON;;;;;N;;;;; 28BA;BRAILLE PATTERN DOTS-24568;So;0;ON;;;;;N;;;;; 28BB;BRAILLE PATTERN DOTS-124568;So;0;ON;;;;;N;;;;; 28BC;BRAILLE PATTERN DOTS-34568;So;0;ON;;;;;N;;;;; 28BD;BRAILLE PATTERN DOTS-134568;So;0;ON;;;;;N;;;;; 28BE;BRAILLE PATTERN DOTS-234568;So;0;ON;;;;;N;;;;; 28BF;BRAILLE PATTERN DOTS-1234568;So;0;ON;;;;;N;;;;; 28C0;BRAILLE PATTERN DOTS-78;So;0;ON;;;;;N;;;;; 28C1;BRAILLE PATTERN DOTS-178;So;0;ON;;;;;N;;;;; 28C2;BRAILLE PATTERN DOTS-278;So;0;ON;;;;;N;;;;; 28C3;BRAILLE PATTERN DOTS-1278;So;0;ON;;;;;N;;;;; 28C4;BRAILLE PATTERN DOTS-378;So;0;ON;;;;;N;;;;; 28C5;BRAILLE PATTERN DOTS-1378;So;0;ON;;;;;N;;;;; 28C6;BRAILLE PATTERN DOTS-2378;So;0;ON;;;;;N;;;;; 28C7;BRAILLE PATTERN DOTS-12378;So;0;ON;;;;;N;;;;; 28C8;BRAILLE PATTERN DOTS-478;So;0;ON;;;;;N;;;;; 28C9;BRAILLE PATTERN DOTS-1478;So;0;ON;;;;;N;;;;; 28CA;BRAILLE PATTERN DOTS-2478;So;0;ON;;;;;N;;;;; 28CB;BRAILLE PATTERN DOTS-12478;So;0;ON;;;;;N;;;;; 28CC;BRAILLE PATTERN DOTS-3478;So;0;ON;;;;;N;;;;; 28CD;BRAILLE PATTERN DOTS-13478;So;0;ON;;;;;N;;;;; 28CE;BRAILLE PATTERN DOTS-23478;So;0;ON;;;;;N;;;;; 28CF;BRAILLE PATTERN DOTS-123478;So;0;ON;;;;;N;;;;; 28D0;BRAILLE PATTERN DOTS-578;So;0;ON;;;;;N;;;;; 28D1;BRAILLE PATTERN DOTS-1578;So;0;ON;;;;;N;;;;; 28D2;BRAILLE PATTERN DOTS-2578;So;0;ON;;;;;N;;;;; 28D3;BRAILLE PATTERN DOTS-12578;So;0;ON;;;;;N;;;;; 28D4;BRAILLE PATTERN DOTS-3578;So;0;ON;;;;;N;;;;; 28D5;BRAILLE PATTERN DOTS-13578;So;0;ON;;;;;N;;;;; 28D6;BRAILLE PATTERN DOTS-23578;So;0;ON;;;;;N;;;;; 28D7;BRAILLE PATTERN DOTS-123578;So;0;ON;;;;;N;;;;; 28D8;BRAILLE PATTERN DOTS-4578;So;0;ON;;;;;N;;;;; 28D9;BRAILLE PATTERN DOTS-14578;So;0;ON;;;;;N;;;;; 28DA;BRAILLE PATTERN DOTS-24578;So;0;ON;;;;;N;;;;; 28DB;BRAILLE PATTERN DOTS-124578;So;0;ON;;;;;N;;;;; 28DC;BRAILLE PATTERN DOTS-34578;So;0;ON;;;;;N;;;;; 28DD;BRAILLE PATTERN DOTS-134578;So;0;ON;;;;;N;;;;; 28DE;BRAILLE PATTERN DOTS-234578;So;0;ON;;;;;N;;;;; 28DF;BRAILLE PATTERN DOTS-1234578;So;0;ON;;;;;N;;;;; 28E0;BRAILLE PATTERN DOTS-678;So;0;ON;;;;;N;;;;; 28E1;BRAILLE PATTERN DOTS-1678;So;0;ON;;;;;N;;;;; 28E2;BRAILLE PATTERN DOTS-2678;So;0;ON;;;;;N;;;;; 28E3;BRAILLE PATTERN DOTS-12678;So;0;ON;;;;;N;;;;; 28E4;BRAILLE PATTERN DOTS-3678;So;0;ON;;;;;N;;;;; 28E5;BRAILLE PATTERN DOTS-13678;So;0;ON;;;;;N;;;;; 28E6;BRAILLE PATTERN DOTS-23678;So;0;ON;;;;;N;;;;; 28E7;BRAILLE PATTERN DOTS-123678;So;0;ON;;;;;N;;;;; 28E8;BRAILLE PATTERN DOTS-4678;So;0;ON;;;;;N;;;;; 28E9;BRAILLE PATTERN DOTS-14678;So;0;ON;;;;;N;;;;; 28EA;BRAILLE PATTERN DOTS-24678;So;0;ON;;;;;N;;;;; 28EB;BRAILLE PATTERN DOTS-124678;So;0;ON;;;;;N;;;;; 28EC;BRAILLE PATTERN DOTS-34678;So;0;ON;;;;;N;;;;; 28ED;BRAILLE PATTERN DOTS-134678;So;0;ON;;;;;N;;;;; 28EE;BRAILLE PATTERN DOTS-234678;So;0;ON;;;;;N;;;;; 28EF;BRAILLE PATTERN DOTS-1234678;So;0;ON;;;;;N;;;;; 28F0;BRAILLE PATTERN DOTS-5678;So;0;ON;;;;;N;;;;; 28F1;BRAILLE PATTERN DOTS-15678;So;0;ON;;;;;N;;;;; 28F2;BRAILLE PATTERN DOTS-25678;So;0;ON;;;;;N;;;;; 28F3;BRAILLE PATTERN DOTS-125678;So;0;ON;;;;;N;;;;; 28F4;BRAILLE PATTERN DOTS-35678;So;0;ON;;;;;N;;;;; 28F5;BRAILLE PATTERN DOTS-135678;So;0;ON;;;;;N;;;;; 28F6;BRAILLE PATTERN DOTS-235678;So;0;ON;;;;;N;;;;; 28F7;BRAILLE PATTERN DOTS-1235678;So;0;ON;;;;;N;;;;; 28F8;BRAILLE PATTERN DOTS-45678;So;0;ON;;;;;N;;;;; 28F9;BRAILLE PATTERN DOTS-145678;So;0;ON;;;;;N;;;;; 28FA;BRAILLE PATTERN DOTS-245678;So;0;ON;;;;;N;;;;; 28FB;BRAILLE PATTERN DOTS-1245678;So;0;ON;;;;;N;;;;; 28FC;BRAILLE PATTERN DOTS-345678;So;0;ON;;;;;N;;;;; 28FD;BRAILLE PATTERN DOTS-1345678;So;0;ON;;;;;N;;;;; 28FE;BRAILLE PATTERN DOTS-2345678;So;0;ON;;;;;N;;;;; 28FF;BRAILLE PATTERN DOTS-12345678;So;0;ON;;;;;N;;;;; 2E80;CJK RADICAL REPEAT;So;0;ON;;;;;N;;;;; 2E81;CJK RADICAL CLIFF;So;0;ON;;;;;N;;;;; 2E82;CJK RADICAL SECOND ONE;So;0;ON;;;;;N;;;;; 2E83;CJK RADICAL SECOND TWO;So;0;ON;;;;;N;;;;; 2E84;CJK RADICAL SECOND THREE;So;0;ON;;;;;N;;;;; 2E85;CJK RADICAL PERSON;So;0;ON;;;;;N;;;;; 2E86;CJK RADICAL BOX;So;0;ON;;;;;N;;;;; 2E87;CJK RADICAL TABLE;So;0;ON;;;;;N;;;;; 2E88;CJK RADICAL KNIFE ONE;So;0;ON;;;;;N;;;;; 2E89;CJK RADICAL KNIFE TWO;So;0;ON;;;;;N;;;;; 2E8A;CJK RADICAL DIVINATION;So;0;ON;;;;;N;;;;; 2E8B;CJK RADICAL SEAL;So;0;ON;;;;;N;;;;; 2E8C;CJK RADICAL SMALL ONE;So;0;ON;;;;;N;;;;; 2E8D;CJK RADICAL SMALL TWO;So;0;ON;;;;;N;;;;; 2E8E;CJK RADICAL LAME ONE;So;0;ON;;;;;N;;;;; 2E8F;CJK RADICAL LAME TWO;So;0;ON;;;;;N;;;;; 2E90;CJK RADICAL LAME THREE;So;0;ON;;;;;N;;;;; 2E91;CJK RADICAL LAME FOUR;So;0;ON;;;;;N;;;;; 2E92;CJK RADICAL SNAKE;So;0;ON;;;;;N;;;;; 2E93;CJK RADICAL THREAD;So;0;ON;;;;;N;;;;; 2E94;CJK RADICAL SNOUT ONE;So;0;ON;;;;;N;;;;; 2E95;CJK RADICAL SNOUT TWO;So;0;ON;;;;;N;;;;; 2E96;CJK RADICAL HEART ONE;So;0;ON;;;;;N;;;;; 2E97;CJK RADICAL HEART TWO;So;0;ON;;;;;N;;;;; 2E98;CJK RADICAL HAND;So;0;ON;;;;;N;;;;; 2E99;CJK RADICAL RAP;So;0;ON;;;;;N;;;;; 2E9B;CJK RADICAL CHOKE;So;0;ON;;;;;N;;;;; 2E9C;CJK RADICAL SUN;So;0;ON;;;;;N;;;;; 2E9D;CJK RADICAL MOON;So;0;ON;;;;;N;;;;; 2E9E;CJK RADICAL DEATH;So;0;ON;;;;;N;;;;; 2E9F;CJK RADICAL MOTHER;So;0;ON; 6BCD;;;;N;;;;; 2EA0;CJK RADICAL CIVILIAN;So;0;ON;;;;;N;;;;; 2EA1;CJK RADICAL WATER ONE;So;0;ON;;;;;N;;;;; 2EA2;CJK RADICAL WATER TWO;So;0;ON;;;;;N;;;;; 2EA3;CJK RADICAL FIRE;So;0;ON;;;;;N;;;;; 2EA4;CJK RADICAL PAW ONE;So;0;ON;;;;;N;;;;; 2EA5;CJK RADICAL PAW TWO;So;0;ON;;;;;N;;;;; 2EA6;CJK RADICAL SIMPLIFIED HALF TREE TRUNK;So;0;ON;;;;;N;;;;; 2EA7;CJK RADICAL COW;So;0;ON;;;;;N;;;;; 2EA8;CJK RADICAL DOG;So;0;ON;;;;;N;;;;; 2EA9;CJK RADICAL JADE;So;0;ON;;;;;N;;;;; 2EAA;CJK RADICAL BOLT OF CLOTH;So;0;ON;;;;;N;;;;; 2EAB;CJK RADICAL EYE;So;0;ON;;;;;N;;;;; 2EAC;CJK RADICAL SPIRIT ONE;So;0;ON;;;;;N;;;;; 2EAD;CJK RADICAL SPIRIT TWO;So;0;ON;;;;;N;;;;; 2EAE;CJK RADICAL BAMBOO;So;0;ON;;;;;N;;;;; 2EAF;CJK RADICAL SILK;So;0;ON;;;;;N;;;;; 2EB0;CJK RADICAL C-SIMPLIFIED SILK;So;0;ON;;;;;N;;;;; 2EB1;CJK RADICAL NET ONE;So;0;ON;;;;;N;;;;; 2EB2;CJK RADICAL NET TWO;So;0;ON;;;;;N;;;;; 2EB3;CJK RADICAL NET THREE;So;0;ON;;;;;N;;;;; 2EB4;CJK RADICAL NET FOUR;So;0;ON;;;;;N;;;;; 2EB5;CJK RADICAL MESH;So;0;ON;;;;;N;;;;; 2EB6;CJK RADICAL SHEEP;So;0;ON;;;;;N;;;;; 2EB7;CJK RADICAL RAM;So;0;ON;;;;;N;;;;; 2EB8;CJK RADICAL EWE;So;0;ON;;;;;N;;;;; 2EB9;CJK RADICAL OLD;So;0;ON;;;;;N;;;;; 2EBA;CJK RADICAL BRUSH ONE;So;0;ON;;;;;N;;;;; 2EBB;CJK RADICAL BRUSH TWO;So;0;ON;;;;;N;;;;; 2EBC;CJK RADICAL MEAT;So;0;ON;;;;;N;;;;; 2EBD;CJK RADICAL MORTAR;So;0;ON;;;;;N;;;;; 2EBE;CJK RADICAL GRASS ONE;So;0;ON;;;;;N;;;;; 2EBF;CJK RADICAL GRASS TWO;So;0;ON;;;;;N;;;;; 2EC0;CJK RADICAL GRASS THREE;So;0;ON;;;;;N;;;;; 2EC1;CJK RADICAL TIGER;So;0;ON;;;;;N;;;;; 2EC2;CJK RADICAL CLOTHES;So;0;ON;;;;;N;;;;; 2EC3;CJK RADICAL WEST ONE;So;0;ON;;;;;N;;;;; 2EC4;CJK RADICAL WEST TWO;So;0;ON;;;;;N;;;;; 2EC5;CJK RADICAL C-SIMPLIFIED SEE;So;0;ON;;;;;N;;;;; 2EC6;CJK RADICAL SIMPLIFIED HORN;So;0;ON;;;;;N;;;;; 2EC7;CJK RADICAL HORN;So;0;ON;;;;;N;;;;; 2EC8;CJK RADICAL C-SIMPLIFIED SPEECH;So;0;ON;;;;;N;;;;; 2EC9;CJK RADICAL C-SIMPLIFIED SHELL;So;0;ON;;;;;N;;;;; 2ECA;CJK RADICAL FOOT;So;0;ON;;;;;N;;;;; 2ECB;CJK RADICAL C-SIMPLIFIED CART;So;0;ON;;;;;N;;;;; 2ECC;CJK RADICAL SIMPLIFIED WALK;So;0;ON;;;;;N;;;;; 2ECD;CJK RADICAL WALK ONE;So;0;ON;;;;;N;;;;; 2ECE;CJK RADICAL WALK TWO;So;0;ON;;;;;N;;;;; 2ECF;CJK RADICAL CITY;So;0;ON;;;;;N;;;;; 2ED0;CJK RADICAL C-SIMPLIFIED GOLD;So;0;ON;;;;;N;;;;; 2ED1;CJK RADICAL LONG ONE;So;0;ON;;;;;N;;;;; 2ED2;CJK RADICAL LONG TWO;So;0;ON;;;;;N;;;;; 2ED3;CJK RADICAL C-SIMPLIFIED LONG;So;0;ON;;;;;N;;;;; 2ED4;CJK RADICAL C-SIMPLIFIED GATE;So;0;ON;;;;;N;;;;; 2ED5;CJK RADICAL MOUND ONE;So;0;ON;;;;;N;;;;; 2ED6;CJK RADICAL MOUND TWO;So;0;ON;;;;;N;;;;; 2ED7;CJK RADICAL RAIN;So;0;ON;;;;;N;;;;; 2ED8;CJK RADICAL BLUE;So;0;ON;;;;;N;;;;; 2ED9;CJK RADICAL C-SIMPLIFIED TANNED LEATHER;So;0;ON;;;;;N;;;;; 2EDA;CJK RADICAL C-SIMPLIFIED LEAF;So;0;ON;;;;;N;;;;; 2EDB;CJK RADICAL C-SIMPLIFIED WIND;So;0;ON;;;;;N;;;;; 2EDC;CJK RADICAL C-SIMPLIFIED FLY;So;0;ON;;;;;N;;;;; 2EDD;CJK RADICAL EAT ONE;So;0;ON;;;;;N;;;;; 2EDE;CJK RADICAL EAT TWO;So;0;ON;;;;;N;;;;; 2EDF;CJK RADICAL EAT THREE;So;0;ON;;;;;N;;;;; 2EE0;CJK RADICAL C-SIMPLIFIED EAT;So;0;ON;;;;;N;;;;; 2EE1;CJK RADICAL HEAD;So;0;ON;;;;;N;;;;; 2EE2;CJK RADICAL C-SIMPLIFIED HORSE;So;0;ON;;;;;N;;;;; 2EE3;CJK RADICAL BONE;So;0;ON;;;;;N;;;;; 2EE4;CJK RADICAL GHOST;So;0;ON;;;;;N;;;;; 2EE5;CJK RADICAL C-SIMPLIFIED FISH;So;0;ON;;;;;N;;;;; 2EE6;CJK RADICAL C-SIMPLIFIED BIRD;So;0;ON;;;;;N;;;;; 2EE7;CJK RADICAL C-SIMPLIFIED SALT;So;0;ON;;;;;N;;;;; 2EE8;CJK RADICAL SIMPLIFIED WHEAT;So;0;ON;;;;;N;;;;; 2EE9;CJK RADICAL SIMPLIFIED YELLOW;So;0;ON;;;;;N;;;;; 2EEA;CJK RADICAL C-SIMPLIFIED FROG;So;0;ON;;;;;N;;;;; 2EEB;CJK RADICAL J-SIMPLIFIED EVEN;So;0;ON;;;;;N;;;;; 2EEC;CJK RADICAL C-SIMPLIFIED EVEN;So;0;ON;;;;;N;;;;; 2EED;CJK RADICAL J-SIMPLIFIED TOOTH;So;0;ON;;;;;N;;;;; 2EEE;CJK RADICAL C-SIMPLIFIED TOOTH;So;0;ON;;;;;N;;;;; 2EEF;CJK RADICAL J-SIMPLIFIED DRAGON;So;0;ON;;;;;N;;;;; 2EF0;CJK RADICAL C-SIMPLIFIED DRAGON;So;0;ON;;;;;N;;;;; 2EF1;CJK RADICAL TURTLE;So;0;ON;;;;;N;;;;; 2EF2;CJK RADICAL J-SIMPLIFIED TURTLE;So;0;ON;;;;;N;;;;; 2EF3;CJK RADICAL C-SIMPLIFIED TURTLE;So;0;ON; 9F9F;;;;N;;;;; 2F00;KANGXI RADICAL ONE;So;0;ON; 4E00;;;;N;;;;; 2F01;KANGXI RADICAL LINE;So;0;ON; 4E28;;;;N;;;;; 2F02;KANGXI RADICAL DOT;So;0;ON; 4E36;;;;N;;;;; 2F03;KANGXI RADICAL SLASH;So;0;ON; 4E3F;;;;N;;;;; 2F04;KANGXI RADICAL SECOND;So;0;ON; 4E59;;;;N;;;;; 2F05;KANGXI RADICAL HOOK;So;0;ON; 4E85;;;;N;;;;; 2F06;KANGXI RADICAL TWO;So;0;ON; 4E8C;;;;N;;;;; 2F07;KANGXI RADICAL LID;So;0;ON; 4EA0;;;;N;;;;; 2F08;KANGXI RADICAL MAN;So;0;ON; 4EBA;;;;N;;;;; 2F09;KANGXI RADICAL LEGS;So;0;ON; 513F;;;;N;;;;; 2F0A;KANGXI RADICAL ENTER;So;0;ON; 5165;;;;N;;;;; 2F0B;KANGXI RADICAL EIGHT;So;0;ON; 516B;;;;N;;;;; 2F0C;KANGXI RADICAL DOWN BOX;So;0;ON; 5182;;;;N;;;;; 2F0D;KANGXI RADICAL COVER;So;0;ON; 5196;;;;N;;;;; 2F0E;KANGXI RADICAL ICE;So;0;ON; 51AB;;;;N;;;;; 2F0F;KANGXI RADICAL TABLE;So;0;ON; 51E0;;;;N;;;;; 2F10;KANGXI RADICAL OPEN BOX;So;0;ON; 51F5;;;;N;;;;; 2F11;KANGXI RADICAL KNIFE;So;0;ON; 5200;;;;N;;;;; 2F12;KANGXI RADICAL POWER;So;0;ON; 529B;;;;N;;;;; 2F13;KANGXI RADICAL WRAP;So;0;ON; 52F9;;;;N;;;;; 2F14;KANGXI RADICAL SPOON;So;0;ON; 5315;;;;N;;;;; 2F15;KANGXI RADICAL RIGHT OPEN BOX;So;0;ON; 531A;;;;N;;;;; 2F16;KANGXI RADICAL HIDING ENCLOSURE;So;0;ON; 5338;;;;N;;;;; 2F17;KANGXI RADICAL TEN;So;0;ON; 5341;;;;N;;;;; 2F18;KANGXI RADICAL DIVINATION;So;0;ON; 535C;;;;N;;;;; 2F19;KANGXI RADICAL SEAL;So;0;ON; 5369;;;;N;;;;; 2F1A;KANGXI RADICAL CLIFF;So;0;ON; 5382;;;;N;;;;; 2F1B;KANGXI RADICAL PRIVATE;So;0;ON; 53B6;;;;N;;;;; 2F1C;KANGXI RADICAL AGAIN;So;0;ON; 53C8;;;;N;;;;; 2F1D;KANGXI RADICAL MOUTH;So;0;ON; 53E3;;;;N;;;;; 2F1E;KANGXI RADICAL ENCLOSURE;So;0;ON; 56D7;;;;N;;;;; 2F1F;KANGXI RADICAL EARTH;So;0;ON; 571F;;;;N;;;;; 2F20;KANGXI RADICAL SCHOLAR;So;0;ON; 58EB;;;;N;;;;; 2F21;KANGXI RADICAL GO;So;0;ON; 5902;;;;N;;;;; 2F22;KANGXI RADICAL GO SLOWLY;So;0;ON; 590A;;;;N;;;;; 2F23;KANGXI RADICAL EVENING;So;0;ON; 5915;;;;N;;;;; 2F24;KANGXI RADICAL BIG;So;0;ON; 5927;;;;N;;;;; 2F25;KANGXI RADICAL WOMAN;So;0;ON; 5973;;;;N;;;;; 2F26;KANGXI RADICAL CHILD;So;0;ON; 5B50;;;;N;;;;; 2F27;KANGXI RADICAL ROOF;So;0;ON; 5B80;;;;N;;;;; 2F28;KANGXI RADICAL INCH;So;0;ON; 5BF8;;;;N;;;;; 2F29;KANGXI RADICAL SMALL;So;0;ON; 5C0F;;;;N;;;;; 2F2A;KANGXI RADICAL LAME;So;0;ON; 5C22;;;;N;;;;; 2F2B;KANGXI RADICAL CORPSE;So;0;ON; 5C38;;;;N;;;;; 2F2C;KANGXI RADICAL SPROUT;So;0;ON; 5C6E;;;;N;;;;; 2F2D;KANGXI RADICAL MOUNTAIN;So;0;ON; 5C71;;;;N;;;;; 2F2E;KANGXI RADICAL RIVER;So;0;ON; 5DDB;;;;N;;;;; 2F2F;KANGXI RADICAL WORK;So;0;ON; 5DE5;;;;N;;;;; 2F30;KANGXI RADICAL ONESELF;So;0;ON; 5DF1;;;;N;;;;; 2F31;KANGXI RADICAL TURBAN;So;0;ON; 5DFE;;;;N;;;;; 2F32;KANGXI RADICAL DRY;So;0;ON; 5E72;;;;N;;;;; 2F33;KANGXI RADICAL SHORT THREAD;So;0;ON; 5E7A;;;;N;;;;; 2F34;KANGXI RADICAL DOTTED CLIFF;So;0;ON; 5E7F;;;;N;;;;; 2F35;KANGXI RADICAL LONG STRIDE;So;0;ON; 5EF4;;;;N;;;;; 2F36;KANGXI RADICAL TWO HANDS;So;0;ON; 5EFE;;;;N;;;;; 2F37;KANGXI RADICAL SHOOT;So;0;ON; 5F0B;;;;N;;;;; 2F38;KANGXI RADICAL BOW;So;0;ON; 5F13;;;;N;;;;; 2F39;KANGXI RADICAL SNOUT;So;0;ON; 5F50;;;;N;;;;; 2F3A;KANGXI RADICAL BRISTLE;So;0;ON; 5F61;;;;N;;;;; 2F3B;KANGXI RADICAL STEP;So;0;ON; 5F73;;;;N;;;;; 2F3C;KANGXI RADICAL HEART;So;0;ON; 5FC3;;;;N;;;;; 2F3D;KANGXI RADICAL HALBERD;So;0;ON; 6208;;;;N;;;;; 2F3E;KANGXI RADICAL DOOR;So;0;ON; 6236;;;;N;;;;; 2F3F;KANGXI RADICAL HAND;So;0;ON; 624B;;;;N;;;;; 2F40;KANGXI RADICAL BRANCH;So;0;ON; 652F;;;;N;;;;; 2F41;KANGXI RADICAL RAP;So;0;ON; 6534;;;;N;;;;; 2F42;KANGXI RADICAL SCRIPT;So;0;ON; 6587;;;;N;;;;; 2F43;KANGXI RADICAL DIPPER;So;0;ON; 6597;;;;N;;;;; 2F44;KANGXI RADICAL AXE;So;0;ON; 65A4;;;;N;;;;; 2F45;KANGXI RADICAL SQUARE;So;0;ON; 65B9;;;;N;;;;; 2F46;KANGXI RADICAL NOT;So;0;ON; 65E0;;;;N;;;;; 2F47;KANGXI RADICAL SUN;So;0;ON; 65E5;;;;N;;;;; 2F48;KANGXI RADICAL SAY;So;0;ON; 66F0;;;;N;;;;; 2F49;KANGXI RADICAL MOON;So;0;ON; 6708;;;;N;;;;; 2F4A;KANGXI RADICAL TREE;So;0;ON; 6728;;;;N;;;;; 2F4B;KANGXI RADICAL LACK;So;0;ON; 6B20;;;;N;;;;; 2F4C;KANGXI RADICAL STOP;So;0;ON; 6B62;;;;N;;;;; 2F4D;KANGXI RADICAL DEATH;So;0;ON; 6B79;;;;N;;;;; 2F4E;KANGXI RADICAL WEAPON;So;0;ON; 6BB3;;;;N;;;;; 2F4F;KANGXI RADICAL DO NOT;So;0;ON; 6BCB;;;;N;;;;; 2F50;KANGXI RADICAL COMPARE;So;0;ON; 6BD4;;;;N;;;;; 2F51;KANGXI RADICAL FUR;So;0;ON; 6BDB;;;;N;;;;; 2F52;KANGXI RADICAL CLAN;So;0;ON; 6C0F;;;;N;;;;; 2F53;KANGXI RADICAL STEAM;So;0;ON; 6C14;;;;N;;;;; 2F54;KANGXI RADICAL WATER;So;0;ON; 6C34;;;;N;;;;; 2F55;KANGXI RADICAL FIRE;So;0;ON; 706B;;;;N;;;;; 2F56;KANGXI RADICAL CLAW;So;0;ON; 722A;;;;N;;;;; 2F57;KANGXI RADICAL FATHER;So;0;ON; 7236;;;;N;;;;; 2F58;KANGXI RADICAL DOUBLE X;So;0;ON; 723B;;;;N;;;;; 2F59;KANGXI RADICAL HALF TREE TRUNK;So;0;ON; 723F;;;;N;;;;; 2F5A;KANGXI RADICAL SLICE;So;0;ON; 7247;;;;N;;;;; 2F5B;KANGXI RADICAL FANG;So;0;ON; 7259;;;;N;;;;; 2F5C;KANGXI RADICAL COW;So;0;ON; 725B;;;;N;;;;; 2F5D;KANGXI RADICAL DOG;So;0;ON; 72AC;;;;N;;;;; 2F5E;KANGXI RADICAL PROFOUND;So;0;ON; 7384;;;;N;;;;; 2F5F;KANGXI RADICAL JADE;So;0;ON; 7389;;;;N;;;;; 2F60;KANGXI RADICAL MELON;So;0;ON; 74DC;;;;N;;;;; 2F61;KANGXI RADICAL TILE;So;0;ON; 74E6;;;;N;;;;; 2F62;KANGXI RADICAL SWEET;So;0;ON; 7518;;;;N;;;;; 2F63;KANGXI RADICAL LIFE;So;0;ON; 751F;;;;N;;;;; 2F64;KANGXI RADICAL USE;So;0;ON; 7528;;;;N;;;;; 2F65;KANGXI RADICAL FIELD;So;0;ON; 7530;;;;N;;;;; 2F66;KANGXI RADICAL BOLT OF CLOTH;So;0;ON; 758B;;;;N;;;;; 2F67;KANGXI RADICAL SICKNESS;So;0;ON; 7592;;;;N;;;;; 2F68;KANGXI RADICAL DOTTED TENT;So;0;ON; 7676;;;;N;;;;; 2F69;KANGXI RADICAL WHITE;So;0;ON; 767D;;;;N;;;;; 2F6A;KANGXI RADICAL SKIN;So;0;ON; 76AE;;;;N;;;;; 2F6B;KANGXI RADICAL DISH;So;0;ON; 76BF;;;;N;;;;; 2F6C;KANGXI RADICAL EYE;So;0;ON; 76EE;;;;N;;;;; 2F6D;KANGXI RADICAL SPEAR;So;0;ON; 77DB;;;;N;;;;; 2F6E;KANGXI RADICAL ARROW;So;0;ON; 77E2;;;;N;;;;; 2F6F;KANGXI RADICAL STONE;So;0;ON; 77F3;;;;N;;;;; 2F70;KANGXI RADICAL SPIRIT;So;0;ON; 793A;;;;N;;;;; 2F71;KANGXI RADICAL TRACK;So;0;ON; 79B8;;;;N;;;;; 2F72;KANGXI RADICAL GRAIN;So;0;ON; 79BE;;;;N;;;;; 2F73;KANGXI RADICAL CAVE;So;0;ON; 7A74;;;;N;;;;; 2F74;KANGXI RADICAL STAND;So;0;ON; 7ACB;;;;N;;;;; 2F75;KANGXI RADICAL BAMBOO;So;0;ON; 7AF9;;;;N;;;;; 2F76;KANGXI RADICAL RICE;So;0;ON; 7C73;;;;N;;;;; 2F77;KANGXI RADICAL SILK;So;0;ON; 7CF8;;;;N;;;;; 2F78;KANGXI RADICAL JAR;So;0;ON; 7F36;;;;N;;;;; 2F79;KANGXI RADICAL NET;So;0;ON; 7F51;;;;N;;;;; 2F7A;KANGXI RADICAL SHEEP;So;0;ON; 7F8A;;;;N;;;;; 2F7B;KANGXI RADICAL FEATHER;So;0;ON; 7FBD;;;;N;;;;; 2F7C;KANGXI RADICAL OLD;So;0;ON; 8001;;;;N;;;;; 2F7D;KANGXI RADICAL AND;So;0;ON; 800C;;;;N;;;;; 2F7E;KANGXI RADICAL PLOW;So;0;ON; 8012;;;;N;;;;; 2F7F;KANGXI RADICAL EAR;So;0;ON; 8033;;;;N;;;;; 2F80;KANGXI RADICAL BRUSH;So;0;ON; 807F;;;;N;;;;; 2F81;KANGXI RADICAL MEAT;So;0;ON; 8089;;;;N;;;;; 2F82;KANGXI RADICAL MINISTER;So;0;ON; 81E3;;;;N;;;;; 2F83;KANGXI RADICAL SELF;So;0;ON; 81EA;;;;N;;;;; 2F84;KANGXI RADICAL ARRIVE;So;0;ON; 81F3;;;;N;;;;; 2F85;KANGXI RADICAL MORTAR;So;0;ON; 81FC;;;;N;;;;; 2F86;KANGXI RADICAL TONGUE;So;0;ON; 820C;;;;N;;;;; 2F87;KANGXI RADICAL OPPOSE;So;0;ON; 821B;;;;N;;;;; 2F88;KANGXI RADICAL BOAT;So;0;ON; 821F;;;;N;;;;; 2F89;KANGXI RADICAL STOPPING;So;0;ON; 826E;;;;N;;;;; 2F8A;KANGXI RADICAL COLOR;So;0;ON; 8272;;;;N;;;;; 2F8B;KANGXI RADICAL GRASS;So;0;ON; 8278;;;;N;;;;; 2F8C;KANGXI RADICAL TIGER;So;0;ON; 864D;;;;N;;;;; 2F8D;KANGXI RADICAL INSECT;So;0;ON; 866B;;;;N;;;;; 2F8E;KANGXI RADICAL BLOOD;So;0;ON; 8840;;;;N;;;;; 2F8F;KANGXI RADICAL WALK ENCLOSURE;So;0;ON; 884C;;;;N;;;;; 2F90;KANGXI RADICAL CLOTHES;So;0;ON; 8863;;;;N;;;;; 2F91;KANGXI RADICAL WEST;So;0;ON; 897E;;;;N;;;;; 2F92;KANGXI RADICAL SEE;So;0;ON; 898B;;;;N;;;;; 2F93;KANGXI RADICAL HORN;So;0;ON; 89D2;;;;N;;;;; 2F94;KANGXI RADICAL SPEECH;So;0;ON; 8A00;;;;N;;;;; 2F95;KANGXI RADICAL VALLEY;So;0;ON; 8C37;;;;N;;;;; 2F96;KANGXI RADICAL BEAN;So;0;ON; 8C46;;;;N;;;;; 2F97;KANGXI RADICAL PIG;So;0;ON; 8C55;;;;N;;;;; 2F98;KANGXI RADICAL BADGER;So;0;ON; 8C78;;;;N;;;;; 2F99;KANGXI RADICAL SHELL;So;0;ON; 8C9D;;;;N;;;;; 2F9A;KANGXI RADICAL RED;So;0;ON; 8D64;;;;N;;;;; 2F9B;KANGXI RADICAL RUN;So;0;ON; 8D70;;;;N;;;;; 2F9C;KANGXI RADICAL FOOT;So;0;ON; 8DB3;;;;N;;;;; 2F9D;KANGXI RADICAL BODY;So;0;ON; 8EAB;;;;N;;;;; 2F9E;KANGXI RADICAL CART;So;0;ON; 8ECA;;;;N;;;;; 2F9F;KANGXI RADICAL BITTER;So;0;ON; 8F9B;;;;N;;;;; 2FA0;KANGXI RADICAL MORNING;So;0;ON; 8FB0;;;;N;;;;; 2FA1;KANGXI RADICAL WALK;So;0;ON; 8FB5;;;;N;;;;; 2FA2;KANGXI RADICAL CITY;So;0;ON; 9091;;;;N;;;;; 2FA3;KANGXI RADICAL WINE;So;0;ON; 9149;;;;N;;;;; 2FA4;KANGXI RADICAL DISTINGUISH;So;0;ON; 91C6;;;;N;;;;; 2FA5;KANGXI RADICAL VILLAGE;So;0;ON; 91CC;;;;N;;;;; 2FA6;KANGXI RADICAL GOLD;So;0;ON; 91D1;;;;N;;;;; 2FA7;KANGXI RADICAL LONG;So;0;ON; 9577;;;;N;;;;; 2FA8;KANGXI RADICAL GATE;So;0;ON; 9580;;;;N;;;;; 2FA9;KANGXI RADICAL MOUND;So;0;ON; 961C;;;;N;;;;; 2FAA;KANGXI RADICAL SLAVE;So;0;ON; 96B6;;;;N;;;;; 2FAB;KANGXI RADICAL SHORT TAILED BIRD;So;0;ON; 96B9;;;;N;;;;; 2FAC;KANGXI RADICAL RAIN;So;0;ON; 96E8;;;;N;;;;; 2FAD;KANGXI RADICAL BLUE;So;0;ON; 9751;;;;N;;;;; 2FAE;KANGXI RADICAL WRONG;So;0;ON; 975E;;;;N;;;;; 2FAF;KANGXI RADICAL FACE;So;0;ON; 9762;;;;N;;;;; 2FB0;KANGXI RADICAL LEATHER;So;0;ON; 9769;;;;N;;;;; 2FB1;KANGXI RADICAL TANNED LEATHER;So;0;ON; 97CB;;;;N;;;;; 2FB2;KANGXI RADICAL LEEK;So;0;ON; 97ED;;;;N;;;;; 2FB3;KANGXI RADICAL SOUND;So;0;ON; 97F3;;;;N;;;;; 2FB4;KANGXI RADICAL LEAF;So;0;ON; 9801;;;;N;;;;; 2FB5;KANGXI RADICAL WIND;So;0;ON; 98A8;;;;N;;;;; 2FB6;KANGXI RADICAL FLY;So;0;ON; 98DB;;;;N;;;;; 2FB7;KANGXI RADICAL EAT;So;0;ON; 98DF;;;;N;;;;; 2FB8;KANGXI RADICAL HEAD;So;0;ON; 9996;;;;N;;;;; 2FB9;KANGXI RADICAL FRAGRANT;So;0;ON; 9999;;;;N;;;;; 2FBA;KANGXI RADICAL HORSE;So;0;ON; 99AC;;;;N;;;;; 2FBB;KANGXI RADICAL BONE;So;0;ON; 9AA8;;;;N;;;;; 2FBC;KANGXI RADICAL TALL;So;0;ON; 9AD8;;;;N;;;;; 2FBD;KANGXI RADICAL HAIR;So;0;ON; 9ADF;;;;N;;;;; 2FBE;KANGXI RADICAL FIGHT;So;0;ON; 9B25;;;;N;;;;; 2FBF;KANGXI RADICAL SACRIFICIAL WINE;So;0;ON; 9B2F;;;;N;;;;; 2FC0;KANGXI RADICAL CAULDRON;So;0;ON; 9B32;;;;N;;;;; 2FC1;KANGXI RADICAL GHOST;So;0;ON; 9B3C;;;;N;;;;; 2FC2;KANGXI RADICAL FISH;So;0;ON; 9B5A;;;;N;;;;; 2FC3;KANGXI RADICAL BIRD;So;0;ON; 9CE5;;;;N;;;;; 2FC4;KANGXI RADICAL SALT;So;0;ON; 9E75;;;;N;;;;; 2FC5;KANGXI RADICAL DEER;So;0;ON; 9E7F;;;;N;;;;; 2FC6;KANGXI RADICAL WHEAT;So;0;ON; 9EA5;;;;N;;;;; 2FC7;KANGXI RADICAL HEMP;So;0;ON; 9EBB;;;;N;;;;; 2FC8;KANGXI RADICAL YELLOW;So;0;ON; 9EC3;;;;N;;;;; 2FC9;KANGXI RADICAL MILLET;So;0;ON; 9ECD;;;;N;;;;; 2FCA;KANGXI RADICAL BLACK;So;0;ON; 9ED1;;;;N;;;;; 2FCB;KANGXI RADICAL EMBROIDERY;So;0;ON; 9EF9;;;;N;;;;; 2FCC;KANGXI RADICAL FROG;So;0;ON; 9EFD;;;;N;;;;; 2FCD;KANGXI RADICAL TRIPOD;So;0;ON; 9F0E;;;;N;;;;; 2FCE;KANGXI RADICAL DRUM;So;0;ON; 9F13;;;;N;;;;; 2FCF;KANGXI RADICAL RAT;So;0;ON; 9F20;;;;N;;;;; 2FD0;KANGXI RADICAL NOSE;So;0;ON; 9F3B;;;;N;;;;; 2FD1;KANGXI RADICAL EVEN;So;0;ON; 9F4A;;;;N;;;;; 2FD2;KANGXI RADICAL TOOTH;So;0;ON; 9F52;;;;N;;;;; 2FD3;KANGXI RADICAL DRAGON;So;0;ON; 9F8D;;;;N;;;;; 2FD4;KANGXI RADICAL TURTLE;So;0;ON; 9F9C;;;;N;;;;; 2FD5;KANGXI RADICAL FLUTE;So;0;ON; 9FA0;;;;N;;;;; 2FF0;IDEOGRAPHIC DESCRIPTION CHARACTER LEFT TO RIGHT;So;0;ON;;;;;N;;;;; 2FF1;IDEOGRAPHIC DESCRIPTION CHARACTER ABOVE TO BELOW;So;0;ON;;;;;N;;;;; 2FF2;IDEOGRAPHIC DESCRIPTION CHARACTER LEFT TO MIDDLE AND RIGHT;So;0;ON;;;;;N;;;;; 2FF3;IDEOGRAPHIC DESCRIPTION CHARACTER ABOVE TO MIDDLE AND BELOW;So;0;ON;;;;;N;;;;; 2FF4;IDEOGRAPHIC DESCRIPTION CHARACTER FULL SURROUND;So;0;ON;;;;;N;;;;; 2FF5;IDEOGRAPHIC DESCRIPTION CHARACTER SURROUND FROM ABOVE;So;0;ON;;;;;N;;;;; 2FF6;IDEOGRAPHIC DESCRIPTION CHARACTER SURROUND FROM BELOW;So;0;ON;;;;;N;;;;; 2FF7;IDEOGRAPHIC DESCRIPTION CHARACTER SURROUND FROM LEFT;So;0;ON;;;;;N;;;;; 2FF8;IDEOGRAPHIC DESCRIPTION CHARACTER SURROUND FROM UPPER LEFT;So;0;ON;;;;;N;;;;; 2FF9;IDEOGRAPHIC DESCRIPTION CHARACTER SURROUND FROM UPPER RIGHT;So;0;ON;;;;;N;;;;; 2FFA;IDEOGRAPHIC DESCRIPTION CHARACTER SURROUND FROM LOWER LEFT;So;0;ON;;;;;N;;;;; 2FFB;IDEOGRAPHIC DESCRIPTION CHARACTER OVERLAID;So;0;ON;;;;;N;;;;; 3000;IDEOGRAPHIC SPACE;Zs;0;WS; 0020;;;;N;;;;; 3001;IDEOGRAPHIC COMMA;Po;0;ON;;;;;N;;;;; 3002;IDEOGRAPHIC FULL STOP;Po;0;ON;;;;;N;IDEOGRAPHIC PERIOD;;;; 3003;DITTO MARK;Po;0;ON;;;;;N;;;;; 3004;JAPANESE INDUSTRIAL STANDARD SYMBOL;So;0;ON;;;;;N;;;;; 3005;IDEOGRAPHIC ITERATION MARK;Lm;0;L;;;;;N;;;;; 3006;IDEOGRAPHIC CLOSING MARK;Lo;0;L;;;;;N;;;;; 3007;IDEOGRAPHIC NUMBER ZERO;Nl;0;L;;;;0;N;;;;; 3008;LEFT ANGLE BRACKET;Ps;0;ON;;;;;Y;OPENING ANGLE BRACKET;;;; 3009;RIGHT ANGLE BRACKET;Pe;0;ON;;;;;Y;CLOSING ANGLE BRACKET;;;; 300A;LEFT DOUBLE ANGLE BRACKET;Ps;0;ON;;;;;Y;OPENING DOUBLE ANGLE BRACKET;;;; 300B;RIGHT DOUBLE ANGLE BRACKET;Pe;0;ON;;;;;Y;CLOSING DOUBLE ANGLE BRACKET;;;; 300C;LEFT CORNER BRACKET;Ps;0;ON;;;;;Y;OPENING CORNER BRACKET;;;; 300D;RIGHT CORNER BRACKET;Pe;0;ON;;;;;Y;CLOSING CORNER BRACKET;;;; 300E;LEFT WHITE CORNER BRACKET;Ps;0;ON;;;;;Y;OPENING WHITE CORNER BRACKET;;;; 300F;RIGHT WHITE CORNER BRACKET;Pe;0;ON;;;;;Y;CLOSING WHITE CORNER BRACKET;;;; 3010;LEFT BLACK LENTICULAR BRACKET;Ps;0;ON;;;;;Y;OPENING BLACK LENTICULAR BRACKET;;;; 3011;RIGHT BLACK LENTICULAR BRACKET;Pe;0;ON;;;;;Y;CLOSING BLACK LENTICULAR BRACKET;;;; 3012;POSTAL MARK;So;0;ON;;;;;N;;;;; 3013;GETA MARK;So;0;ON;;;;;N;;;;; 3014;LEFT TORTOISE SHELL BRACKET;Ps;0;ON;;;;;Y;OPENING TORTOISE SHELL BRACKET;;;; 3015;RIGHT TORTOISE SHELL BRACKET;Pe;0;ON;;;;;Y;CLOSING TORTOISE SHELL BRACKET;;;; 3016;LEFT WHITE LENTICULAR BRACKET;Ps;0;ON;;;;;Y;OPENING WHITE LENTICULAR BRACKET;;;; 3017;RIGHT WHITE LENTICULAR BRACKET;Pe;0;ON;;;;;Y;CLOSING WHITE LENTICULAR BRACKET;;;; 3018;LEFT WHITE TORTOISE SHELL BRACKET;Ps;0;ON;;;;;Y;OPENING WHITE TORTOISE SHELL BRACKET;;;; 3019;RIGHT WHITE TORTOISE SHELL BRACKET;Pe;0;ON;;;;;Y;CLOSING WHITE TORTOISE SHELL BRACKET;;;; 301A;LEFT WHITE SQUARE BRACKET;Ps;0;ON;;;;;Y;OPENING WHITE SQUARE BRACKET;;;; 301B;RIGHT WHITE SQUARE BRACKET;Pe;0;ON;;;;;Y;CLOSING WHITE SQUARE BRACKET;;;; 301C;WAVE DASH;Pd;0;ON;;;;;N;;;;; 301D;REVERSED DOUBLE PRIME QUOTATION MARK;Ps;0;ON;;;;;N;;;;; 301E;DOUBLE PRIME QUOTATION MARK;Pe;0;ON;;;;;N;;;;; 301F;LOW DOUBLE PRIME QUOTATION MARK;Pe;0;ON;;;;;N;;;;; 3020;POSTAL MARK FACE;So;0;ON;;;;;N;;;;; 3021;HANGZHOU NUMERAL ONE;Nl;0;L;;;;1;N;;;;; 3022;HANGZHOU NUMERAL TWO;Nl;0;L;;;;2;N;;;;; 3023;HANGZHOU NUMERAL THREE;Nl;0;L;;;;3;N;;;;; 3024;HANGZHOU NUMERAL FOUR;Nl;0;L;;;;4;N;;;;; 3025;HANGZHOU NUMERAL FIVE;Nl;0;L;;;;5;N;;;;; 3026;HANGZHOU NUMERAL SIX;Nl;0;L;;;;6;N;;;;; 3027;HANGZHOU NUMERAL SEVEN;Nl;0;L;;;;7;N;;;;; 3028;HANGZHOU NUMERAL EIGHT;Nl;0;L;;;;8;N;;;;; 3029;HANGZHOU NUMERAL NINE;Nl;0;L;;;;9;N;;;;; 302A;IDEOGRAPHIC LEVEL TONE MARK;Mn;218;NSM;;;;;N;;;;; 302B;IDEOGRAPHIC RISING TONE MARK;Mn;228;NSM;;;;;N;;;;; 302C;IDEOGRAPHIC DEPARTING TONE MARK;Mn;232;NSM;;;;;N;;;;; 302D;IDEOGRAPHIC ENTERING TONE MARK;Mn;222;NSM;;;;;N;;;;; 302E;HANGUL SINGLE DOT TONE MARK;Mn;224;NSM;;;;;N;;;;; 302F;HANGUL DOUBLE DOT TONE MARK;Mn;224;NSM;;;;;N;;;;; 3030;WAVY DASH;Pd;0;ON;;;;;N;;;;; 3031;VERTICAL KANA REPEAT MARK;Lm;0;L;;;;;N;;;;; 3032;VERTICAL KANA REPEAT WITH VOICED SOUND MARK;Lm;0;L;;;;;N;;;;; 3033;VERTICAL KANA REPEAT MARK UPPER HALF;Lm;0;L;;;;;N;;;;; 3034;VERTICAL KANA REPEAT WITH VOICED SOUND MARK UPPER HALF;Lm;0;L;;;;;N;;;;; 3035;VERTICAL KANA REPEAT MARK LOWER HALF;Lm;0;L;;;;;N;;;;; 3036;CIRCLED POSTAL MARK;So;0;ON; 3012;;;;N;;;;; 3037;IDEOGRAPHIC TELEGRAPH LINE FEED SEPARATOR SYMBOL;So;0;ON;;;;;N;;;;; 3038;HANGZHOU NUMERAL TEN;Nl;0;L; 5341;;;10;N;;;;; 3039;HANGZHOU NUMERAL TWENTY;Nl;0;L; 5344;;;20;N;;;;; 303A;HANGZHOU NUMERAL THIRTY;Nl;0;L; 5345;;;30;N;;;;; 303E;IDEOGRAPHIC VARIATION INDICATOR;So;0;ON;;;;;N;;;;; 303F;IDEOGRAPHIC HALF FILL SPACE;So;0;ON;;;;;N;;;;; 3041;HIRAGANA LETTER SMALL A;Lo;0;L;;;;;N;;;;; 3042;HIRAGANA LETTER A;Lo;0;L;;;;;N;;;;; 3043;HIRAGANA LETTER SMALL I;Lo;0;L;;;;;N;;;;; 3044;HIRAGANA LETTER I;Lo;0;L;;;;;N;;;;; 3045;HIRAGANA LETTER SMALL U;Lo;0;L;;;;;N;;;;; 3046;HIRAGANA LETTER U;Lo;0;L;;;;;N;;;;; 3047;HIRAGANA LETTER SMALL E;Lo;0;L;;;;;N;;;;; 3048;HIRAGANA LETTER E;Lo;0;L;;;;;N;;;;; 3049;HIRAGANA LETTER SMALL O;Lo;0;L;;;;;N;;;;; 304A;HIRAGANA LETTER O;Lo;0;L;;;;;N;;;;; 304B;HIRAGANA LETTER KA;Lo;0;L;;;;;N;;;;; 304C;HIRAGANA LETTER GA;Lo;0;L;304B 3099;;;;N;;;;; 304D;HIRAGANA LETTER KI;Lo;0;L;;;;;N;;;;; 304E;HIRAGANA LETTER GI;Lo;0;L;304D 3099;;;;N;;;;; 304F;HIRAGANA LETTER KU;Lo;0;L;;;;;N;;;;; 3050;HIRAGANA LETTER GU;Lo;0;L;304F 3099;;;;N;;;;; 3051;HIRAGANA LETTER KE;Lo;0;L;;;;;N;;;;; 3052;HIRAGANA LETTER GE;Lo;0;L;3051 3099;;;;N;;;;; 3053;HIRAGANA LETTER KO;Lo;0;L;;;;;N;;;;; 3054;HIRAGANA LETTER GO;Lo;0;L;3053 3099;;;;N;;;;; 3055;HIRAGANA LETTER SA;Lo;0;L;;;;;N;;;;; 3056;HIRAGANA LETTER ZA;Lo;0;L;3055 3099;;;;N;;;;; 3057;HIRAGANA LETTER SI;Lo;0;L;;;;;N;;;;; 3058;HIRAGANA LETTER ZI;Lo;0;L;3057 3099;;;;N;;;;; 3059;HIRAGANA LETTER SU;Lo;0;L;;;;;N;;;;; 305A;HIRAGANA LETTER ZU;Lo;0;L;3059 3099;;;;N;;;;; 305B;HIRAGANA LETTER SE;Lo;0;L;;;;;N;;;;; 305C;HIRAGANA LETTER ZE;Lo;0;L;305B 3099;;;;N;;;;; 305D;HIRAGANA LETTER SO;Lo;0;L;;;;;N;;;;; 305E;HIRAGANA LETTER ZO;Lo;0;L;305D 3099;;;;N;;;;; 305F;HIRAGANA LETTER TA;Lo;0;L;;;;;N;;;;; 3060;HIRAGANA LETTER DA;Lo;0;L;305F 3099;;;;N;;;;; 3061;HIRAGANA LETTER TI;Lo;0;L;;;;;N;;;;; 3062;HIRAGANA LETTER DI;Lo;0;L;3061 3099;;;;N;;;;; 3063;HIRAGANA LETTER SMALL TU;Lo;0;L;;;;;N;;;;; 3064;HIRAGANA LETTER TU;Lo;0;L;;;;;N;;;;; 3065;HIRAGANA LETTER DU;Lo;0;L;3064 3099;;;;N;;;;; 3066;HIRAGANA LETTER TE;Lo;0;L;;;;;N;;;;; 3067;HIRAGANA LETTER DE;Lo;0;L;3066 3099;;;;N;;;;; 3068;HIRAGANA LETTER TO;Lo;0;L;;;;;N;;;;; 3069;HIRAGANA LETTER DO;Lo;0;L;3068 3099;;;;N;;;;; 306A;HIRAGANA LETTER NA;Lo;0;L;;;;;N;;;;; 306B;HIRAGANA LETTER NI;Lo;0;L;;;;;N;;;;; 306C;HIRAGANA LETTER NU;Lo;0;L;;;;;N;;;;; 306D;HIRAGANA LETTER NE;Lo;0;L;;;;;N;;;;; 306E;HIRAGANA LETTER NO;Lo;0;L;;;;;N;;;;; 306F;HIRAGANA LETTER HA;Lo;0;L;;;;;N;;;;; 3070;HIRAGANA LETTER BA;Lo;0;L;306F 3099;;;;N;;;;; 3071;HIRAGANA LETTER PA;Lo;0;L;306F 309A;;;;N;;;;; 3072;HIRAGANA LETTER HI;Lo;0;L;;;;;N;;;;; 3073;HIRAGANA LETTER BI;Lo;0;L;3072 3099;;;;N;;;;; 3074;HIRAGANA LETTER PI;Lo;0;L;3072 309A;;;;N;;;;; 3075;HIRAGANA LETTER HU;Lo;0;L;;;;;N;;;;; 3076;HIRAGANA LETTER BU;Lo;0;L;3075 3099;;;;N;;;;; 3077;HIRAGANA LETTER PU;Lo;0;L;3075 309A;;;;N;;;;; 3078;HIRAGANA LETTER HE;Lo;0;L;;;;;N;;;;; 3079;HIRAGANA LETTER BE;Lo;0;L;3078 3099;;;;N;;;;; 307A;HIRAGANA LETTER PE;Lo;0;L;3078 309A;;;;N;;;;; 307B;HIRAGANA LETTER HO;Lo;0;L;;;;;N;;;;; 307C;HIRAGANA LETTER BO;Lo;0;L;307B 3099;;;;N;;;;; 307D;HIRAGANA LETTER PO;Lo;0;L;307B 309A;;;;N;;;;; 307E;HIRAGANA LETTER MA;Lo;0;L;;;;;N;;;;; 307F;HIRAGANA LETTER MI;Lo;0;L;;;;;N;;;;; 3080;HIRAGANA LETTER MU;Lo;0;L;;;;;N;;;;; 3081;HIRAGANA LETTER ME;Lo;0;L;;;;;N;;;;; 3082;HIRAGANA LETTER MO;Lo;0;L;;;;;N;;;;; 3083;HIRAGANA LETTER SMALL YA;Lo;0;L;;;;;N;;;;; 3084;HIRAGANA LETTER YA;Lo;0;L;;;;;N;;;;; 3085;HIRAGANA LETTER SMALL YU;Lo;0;L;;;;;N;;;;; 3086;HIRAGANA LETTER YU;Lo;0;L;;;;;N;;;;; 3087;HIRAGANA LETTER SMALL YO;Lo;0;L;;;;;N;;;;; 3088;HIRAGANA LETTER YO;Lo;0;L;;;;;N;;;;; 3089;HIRAGANA LETTER RA;Lo;0;L;;;;;N;;;;; 308A;HIRAGANA LETTER RI;Lo;0;L;;;;;N;;;;; 308B;HIRAGANA LETTER RU;Lo;0;L;;;;;N;;;;; 308C;HIRAGANA LETTER RE;Lo;0;L;;;;;N;;;;; 308D;HIRAGANA LETTER RO;Lo;0;L;;;;;N;;;;; 308E;HIRAGANA LETTER SMALL WA;Lo;0;L;;;;;N;;;;; 308F;HIRAGANA LETTER WA;Lo;0;L;;;;;N;;;;; 3090;HIRAGANA LETTER WI;Lo;0;L;;;;;N;;;;; 3091;HIRAGANA LETTER WE;Lo;0;L;;;;;N;;;;; 3092;HIRAGANA LETTER WO;Lo;0;L;;;;;N;;;;; 3093;HIRAGANA LETTER N;Lo;0;L;;;;;N;;;;; 3094;HIRAGANA LETTER VU;Lo;0;L;3046 3099;;;;N;;;;; 3099;COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK;Mn;8;NSM;;;;;N;NON-SPACING KATAKANA-HIRAGANA VOICED SOUND MARK;;;; 309A;COMBINING KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK;Mn;8;NSM;;;;;N;NON-SPACING KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK;;;; 309B;KATAKANA-HIRAGANA VOICED SOUND MARK;Sk;0;ON; 0020 3099;;;;N;;;;; 309C;KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK;Sk;0;ON; 0020 309A;;;;N;;;;; 309D;HIRAGANA ITERATION MARK;Lm;0;L;;;;;N;;;;; 309E;HIRAGANA VOICED ITERATION MARK;Lm;0;L;309D 3099;;;;N;;;;; 30A1;KATAKANA LETTER SMALL A;Lo;0;L;;;;;N;;;;; 30A2;KATAKANA LETTER A;Lo;0;L;;;;;N;;;;; 30A3;KATAKANA LETTER SMALL I;Lo;0;L;;;;;N;;;;; 30A4;KATAKANA LETTER I;Lo;0;L;;;;;N;;;;; 30A5;KATAKANA LETTER SMALL U;Lo;0;L;;;;;N;;;;; 30A6;KATAKANA LETTER U;Lo;0;L;;;;;N;;;;; 30A7;KATAKANA LETTER SMALL E;Lo;0;L;;;;;N;;;;; 30A8;KATAKANA LETTER E;Lo;0;L;;;;;N;;;;; 30A9;KATAKANA LETTER SMALL O;Lo;0;L;;;;;N;;;;; 30AA;KATAKANA LETTER O;Lo;0;L;;;;;N;;;;; 30AB;KATAKANA LETTER KA;Lo;0;L;;;;;N;;;;; 30AC;KATAKANA LETTER GA;Lo;0;L;30AB 3099;;;;N;;;;; 30AD;KATAKANA LETTER KI;Lo;0;L;;;;;N;;;;; 30AE;KATAKANA LETTER GI;Lo;0;L;30AD 3099;;;;N;;;;; 30AF;KATAKANA LETTER KU;Lo;0;L;;;;;N;;;;; 30B0;KATAKANA LETTER GU;Lo;0;L;30AF 3099;;;;N;;;;; 30B1;KATAKANA LETTER KE;Lo;0;L;;;;;N;;;;; 30B2;KATAKANA LETTER GE;Lo;0;L;30B1 3099;;;;N;;;;; 30B3;KATAKANA LETTER KO;Lo;0;L;;;;;N;;;;; 30B4;KATAKANA LETTER GO;Lo;0;L;30B3 3099;;;;N;;;;; 30B5;KATAKANA LETTER SA;Lo;0;L;;;;;N;;;;; 30B6;KATAKANA LETTER ZA;Lo;0;L;30B5 3099;;;;N;;;;; 30B7;KATAKANA LETTER SI;Lo;0;L;;;;;N;;;;; 30B8;KATAKANA LETTER ZI;Lo;0;L;30B7 3099;;;;N;;;;; 30B9;KATAKANA LETTER SU;Lo;0;L;;;;;N;;;;; 30BA;KATAKANA LETTER ZU;Lo;0;L;30B9 3099;;;;N;;;;; 30BB;KATAKANA LETTER SE;Lo;0;L;;;;;N;;;;; 30BC;KATAKANA LETTER ZE;Lo;0;L;30BB 3099;;;;N;;;;; 30BD;KATAKANA LETTER SO;Lo;0;L;;;;;N;;;;; 30BE;KATAKANA LETTER ZO;Lo;0;L;30BD 3099;;;;N;;;;; 30BF;KATAKANA LETTER TA;Lo;0;L;;;;;N;;;;; 30C0;KATAKANA LETTER DA;Lo;0;L;30BF 3099;;;;N;;;;; 30C1;KATAKANA LETTER TI;Lo;0;L;;;;;N;;;;; 30C2;KATAKANA LETTER DI;Lo;0;L;30C1 3099;;;;N;;;;; 30C3;KATAKANA LETTER SMALL TU;Lo;0;L;;;;;N;;;;; 30C4;KATAKANA LETTER TU;Lo;0;L;;;;;N;;;;; 30C5;KATAKANA LETTER DU;Lo;0;L;30C4 3099;;;;N;;;;; 30C6;KATAKANA LETTER TE;Lo;0;L;;;;;N;;;;; 30C7;KATAKANA LETTER DE;Lo;0;L;30C6 3099;;;;N;;;;; 30C8;KATAKANA LETTER TO;Lo;0;L;;;;;N;;;;; 30C9;KATAKANA LETTER DO;Lo;0;L;30C8 3099;;;;N;;;;; 30CA;KATAKANA LETTER NA;Lo;0;L;;;;;N;;;;; 30CB;KATAKANA LETTER NI;Lo;0;L;;;;;N;;;;; 30CC;KATAKANA LETTER NU;Lo;0;L;;;;;N;;;;; 30CD;KATAKANA LETTER NE;Lo;0;L;;;;;N;;;;; 30CE;KATAKANA LETTER NO;Lo;0;L;;;;;N;;;;; 30CF;KATAKANA LETTER HA;Lo;0;L;;;;;N;;;;; 30D0;KATAKANA LETTER BA;Lo;0;L;30CF 3099;;;;N;;;;; 30D1;KATAKANA LETTER PA;Lo;0;L;30CF 309A;;;;N;;;;; 30D2;KATAKANA LETTER HI;Lo;0;L;;;;;N;;;;; 30D3;KATAKANA LETTER BI;Lo;0;L;30D2 3099;;;;N;;;;; 30D4;KATAKANA LETTER PI;Lo;0;L;30D2 309A;;;;N;;;;; 30D5;KATAKANA LETTER HU;Lo;0;L;;;;;N;;;;; 30D6;KATAKANA LETTER BU;Lo;0;L;30D5 3099;;;;N;;;;; 30D7;KATAKANA LETTER PU;Lo;0;L;30D5 309A;;;;N;;;;; 30D8;KATAKANA LETTER HE;Lo;0;L;;;;;N;;;;; 30D9;KATAKANA LETTER BE;Lo;0;L;30D8 3099;;;;N;;;;; 30DA;KATAKANA LETTER PE;Lo;0;L;30D8 309A;;;;N;;;;; 30DB;KATAKANA LETTER HO;Lo;0;L;;;;;N;;;;; 30DC;KATAKANA LETTER BO;Lo;0;L;30DB 3099;;;;N;;;;; 30DD;KATAKANA LETTER PO;Lo;0;L;30DB 309A;;;;N;;;;; 30DE;KATAKANA LETTER MA;Lo;0;L;;;;;N;;;;; 30DF;KATAKANA LETTER MI;Lo;0;L;;;;;N;;;;; 30E0;KATAKANA LETTER MU;Lo;0;L;;;;;N;;;;; 30E1;KATAKANA LETTER ME;Lo;0;L;;;;;N;;;;; 30E2;KATAKANA LETTER MO;Lo;0;L;;;;;N;;;;; 30E3;KATAKANA LETTER SMALL YA;Lo;0;L;;;;;N;;;;; 30E4;KATAKANA LETTER YA;Lo;0;L;;;;;N;;;;; 30E5;KATAKANA LETTER SMALL YU;Lo;0;L;;;;;N;;;;; 30E6;KATAKANA LETTER YU;Lo;0;L;;;;;N;;;;; 30E7;KATAKANA LETTER SMALL YO;Lo;0;L;;;;;N;;;;; 30E8;KATAKANA LETTER YO;Lo;0;L;;;;;N;;;;; 30E9;KATAKANA LETTER RA;Lo;0;L;;;;;N;;;;; 30EA;KATAKANA LETTER RI;Lo;0;L;;;;;N;;;;; 30EB;KATAKANA LETTER RU;Lo;0;L;;;;;N;;;;; 30EC;KATAKANA LETTER RE;Lo;0;L;;;;;N;;;;; 30ED;KATAKANA LETTER RO;Lo;0;L;;;;;N;;;;; 30EE;KATAKANA LETTER SMALL WA;Lo;0;L;;;;;N;;;;; 30EF;KATAKANA LETTER WA;Lo;0;L;;;;;N;;;;; 30F0;KATAKANA LETTER WI;Lo;0;L;;;;;N;;;;; 30F1;KATAKANA LETTER WE;Lo;0;L;;;;;N;;;;; 30F2;KATAKANA LETTER WO;Lo;0;L;;;;;N;;;;; 30F3;KATAKANA LETTER N;Lo;0;L;;;;;N;;;;; 30F4;KATAKANA LETTER VU;Lo;0;L;30A6 3099;;;;N;;;;; 30F5;KATAKANA LETTER SMALL KA;Lo;0;L;;;;;N;;;;; 30F6;KATAKANA LETTER SMALL KE;Lo;0;L;;;;;N;;;;; 30F7;KATAKANA LETTER VA;Lo;0;L;30EF 3099;;;;N;;;;; 30F8;KATAKANA LETTER VI;Lo;0;L;30F0 3099;;;;N;;;;; 30F9;KATAKANA LETTER VE;Lo;0;L;30F1 3099;;;;N;;;;; 30FA;KATAKANA LETTER VO;Lo;0;L;30F2 3099;;;;N;;;;; 30FB;KATAKANA MIDDLE DOT;Pc;0;ON;;;;;N;;;;; 30FC;KATAKANA-HIRAGANA PROLONGED SOUND MARK;Lm;0;L;;;;;N;;;;; 30FD;KATAKANA ITERATION MARK;Lm;0;L;;;;;N;;;;; 30FE;KATAKANA VOICED ITERATION MARK;Lm;0;L;30FD 3099;;;;N;;;;; 3105;BOPOMOFO LETTER B;Lo;0;L;;;;;N;;;;; 3106;BOPOMOFO LETTER P;Lo;0;L;;;;;N;;;;; 3107;BOPOMOFO LETTER M;Lo;0;L;;;;;N;;;;; 3108;BOPOMOFO LETTER F;Lo;0;L;;;;;N;;;;; 3109;BOPOMOFO LETTER D;Lo;0;L;;;;;N;;;;; 310A;BOPOMOFO LETTER T;Lo;0;L;;;;;N;;;;; 310B;BOPOMOFO LETTER N;Lo;0;L;;;;;N;;;;; 310C;BOPOMOFO LETTER L;Lo;0;L;;;;;N;;;;; 310D;BOPOMOFO LETTER G;Lo;0;L;;;;;N;;;;; 310E;BOPOMOFO LETTER K;Lo;0;L;;;;;N;;;;; 310F;BOPOMOFO LETTER H;Lo;0;L;;;;;N;;;;; 3110;BOPOMOFO LETTER J;Lo;0;L;;;;;N;;;;; 3111;BOPOMOFO LETTER Q;Lo;0;L;;;;;N;;;;; 3112;BOPOMOFO LETTER X;Lo;0;L;;;;;N;;;;; 3113;BOPOMOFO LETTER ZH;Lo;0;L;;;;;N;;;;; 3114;BOPOMOFO LETTER CH;Lo;0;L;;;;;N;;;;; 3115;BOPOMOFO LETTER SH;Lo;0;L;;;;;N;;;;; 3116;BOPOMOFO LETTER R;Lo;0;L;;;;;N;;;;; 3117;BOPOMOFO LETTER Z;Lo;0;L;;;;;N;;;;; 3118;BOPOMOFO LETTER C;Lo;0;L;;;;;N;;;;; 3119;BOPOMOFO LETTER S;Lo;0;L;;;;;N;;;;; 311A;BOPOMOFO LETTER A;Lo;0;L;;;;;N;;;;; 311B;BOPOMOFO LETTER O;Lo;0;L;;;;;N;;;;; 311C;BOPOMOFO LETTER E;Lo;0;L;;;;;N;;;;; 311D;BOPOMOFO LETTER EH;Lo;0;L;;;;;N;;;;; 311E;BOPOMOFO LETTER AI;Lo;0;L;;;;;N;;;;; 311F;BOPOMOFO LETTER EI;Lo;0;L;;;;;N;;;;; 3120;BOPOMOFO LETTER AU;Lo;0;L;;;;;N;;;;; 3121;BOPOMOFO LETTER OU;Lo;0;L;;;;;N;;;;; 3122;BOPOMOFO LETTER AN;Lo;0;L;;;;;N;;;;; 3123;BOPOMOFO LETTER EN;Lo;0;L;;;;;N;;;;; 3124;BOPOMOFO LETTER ANG;Lo;0;L;;;;;N;;;;; 3125;BOPOMOFO LETTER ENG;Lo;0;L;;;;;N;;;;; 3126;BOPOMOFO LETTER ER;Lo;0;L;;;;;N;;;;; 3127;BOPOMOFO LETTER I;Lo;0;L;;;;;N;;;;; 3128;BOPOMOFO LETTER U;Lo;0;L;;;;;N;;;;; 3129;BOPOMOFO LETTER IU;Lo;0;L;;;;;N;;;;; 312A;BOPOMOFO LETTER V;Lo;0;L;;;;;N;;;;; 312B;BOPOMOFO LETTER NG;Lo;0;L;;;;;N;;;;; 312C;BOPOMOFO LETTER GN;Lo;0;L;;;;;N;;;;; 3131;HANGUL LETTER KIYEOK;Lo;0;L; 1100;;;;N;HANGUL LETTER GIYEOG;;;; 3132;HANGUL LETTER SSANGKIYEOK;Lo;0;L; 1101;;;;N;HANGUL LETTER SSANG GIYEOG;;;; 3133;HANGUL LETTER KIYEOK-SIOS;Lo;0;L; 11AA;;;;N;HANGUL LETTER GIYEOG SIOS;;;; 3134;HANGUL LETTER NIEUN;Lo;0;L; 1102;;;;N;;;;; 3135;HANGUL LETTER NIEUN-CIEUC;Lo;0;L; 11AC;;;;N;HANGUL LETTER NIEUN JIEUJ;;;; 3136;HANGUL LETTER NIEUN-HIEUH;Lo;0;L; 11AD;;;;N;HANGUL LETTER NIEUN HIEUH;;;; 3137;HANGUL LETTER TIKEUT;Lo;0;L; 1103;;;;N;HANGUL LETTER DIGEUD;;;; 3138;HANGUL LETTER SSANGTIKEUT;Lo;0;L; 1104;;;;N;HANGUL LETTER SSANG DIGEUD;;;; 3139;HANGUL LETTER RIEUL;Lo;0;L; 1105;;;;N;HANGUL LETTER LIEUL;;;; 313A;HANGUL LETTER RIEUL-KIYEOK;Lo;0;L; 11B0;;;;N;HANGUL LETTER LIEUL GIYEOG;;;; 313B;HANGUL LETTER RIEUL-MIEUM;Lo;0;L; 11B1;;;;N;HANGUL LETTER LIEUL MIEUM;;;; 313C;HANGUL LETTER RIEUL-PIEUP;Lo;0;L; 11B2;;;;N;HANGUL LETTER LIEUL BIEUB;;;; 313D;HANGUL LETTER RIEUL-SIOS;Lo;0;L; 11B3;;;;N;HANGUL LETTER LIEUL SIOS;;;; 313E;HANGUL LETTER RIEUL-THIEUTH;Lo;0;L; 11B4;;;;N;HANGUL LETTER LIEUL TIEUT;;;; 313F;HANGUL LETTER RIEUL-PHIEUPH;Lo;0;L; 11B5;;;;N;HANGUL LETTER LIEUL PIEUP;;;; 3140;HANGUL LETTER RIEUL-HIEUH;Lo;0;L; 111A;;;;N;HANGUL LETTER LIEUL HIEUH;;;; 3141;HANGUL LETTER MIEUM;Lo;0;L; 1106;;;;N;;;;; 3142;HANGUL LETTER PIEUP;Lo;0;L; 1107;;;;N;HANGUL LETTER BIEUB;;;; 3143;HANGUL LETTER SSANGPIEUP;Lo;0;L; 1108;;;;N;HANGUL LETTER SSANG BIEUB;;;; 3144;HANGUL LETTER PIEUP-SIOS;Lo;0;L; 1121;;;;N;HANGUL LETTER BIEUB SIOS;;;; 3145;HANGUL LETTER SIOS;Lo;0;L; 1109;;;;N;;;;; 3146;HANGUL LETTER SSANGSIOS;Lo;0;L; 110A;;;;N;HANGUL LETTER SSANG SIOS;;;; 3147;HANGUL LETTER IEUNG;Lo;0;L; 110B;;;;N;;;;; 3148;HANGUL LETTER CIEUC;Lo;0;L; 110C;;;;N;HANGUL LETTER JIEUJ;;;; 3149;HANGUL LETTER SSANGCIEUC;Lo;0;L; 110D;;;;N;HANGUL LETTER SSANG JIEUJ;;;; 314A;HANGUL LETTER CHIEUCH;Lo;0;L; 110E;;;;N;HANGUL LETTER CIEUC;;;; 314B;HANGUL LETTER KHIEUKH;Lo;0;L; 110F;;;;N;HANGUL LETTER KIYEOK;;;; 314C;HANGUL LETTER THIEUTH;Lo;0;L; 1110;;;;N;HANGUL LETTER TIEUT;;;; 314D;HANGUL LETTER PHIEUPH;Lo;0;L; 1111;;;;N;HANGUL LETTER PIEUP;;;; 314E;HANGUL LETTER HIEUH;Lo;0;L; 1112;;;;N;;;;; 314F;HANGUL LETTER A;Lo;0;L; 1161;;;;N;;;;; 3150;HANGUL LETTER AE;Lo;0;L; 1162;;;;N;;;;; 3151;HANGUL LETTER YA;Lo;0;L; 1163;;;;N;;;;; 3152;HANGUL LETTER YAE;Lo;0;L; 1164;;;;N;;;;; 3153;HANGUL LETTER EO;Lo;0;L; 1165;;;;N;;;;; 3154;HANGUL LETTER E;Lo;0;L; 1166;;;;N;;;;; 3155;HANGUL LETTER YEO;Lo;0;L; 1167;;;;N;;;;; 3156;HANGUL LETTER YE;Lo;0;L; 1168;;;;N;;;;; 3157;HANGUL LETTER O;Lo;0;L; 1169;;;;N;;;;; 3158;HANGUL LETTER WA;Lo;0;L; 116A;;;;N;;;;; 3159;HANGUL LETTER WAE;Lo;0;L; 116B;;;;N;;;;; 315A;HANGUL LETTER OE;Lo;0;L; 116C;;;;N;;;;; 315B;HANGUL LETTER YO;Lo;0;L; 116D;;;;N;;;;; 315C;HANGUL LETTER U;Lo;0;L; 116E;;;;N;;;;; 315D;HANGUL LETTER WEO;Lo;0;L; 116F;;;;N;;;;; 315E;HANGUL LETTER WE;Lo;0;L; 1170;;;;N;;;;; 315F;HANGUL LETTER WI;Lo;0;L; 1171;;;;N;;;;; 3160;HANGUL LETTER YU;Lo;0;L; 1172;;;;N;;;;; 3161;HANGUL LETTER EU;Lo;0;L; 1173;;;;N;;;;; 3162;HANGUL LETTER YI;Lo;0;L; 1174;;;;N;;;;; 3163;HANGUL LETTER I;Lo;0;L; 1175;;;;N;;;;; 3164;HANGUL FILLER;Lo;0;L; 1160;;;;N;HANGUL CAE OM;;;; 3165;HANGUL LETTER SSANGNIEUN;Lo;0;L; 1114;;;;N;HANGUL LETTER SSANG NIEUN;;;; 3166;HANGUL LETTER NIEUN-TIKEUT;Lo;0;L; 1115;;;;N;HANGUL LETTER NIEUN DIGEUD;;;; 3167;HANGUL LETTER NIEUN-SIOS;Lo;0;L; 11C7;;;;N;HANGUL LETTER NIEUN SIOS;;;; 3168;HANGUL LETTER NIEUN-PANSIOS;Lo;0;L; 11C8;;;;N;HANGUL LETTER NIEUN BAN CHI EUM;;;; 3169;HANGUL LETTER RIEUL-KIYEOK-SIOS;Lo;0;L; 11CC;;;;N;HANGUL LETTER LIEUL GIYEOG SIOS;;;; 316A;HANGUL LETTER RIEUL-TIKEUT;Lo;0;L; 11CE;;;;N;HANGUL LETTER LIEUL DIGEUD;;;; 316B;HANGUL LETTER RIEUL-PIEUP-SIOS;Lo;0;L; 11D3;;;;N;HANGUL LETTER LIEUL BIEUB SIOS;;;; 316C;HANGUL LETTER RIEUL-PANSIOS;Lo;0;L; 11D7;;;;N;HANGUL LETTER LIEUL BAN CHI EUM;;;; 316D;HANGUL LETTER RIEUL-YEORINHIEUH;Lo;0;L; 11D9;;;;N;HANGUL LETTER LIEUL YEOLIN HIEUH;;;; 316E;HANGUL LETTER MIEUM-PIEUP;Lo;0;L; 111C;;;;N;HANGUL LETTER MIEUM BIEUB;;;; 316F;HANGUL LETTER MIEUM-SIOS;Lo;0;L; 11DD;;;;N;HANGUL LETTER MIEUM SIOS;;;; 3170;HANGUL LETTER MIEUM-PANSIOS;Lo;0;L; 11DF;;;;N;HANGUL LETTER BIEUB BAN CHI EUM;;;; 3171;HANGUL LETTER KAPYEOUNMIEUM;Lo;0;L; 111D;;;;N;HANGUL LETTER MIEUM SUN GYEONG EUM;;;; 3172;HANGUL LETTER PIEUP-KIYEOK;Lo;0;L; 111E;;;;N;HANGUL LETTER BIEUB GIYEOG;;;; 3173;HANGUL LETTER PIEUP-TIKEUT;Lo;0;L; 1120;;;;N;HANGUL LETTER BIEUB DIGEUD;;;; 3174;HANGUL LETTER PIEUP-SIOS-KIYEOK;Lo;0;L; 1122;;;;N;HANGUL LETTER BIEUB SIOS GIYEOG;;;; 3175;HANGUL LETTER PIEUP-SIOS-TIKEUT;Lo;0;L; 1123;;;;N;HANGUL LETTER BIEUB SIOS DIGEUD;;;; 3176;HANGUL LETTER PIEUP-CIEUC;Lo;0;L; 1127;;;;N;HANGUL LETTER BIEUB JIEUJ;;;; 3177;HANGUL LETTER PIEUP-THIEUTH;Lo;0;L; 1129;;;;N;HANGUL LETTER BIEUB TIEUT;;;; 3178;HANGUL LETTER KAPYEOUNPIEUP;Lo;0;L; 112B;;;;N;HANGUL LETTER BIEUB SUN GYEONG EUM;;;; 3179;HANGUL LETTER KAPYEOUNSSANGPIEUP;Lo;0;L; 112C;;;;N;HANGUL LETTER SSANG BIEUB SUN GYEONG EUM;;;; 317A;HANGUL LETTER SIOS-KIYEOK;Lo;0;L; 112D;;;;N;HANGUL LETTER SIOS GIYEOG;;;; 317B;HANGUL LETTER SIOS-NIEUN;Lo;0;L; 112E;;;;N;HANGUL LETTER SIOS NIEUN;;;; 317C;HANGUL LETTER SIOS-TIKEUT;Lo;0;L; 112F;;;;N;HANGUL LETTER SIOS DIGEUD;;;; 317D;HANGUL LETTER SIOS-PIEUP;Lo;0;L; 1132;;;;N;HANGUL LETTER SIOS BIEUB;;;; 317E;HANGUL LETTER SIOS-CIEUC;Lo;0;L; 1136;;;;N;HANGUL LETTER SIOS JIEUJ;;;; 317F;HANGUL LETTER PANSIOS;Lo;0;L; 1140;;;;N;HANGUL LETTER BAN CHI EUM;;;; 3180;HANGUL LETTER SSANGIEUNG;Lo;0;L; 1147;;;;N;HANGUL LETTER SSANG IEUNG;;;; 3181;HANGUL LETTER YESIEUNG;Lo;0;L; 114C;;;;N;HANGUL LETTER NGIEUNG;;;; 3182;HANGUL LETTER YESIEUNG-SIOS;Lo;0;L; 11F1;;;;N;HANGUL LETTER NGIEUNG SIOS;;;; 3183;HANGUL LETTER YESIEUNG-PANSIOS;Lo;0;L; 11F2;;;;N;HANGUL LETTER NGIEUNG BAN CHI EUM;;;; 3184;HANGUL LETTER KAPYEOUNPHIEUPH;Lo;0;L; 1157;;;;N;HANGUL LETTER PIEUP SUN GYEONG EUM;;;; 3185;HANGUL LETTER SSANGHIEUH;Lo;0;L; 1158;;;;N;HANGUL LETTER SSANG HIEUH;;;; 3186;HANGUL LETTER YEORINHIEUH;Lo;0;L; 1159;;;;N;HANGUL LETTER YEOLIN HIEUH;;;; 3187;HANGUL LETTER YO-YA;Lo;0;L; 1184;;;;N;HANGUL LETTER YOYA;;;; 3188;HANGUL LETTER YO-YAE;Lo;0;L; 1185;;;;N;HANGUL LETTER YOYAE;;;; 3189;HANGUL LETTER YO-I;Lo;0;L; 1188;;;;N;HANGUL LETTER YOI;;;; 318A;HANGUL LETTER YU-YEO;Lo;0;L; 1191;;;;N;HANGUL LETTER YUYEO;;;; 318B;HANGUL LETTER YU-YE;Lo;0;L; 1192;;;;N;HANGUL LETTER YUYE;;;; 318C;HANGUL LETTER YU-I;Lo;0;L; 1194;;;;N;HANGUL LETTER YUI;;;; 318D;HANGUL LETTER ARAEA;Lo;0;L; 119E;;;;N;HANGUL LETTER ALAE A;;;; 318E;HANGUL LETTER ARAEAE;Lo;0;L; 11A1;;;;N;HANGUL LETTER ALAE AE;;;; 3190;IDEOGRAPHIC ANNOTATION LINKING MARK;So;0;L;;;;;N;KANBUN TATETEN;Kanbun Tateten;;; 3191;IDEOGRAPHIC ANNOTATION REVERSE MARK;So;0;L;;;;;N;KAERITEN RE;Kaeriten;;; 3192;IDEOGRAPHIC ANNOTATION ONE MARK;No;0;L; 4E00;;;1;N;KAERITEN ITI;Kaeriten;;; 3193;IDEOGRAPHIC ANNOTATION TWO MARK;No;0;L; 4E8C;;;2;N;KAERITEN NI;Kaeriten;;; 3194;IDEOGRAPHIC ANNOTATION THREE MARK;No;0;L; 4E09;;;3;N;KAERITEN SAN;Kaeriten;;; 3195;IDEOGRAPHIC ANNOTATION FOUR MARK;No;0;L; 56DB;;;4;N;KAERITEN SI;Kaeriten;;; 3196;IDEOGRAPHIC ANNOTATION TOP MARK;So;0;L; 4E0A;;;;N;KAERITEN ZYOU;Kaeriten;;; 3197;IDEOGRAPHIC ANNOTATION MIDDLE MARK;So;0;L; 4E2D;;;;N;KAERITEN TYUU;Kaeriten;;; 3198;IDEOGRAPHIC ANNOTATION BOTTOM MARK;So;0;L; 4E0B;;;;N;KAERITEN GE;Kaeriten;;; 3199;IDEOGRAPHIC ANNOTATION FIRST MARK;So;0;L; 7532;;;;N;KAERITEN KOU;Kaeriten;;; 319A;IDEOGRAPHIC ANNOTATION SECOND MARK;So;0;L; 4E59;;;;N;KAERITEN OTU;Kaeriten;;; 319B;IDEOGRAPHIC ANNOTATION THIRD MARK;So;0;L; 4E19;;;;N;KAERITEN HEI;Kaeriten;;; 319C;IDEOGRAPHIC ANNOTATION FOURTH MARK;So;0;L; 4E01;;;;N;KAERITEN TEI;Kaeriten;;; 319D;IDEOGRAPHIC ANNOTATION HEAVEN MARK;So;0;L; 5929;;;;N;KAERITEN TEN;Kaeriten;;; 319E;IDEOGRAPHIC ANNOTATION EARTH MARK;So;0;L; 5730;;;;N;KAERITEN TI;Kaeriten;;; 319F;IDEOGRAPHIC ANNOTATION MAN MARK;So;0;L; 4EBA;;;;N;KAERITEN ZIN;Kaeriten;;; 31A0;BOPOMOFO LETTER BU;Lo;0;L;;;;;N;;;;; 31A1;BOPOMOFO LETTER ZI;Lo;0;L;;;;;N;;;;; 31A2;BOPOMOFO LETTER JI;Lo;0;L;;;;;N;;;;; 31A3;BOPOMOFO LETTER GU;Lo;0;L;;;;;N;;;;; 31A4;BOPOMOFO LETTER EE;Lo;0;L;;;;;N;;;;; 31A5;BOPOMOFO LETTER ENN;Lo;0;L;;;;;N;;;;; 31A6;BOPOMOFO LETTER OO;Lo;0;L;;;;;N;;;;; 31A7;BOPOMOFO LETTER ONN;Lo;0;L;;;;;N;;;;; 31A8;BOPOMOFO LETTER IR;Lo;0;L;;;;;N;;;;; 31A9;BOPOMOFO LETTER ANN;Lo;0;L;;;;;N;;;;; 31AA;BOPOMOFO LETTER INN;Lo;0;L;;;;;N;;;;; 31AB;BOPOMOFO LETTER UNN;Lo;0;L;;;;;N;;;;; 31AC;BOPOMOFO LETTER IM;Lo;0;L;;;;;N;;;;; 31AD;BOPOMOFO LETTER NGG;Lo;0;L;;;;;N;;;;; 31AE;BOPOMOFO LETTER AINN;Lo;0;L;;;;;N;;;;; 31AF;BOPOMOFO LETTER AUNN;Lo;0;L;;;;;N;;;;; 31B0;BOPOMOFO LETTER AM;Lo;0;L;;;;;N;;;;; 31B1;BOPOMOFO LETTER OM;Lo;0;L;;;;;N;;;;; 31B2;BOPOMOFO LETTER ONG;Lo;0;L;;;;;N;;;;; 31B3;BOPOMOFO LETTER INNN;Lo;0;L;;;;;N;;;;; 31B4;BOPOMOFO FINAL LETTER P;Lo;0;L;;;;;N;;;;; 31B5;BOPOMOFO FINAL LETTER T;Lo;0;L;;;;;N;;;;; 31B6;BOPOMOFO FINAL LETTER K;Lo;0;L;;;;;N;;;;; 31B7;BOPOMOFO FINAL LETTER H;Lo;0;L;;;;;N;;;;; 3200;PARENTHESIZED HANGUL KIYEOK;So;0;L; 0028 1100 0029;;;;N;PARENTHESIZED HANGUL GIYEOG;;;; 3201;PARENTHESIZED HANGUL NIEUN;So;0;L; 0028 1102 0029;;;;N;;;;; 3202;PARENTHESIZED HANGUL TIKEUT;So;0;L; 0028 1103 0029;;;;N;PARENTHESIZED HANGUL DIGEUD;;;; 3203;PARENTHESIZED HANGUL RIEUL;So;0;L; 0028 1105 0029;;;;N;PARENTHESIZED HANGUL LIEUL;;;; 3204;PARENTHESIZED HANGUL MIEUM;So;0;L; 0028 1106 0029;;;;N;;;;; 3205;PARENTHESIZED HANGUL PIEUP;So;0;L; 0028 1107 0029;;;;N;PARENTHESIZED HANGUL BIEUB;;;; 3206;PARENTHESIZED HANGUL SIOS;So;0;L; 0028 1109 0029;;;;N;;;;; 3207;PARENTHESIZED HANGUL IEUNG;So;0;L; 0028 110B 0029;;;;N;;;;; 3208;PARENTHESIZED HANGUL CIEUC;So;0;L; 0028 110C 0029;;;;N;PARENTHESIZED HANGUL JIEUJ;;;; 3209;PARENTHESIZED HANGUL CHIEUCH;So;0;L; 0028 110E 0029;;;;N;PARENTHESIZED HANGUL CIEUC;;;; 320A;PARENTHESIZED HANGUL KHIEUKH;So;0;L; 0028 110F 0029;;;;N;PARENTHESIZED HANGUL KIYEOK;;;; 320B;PARENTHESIZED HANGUL THIEUTH;So;0;L; 0028 1110 0029;;;;N;PARENTHESIZED HANGUL TIEUT;;;; 320C;PARENTHESIZED HANGUL PHIEUPH;So;0;L; 0028 1111 0029;;;;N;PARENTHESIZED HANGUL PIEUP;;;; 320D;PARENTHESIZED HANGUL HIEUH;So;0;L; 0028 1112 0029;;;;N;;;;; 320E;PARENTHESIZED HANGUL KIYEOK A;So;0;L; 0028 1100 1161 0029;;;;N;PARENTHESIZED HANGUL GA;;;; 320F;PARENTHESIZED HANGUL NIEUN A;So;0;L; 0028 1102 1161 0029;;;;N;PARENTHESIZED HANGUL NA;;;; 3210;PARENTHESIZED HANGUL TIKEUT A;So;0;L; 0028 1103 1161 0029;;;;N;PARENTHESIZED HANGUL DA;;;; 3211;PARENTHESIZED HANGUL RIEUL A;So;0;L; 0028 1105 1161 0029;;;;N;PARENTHESIZED HANGUL LA;;;; 3212;PARENTHESIZED HANGUL MIEUM A;So;0;L; 0028 1106 1161 0029;;;;N;PARENTHESIZED HANGUL MA;;;; 3213;PARENTHESIZED HANGUL PIEUP A;So;0;L; 0028 1107 1161 0029;;;;N;PARENTHESIZED HANGUL BA;;;; 3214;PARENTHESIZED HANGUL SIOS A;So;0;L; 0028 1109 1161 0029;;;;N;PARENTHESIZED HANGUL SA;;;; 3215;PARENTHESIZED HANGUL IEUNG A;So;0;L; 0028 110B 1161 0029;;;;N;PARENTHESIZED HANGUL A;;;; 3216;PARENTHESIZED HANGUL CIEUC A;So;0;L; 0028 110C 1161 0029;;;;N;PARENTHESIZED HANGUL JA;;;; 3217;PARENTHESIZED HANGUL CHIEUCH A;So;0;L; 0028 110E 1161 0029;;;;N;PARENTHESIZED HANGUL CA;;;; 3218;PARENTHESIZED HANGUL KHIEUKH A;So;0;L; 0028 110F 1161 0029;;;;N;PARENTHESIZED HANGUL KA;;;; 3219;PARENTHESIZED HANGUL THIEUTH A;So;0;L; 0028 1110 1161 0029;;;;N;PARENTHESIZED HANGUL TA;;;; 321A;PARENTHESIZED HANGUL PHIEUPH A;So;0;L; 0028 1111 1161 0029;;;;N;PARENTHESIZED HANGUL PA;;;; 321B;PARENTHESIZED HANGUL HIEUH A;So;0;L; 0028 1112 1161 0029;;;;N;PARENTHESIZED HANGUL HA;;;; 321C;PARENTHESIZED HANGUL CIEUC U;So;0;L; 0028 110C 116E 0029;;;;N;PARENTHESIZED HANGUL JU;;;; 3220;PARENTHESIZED IDEOGRAPH ONE;No;0;L; 0028 4E00 0029;;;1;N;;;;; 3221;PARENTHESIZED IDEOGRAPH TWO;No;0;L; 0028 4E8C 0029;;;2;N;;;;; 3222;PARENTHESIZED IDEOGRAPH THREE;No;0;L; 0028 4E09 0029;;;3;N;;;;; 3223;PARENTHESIZED IDEOGRAPH FOUR;No;0;L; 0028 56DB 0029;;;4;N;;;;; 3224;PARENTHESIZED IDEOGRAPH FIVE;No;0;L; 0028 4E94 0029;;;5;N;;;;; 3225;PARENTHESIZED IDEOGRAPH SIX;No;0;L; 0028 516D 0029;;;6;N;;;;; 3226;PARENTHESIZED IDEOGRAPH SEVEN;No;0;L; 0028 4E03 0029;;;7;N;;;;; 3227;PARENTHESIZED IDEOGRAPH EIGHT;No;0;L; 0028 516B 0029;;;8;N;;;;; 3228;PARENTHESIZED IDEOGRAPH NINE;No;0;L; 0028 4E5D 0029;;;9;N;;;;; 3229;PARENTHESIZED IDEOGRAPH TEN;No;0;L; 0028 5341 0029;;;10;N;;;;; 322A;PARENTHESIZED IDEOGRAPH MOON;So;0;L; 0028 6708 0029;;;;N;;;;; 322B;PARENTHESIZED IDEOGRAPH FIRE;So;0;L; 0028 706B 0029;;;;N;;;;; 322C;PARENTHESIZED IDEOGRAPH WATER;So;0;L; 0028 6C34 0029;;;;N;;;;; 322D;PARENTHESIZED IDEOGRAPH WOOD;So;0;L; 0028 6728 0029;;;;N;;;;; 322E;PARENTHESIZED IDEOGRAPH METAL;So;0;L; 0028 91D1 0029;;;;N;;;;; 322F;PARENTHESIZED IDEOGRAPH EARTH;So;0;L; 0028 571F 0029;;;;N;;;;; 3230;PARENTHESIZED IDEOGRAPH SUN;So;0;L; 0028 65E5 0029;;;;N;;;;; 3231;PARENTHESIZED IDEOGRAPH STOCK;So;0;L; 0028 682A 0029;;;;N;;;;; 3232;PARENTHESIZED IDEOGRAPH HAVE;So;0;L; 0028 6709 0029;;;;N;;;;; 3233;PARENTHESIZED IDEOGRAPH SOCIETY;So;0;L; 0028 793E 0029;;;;N;;;;; 3234;PARENTHESIZED IDEOGRAPH NAME;So;0;L; 0028 540D 0029;;;;N;;;;; 3235;PARENTHESIZED IDEOGRAPH SPECIAL;So;0;L; 0028 7279 0029;;;;N;;;;; 3236;PARENTHESIZED IDEOGRAPH FINANCIAL;So;0;L; 0028 8CA1 0029;;;;N;;;;; 3237;PARENTHESIZED IDEOGRAPH CONGRATULATION;So;0;L; 0028 795D 0029;;;;N;;;;; 3238;PARENTHESIZED IDEOGRAPH LABOR;So;0;L; 0028 52B4 0029;;;;N;;;;; 3239;PARENTHESIZED IDEOGRAPH REPRESENT;So;0;L; 0028 4EE3 0029;;;;N;;;;; 323A;PARENTHESIZED IDEOGRAPH CALL;So;0;L; 0028 547C 0029;;;;N;;;;; 323B;PARENTHESIZED IDEOGRAPH STUDY;So;0;L; 0028 5B66 0029;;;;N;;;;; 323C;PARENTHESIZED IDEOGRAPH SUPERVISE;So;0;L; 0028 76E3 0029;;;;N;;;;; 323D;PARENTHESIZED IDEOGRAPH ENTERPRISE;So;0;L; 0028 4F01 0029;;;;N;;;;; 323E;PARENTHESIZED IDEOGRAPH RESOURCE;So;0;L; 0028 8CC7 0029;;;;N;;;;; 323F;PARENTHESIZED IDEOGRAPH ALLIANCE;So;0;L; 0028 5354 0029;;;;N;;;;; 3240;PARENTHESIZED IDEOGRAPH FESTIVAL;So;0;L; 0028 796D 0029;;;;N;;;;; 3241;PARENTHESIZED IDEOGRAPH REST;So;0;L; 0028 4F11 0029;;;;N;;;;; 3242;PARENTHESIZED IDEOGRAPH SELF;So;0;L; 0028 81EA 0029;;;;N;;;;; 3243;PARENTHESIZED IDEOGRAPH REACH;So;0;L; 0028 81F3 0029;;;;N;;;;; 3260;CIRCLED HANGUL KIYEOK;So;0;L; 1100;;;;N;CIRCLED HANGUL GIYEOG;;;; 3261;CIRCLED HANGUL NIEUN;So;0;L; 1102;;;;N;;;;; 3262;CIRCLED HANGUL TIKEUT;So;0;L; 1103;;;;N;CIRCLED HANGUL DIGEUD;;;; 3263;CIRCLED HANGUL RIEUL;So;0;L; 1105;;;;N;CIRCLED HANGUL LIEUL;;;; 3264;CIRCLED HANGUL MIEUM;So;0;L; 1106;;;;N;;;;; 3265;CIRCLED HANGUL PIEUP;So;0;L; 1107;;;;N;CIRCLED HANGUL BIEUB;;;; 3266;CIRCLED HANGUL SIOS;So;0;L; 1109;;;;N;;;;; 3267;CIRCLED HANGUL IEUNG;So;0;L; 110B;;;;N;;;;; 3268;CIRCLED HANGUL CIEUC;So;0;L; 110C;;;;N;CIRCLED HANGUL JIEUJ;;;; 3269;CIRCLED HANGUL CHIEUCH;So;0;L; 110E;;;;N;CIRCLED HANGUL CIEUC;;;; 326A;CIRCLED HANGUL KHIEUKH;So;0;L; 110F;;;;N;CIRCLED HANGUL KIYEOK;;;; 326B;CIRCLED HANGUL THIEUTH;So;0;L; 1110;;;;N;CIRCLED HANGUL TIEUT;;;; 326C;CIRCLED HANGUL PHIEUPH;So;0;L; 1111;;;;N;CIRCLED HANGUL PIEUP;;;; 326D;CIRCLED HANGUL HIEUH;So;0;L; 1112;;;;N;;;;; 326E;CIRCLED HANGUL KIYEOK A;So;0;L; 1100 1161;;;;N;CIRCLED HANGUL GA;;;; 326F;CIRCLED HANGUL NIEUN A;So;0;L; 1102 1161;;;;N;CIRCLED HANGUL NA;;;; 3270;CIRCLED HANGUL TIKEUT A;So;0;L; 1103 1161;;;;N;CIRCLED HANGUL DA;;;; 3271;CIRCLED HANGUL RIEUL A;So;0;L; 1105 1161;;;;N;CIRCLED HANGUL LA;;;; 3272;CIRCLED HANGUL MIEUM A;So;0;L; 1106 1161;;;;N;CIRCLED HANGUL MA;;;; 3273;CIRCLED HANGUL PIEUP A;So;0;L; 1107 1161;;;;N;CIRCLED HANGUL BA;;;; 3274;CIRCLED HANGUL SIOS A;So;0;L; 1109 1161;;;;N;CIRCLED HANGUL SA;;;; 3275;CIRCLED HANGUL IEUNG A;So;0;L; 110B 1161;;;;N;CIRCLED HANGUL A;;;; 3276;CIRCLED HANGUL CIEUC A;So;0;L; 110C 1161;;;;N;CIRCLED HANGUL JA;;;; 3277;CIRCLED HANGUL CHIEUCH A;So;0;L; 110E 1161;;;;N;CIRCLED HANGUL CA;;;; 3278;CIRCLED HANGUL KHIEUKH A;So;0;L; 110F 1161;;;;N;CIRCLED HANGUL KA;;;; 3279;CIRCLED HANGUL THIEUTH A;So;0;L; 1110 1161;;;;N;CIRCLED HANGUL TA;;;; 327A;CIRCLED HANGUL PHIEUPH A;So;0;L; 1111 1161;;;;N;CIRCLED HANGUL PA;;;; 327B;CIRCLED HANGUL HIEUH A;So;0;L; 1112 1161;;;;N;CIRCLED HANGUL HA;;;; 327F;KOREAN STANDARD SYMBOL;So;0;L;;;;;N;;;;; 3280;CIRCLED IDEOGRAPH ONE;No;0;L; 4E00;;;1;N;;;;; 3281;CIRCLED IDEOGRAPH TWO;No;0;L; 4E8C;;;2;N;;;;; 3282;CIRCLED IDEOGRAPH THREE;No;0;L; 4E09;;;3;N;;;;; 3283;CIRCLED IDEOGRAPH FOUR;No;0;L; 56DB;;;4;N;;;;; 3284;CIRCLED IDEOGRAPH FIVE;No;0;L; 4E94;;;5;N;;;;; 3285;CIRCLED IDEOGRAPH SIX;No;0;L; 516D;;;6;N;;;;; 3286;CIRCLED IDEOGRAPH SEVEN;No;0;L; 4E03;;;7;N;;;;; 3287;CIRCLED IDEOGRAPH EIGHT;No;0;L; 516B;;;8;N;;;;; 3288;CIRCLED IDEOGRAPH NINE;No;0;L; 4E5D;;;9;N;;;;; 3289;CIRCLED IDEOGRAPH TEN;No;0;L; 5341;;;10;N;;;;; 328A;CIRCLED IDEOGRAPH MOON;So;0;L; 6708;;;;N;;;;; 328B;CIRCLED IDEOGRAPH FIRE;So;0;L; 706B;;;;N;;;;; 328C;CIRCLED IDEOGRAPH WATER;So;0;L; 6C34;;;;N;;;;; 328D;CIRCLED IDEOGRAPH WOOD;So;0;L; 6728;;;;N;;;;; 328E;CIRCLED IDEOGRAPH METAL;So;0;L; 91D1;;;;N;;;;; 328F;CIRCLED IDEOGRAPH EARTH;So;0;L; 571F;;;;N;;;;; 3290;CIRCLED IDEOGRAPH SUN;So;0;L; 65E5;;;;N;;;;; 3291;CIRCLED IDEOGRAPH STOCK;So;0;L; 682A;;;;N;;;;; 3292;CIRCLED IDEOGRAPH HAVE;So;0;L; 6709;;;;N;;;;; 3293;CIRCLED IDEOGRAPH SOCIETY;So;0;L; 793E;;;;N;;;;; 3294;CIRCLED IDEOGRAPH NAME;So;0;L; 540D;;;;N;;;;; 3295;CIRCLED IDEOGRAPH SPECIAL;So;0;L; 7279;;;;N;;;;; 3296;CIRCLED IDEOGRAPH FINANCIAL;So;0;L; 8CA1;;;;N;;;;; 3297;CIRCLED IDEOGRAPH CONGRATULATION;So;0;L; 795D;;;;N;;;;; 3298;CIRCLED IDEOGRAPH LABOR;So;0;L; 52B4;;;;N;;;;; 3299;CIRCLED IDEOGRAPH SECRET;So;0;L; 79D8;;;;N;;;;; 329A;CIRCLED IDEOGRAPH MALE;So;0;L; 7537;;;;N;;;;; 329B;CIRCLED IDEOGRAPH FEMALE;So;0;L; 5973;;;;N;;;;; 329C;CIRCLED IDEOGRAPH SUITABLE;So;0;L; 9069;;;;N;;;;; 329D;CIRCLED IDEOGRAPH EXCELLENT;So;0;L; 512A;;;;N;;;;; 329E;CIRCLED IDEOGRAPH PRINT;So;0;L; 5370;;;;N;;;;; 329F;CIRCLED IDEOGRAPH ATTENTION;So;0;L; 6CE8;;;;N;;;;; 32A0;CIRCLED IDEOGRAPH ITEM;So;0;L; 9805;;;;N;;;;; 32A1;CIRCLED IDEOGRAPH REST;So;0;L; 4F11;;;;N;;;;; 32A2;CIRCLED IDEOGRAPH COPY;So;0;L; 5199;;;;N;;;;; 32A3;CIRCLED IDEOGRAPH CORRECT;So;0;L; 6B63;;;;N;;;;; 32A4;CIRCLED IDEOGRAPH HIGH;So;0;L; 4E0A;;;;N;;;;; 32A5;CIRCLED IDEOGRAPH CENTRE;So;0;L; 4E2D;;;;N;CIRCLED IDEOGRAPH CENTER;;;; 32A6;CIRCLED IDEOGRAPH LOW;So;0;L; 4E0B;;;;N;;;;; 32A7;CIRCLED IDEOGRAPH LEFT;So;0;L; 5DE6;;;;N;;;;; 32A8;CIRCLED IDEOGRAPH RIGHT;So;0;L; 53F3;;;;N;;;;; 32A9;CIRCLED IDEOGRAPH MEDICINE;So;0;L; 533B;;;;N;;;;; 32AA;CIRCLED IDEOGRAPH RELIGION;So;0;L; 5B97;;;;N;;;;; 32AB;CIRCLED IDEOGRAPH STUDY;So;0;L; 5B66;;;;N;;;;; 32AC;CIRCLED IDEOGRAPH SUPERVISE;So;0;L; 76E3;;;;N;;;;; 32AD;CIRCLED IDEOGRAPH ENTERPRISE;So;0;L; 4F01;;;;N;;;;; 32AE;CIRCLED IDEOGRAPH RESOURCE;So;0;L; 8CC7;;;;N;;;;; 32AF;CIRCLED IDEOGRAPH ALLIANCE;So;0;L; 5354;;;;N;;;;; 32B0;CIRCLED IDEOGRAPH NIGHT;So;0;L; 591C;;;;N;;;;; 32C0;IDEOGRAPHIC TELEGRAPH SYMBOL FOR JANUARY;So;0;L; 0031 6708;;;;N;;;;; 32C1;IDEOGRAPHIC TELEGRAPH SYMBOL FOR FEBRUARY;So;0;L; 0032 6708;;;;N;;;;; 32C2;IDEOGRAPHIC TELEGRAPH SYMBOL FOR MARCH;So;0;L; 0033 6708;;;;N;;;;; 32C3;IDEOGRAPHIC TELEGRAPH SYMBOL FOR APRIL;So;0;L; 0034 6708;;;;N;;;;; 32C4;IDEOGRAPHIC TELEGRAPH SYMBOL FOR MAY;So;0;L; 0035 6708;;;;N;;;;; 32C5;IDEOGRAPHIC TELEGRAPH SYMBOL FOR JUNE;So;0;L; 0036 6708;;;;N;;;;; 32C6;IDEOGRAPHIC TELEGRAPH SYMBOL FOR JULY;So;0;L; 0037 6708;;;;N;;;;; 32C7;IDEOGRAPHIC TELEGRAPH SYMBOL FOR AUGUST;So;0;L; 0038 6708;;;;N;;;;; 32C8;IDEOGRAPHIC TELEGRAPH SYMBOL FOR SEPTEMBER;So;0;L; 0039 6708;;;;N;;;;; 32C9;IDEOGRAPHIC TELEGRAPH SYMBOL FOR OCTOBER;So;0;L; 0031 0030 6708;;;;N;;;;; 32CA;IDEOGRAPHIC TELEGRAPH SYMBOL FOR NOVEMBER;So;0;L; 0031 0031 6708;;;;N;;;;; 32CB;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DECEMBER;So;0;L; 0031 0032 6708;;;;N;;;;; 32D0;CIRCLED KATAKANA A;So;0;L; 30A2;;;;N;;;;; 32D1;CIRCLED KATAKANA I;So;0;L; 30A4;;;;N;;;;; 32D2;CIRCLED KATAKANA U;So;0;L; 30A6;;;;N;;;;; 32D3;CIRCLED KATAKANA E;So;0;L; 30A8;;;;N;;;;; 32D4;CIRCLED KATAKANA O;So;0;L; 30AA;;;;N;;;;; 32D5;CIRCLED KATAKANA KA;So;0;L; 30AB;;;;N;;;;; 32D6;CIRCLED KATAKANA KI;So;0;L; 30AD;;;;N;;;;; 32D7;CIRCLED KATAKANA KU;So;0;L; 30AF;;;;N;;;;; 32D8;CIRCLED KATAKANA KE;So;0;L; 30B1;;;;N;;;;; 32D9;CIRCLED KATAKANA KO;So;0;L; 30B3;;;;N;;;;; 32DA;CIRCLED KATAKANA SA;So;0;L; 30B5;;;;N;;;;; 32DB;CIRCLED KATAKANA SI;So;0;L; 30B7;;;;N;;;;; 32DC;CIRCLED KATAKANA SU;So;0;L; 30B9;;;;N;;;;; 32DD;CIRCLED KATAKANA SE;So;0;L; 30BB;;;;N;;;;; 32DE;CIRCLED KATAKANA SO;So;0;L; 30BD;;;;N;;;;; 32DF;CIRCLED KATAKANA TA;So;0;L; 30BF;;;;N;;;;; 32E0;CIRCLED KATAKANA TI;So;0;L; 30C1;;;;N;;;;; 32E1;CIRCLED KATAKANA TU;So;0;L; 30C4;;;;N;;;;; 32E2;CIRCLED KATAKANA TE;So;0;L; 30C6;;;;N;;;;; 32E3;CIRCLED KATAKANA TO;So;0;L; 30C8;;;;N;;;;; 32E4;CIRCLED KATAKANA NA;So;0;L; 30CA;;;;N;;;;; 32E5;CIRCLED KATAKANA NI;So;0;L; 30CB;;;;N;;;;; 32E6;CIRCLED KATAKANA NU;So;0;L; 30CC;;;;N;;;;; 32E7;CIRCLED KATAKANA NE;So;0;L; 30CD;;;;N;;;;; 32E8;CIRCLED KATAKANA NO;So;0;L; 30CE;;;;N;;;;; 32E9;CIRCLED KATAKANA HA;So;0;L; 30CF;;;;N;;;;; 32EA;CIRCLED KATAKANA HI;So;0;L; 30D2;;;;N;;;;; 32EB;CIRCLED KATAKANA HU;So;0;L; 30D5;;;;N;;;;; 32EC;CIRCLED KATAKANA HE;So;0;L; 30D8;;;;N;;;;; 32ED;CIRCLED KATAKANA HO;So;0;L; 30DB;;;;N;;;;; 32EE;CIRCLED KATAKANA MA;So;0;L; 30DE;;;;N;;;;; 32EF;CIRCLED KATAKANA MI;So;0;L; 30DF;;;;N;;;;; 32F0;CIRCLED KATAKANA MU;So;0;L; 30E0;;;;N;;;;; 32F1;CIRCLED KATAKANA ME;So;0;L; 30E1;;;;N;;;;; 32F2;CIRCLED KATAKANA MO;So;0;L; 30E2;;;;N;;;;; 32F3;CIRCLED KATAKANA YA;So;0;L; 30E4;;;;N;;;;; 32F4;CIRCLED KATAKANA YU;So;0;L; 30E6;;;;N;;;;; 32F5;CIRCLED KATAKANA YO;So;0;L; 30E8;;;;N;;;;; 32F6;CIRCLED KATAKANA RA;So;0;L; 30E9;;;;N;;;;; 32F7;CIRCLED KATAKANA RI;So;0;L; 30EA;;;;N;;;;; 32F8;CIRCLED KATAKANA RU;So;0;L; 30EB;;;;N;;;;; 32F9;CIRCLED KATAKANA RE;So;0;L; 30EC;;;;N;;;;; 32FA;CIRCLED KATAKANA RO;So;0;L; 30ED;;;;N;;;;; 32FB;CIRCLED KATAKANA WA;So;0;L; 30EF;;;;N;;;;; 32FC;CIRCLED KATAKANA WI;So;0;L; 30F0;;;;N;;;;; 32FD;CIRCLED KATAKANA WE;So;0;L; 30F1;;;;N;;;;; 32FE;CIRCLED KATAKANA WO;So;0;L; 30F2;;;;N;;;;; 3300;SQUARE APAATO;So;0;L; 30A2 30D1 30FC 30C8;;;;N;SQUARED APAATO;;;; 3301;SQUARE ARUHUA;So;0;L; 30A2 30EB 30D5 30A1;;;;N;SQUARED ARUHUA;;;; 3302;SQUARE ANPEA;So;0;L; 30A2 30F3 30DA 30A2;;;;N;SQUARED ANPEA;;;; 3303;SQUARE AARU;So;0;L; 30A2 30FC 30EB;;;;N;SQUARED AARU;;;; 3304;SQUARE ININGU;So;0;L; 30A4 30CB 30F3 30B0;;;;N;SQUARED ININGU;;;; 3305;SQUARE INTI;So;0;L; 30A4 30F3 30C1;;;;N;SQUARED INTI;;;; 3306;SQUARE UON;So;0;L; 30A6 30A9 30F3;;;;N;SQUARED UON;;;; 3307;SQUARE ESUKUUDO;So;0;L; 30A8 30B9 30AF 30FC 30C9;;;;N;SQUARED ESUKUUDO;;;; 3308;SQUARE EEKAA;So;0;L; 30A8 30FC 30AB 30FC;;;;N;SQUARED EEKAA;;;; 3309;SQUARE ONSU;So;0;L; 30AA 30F3 30B9;;;;N;SQUARED ONSU;;;; 330A;SQUARE OOMU;So;0;L; 30AA 30FC 30E0;;;;N;SQUARED OOMU;;;; 330B;SQUARE KAIRI;So;0;L; 30AB 30A4 30EA;;;;N;SQUARED KAIRI;;;; 330C;SQUARE KARATTO;So;0;L; 30AB 30E9 30C3 30C8;;;;N;SQUARED KARATTO;;;; 330D;SQUARE KARORII;So;0;L; 30AB 30ED 30EA 30FC;;;;N;SQUARED KARORII;;;; 330E;SQUARE GARON;So;0;L; 30AC 30ED 30F3;;;;N;SQUARED GARON;;;; 330F;SQUARE GANMA;So;0;L; 30AC 30F3 30DE;;;;N;SQUARED GANMA;;;; 3310;SQUARE GIGA;So;0;L; 30AE 30AC;;;;N;SQUARED GIGA;;;; 3311;SQUARE GINII;So;0;L; 30AE 30CB 30FC;;;;N;SQUARED GINII;;;; 3312;SQUARE KYURII;So;0;L; 30AD 30E5 30EA 30FC;;;;N;SQUARED KYURII;;;; 3313;SQUARE GIRUDAA;So;0;L; 30AE 30EB 30C0 30FC;;;;N;SQUARED GIRUDAA;;;; 3314;SQUARE KIRO;So;0;L; 30AD 30ED;;;;N;SQUARED KIRO;;;; 3315;SQUARE KIROGURAMU;So;0;L; 30AD 30ED 30B0 30E9 30E0;;;;N;SQUARED KIROGURAMU;;;; 3316;SQUARE KIROMEETORU;So;0;L; 30AD 30ED 30E1 30FC 30C8 30EB;;;;N;SQUARED KIROMEETORU;;;; 3317;SQUARE KIROWATTO;So;0;L; 30AD 30ED 30EF 30C3 30C8;;;;N;SQUARED KIROWATTO;;;; 3318;SQUARE GURAMU;So;0;L; 30B0 30E9 30E0;;;;N;SQUARED GURAMU;;;; 3319;SQUARE GURAMUTON;So;0;L; 30B0 30E9 30E0 30C8 30F3;;;;N;SQUARED GURAMUTON;;;; 331A;SQUARE KURUZEIRO;So;0;L; 30AF 30EB 30BC 30A4 30ED;;;;N;SQUARED KURUZEIRO;;;; 331B;SQUARE KUROONE;So;0;L; 30AF 30ED 30FC 30CD;;;;N;SQUARED KUROONE;;;; 331C;SQUARE KEESU;So;0;L; 30B1 30FC 30B9;;;;N;SQUARED KEESU;;;; 331D;SQUARE KORUNA;So;0;L; 30B3 30EB 30CA;;;;N;SQUARED KORUNA;;;; 331E;SQUARE KOOPO;So;0;L; 30B3 30FC 30DD;;;;N;SQUARED KOOPO;;;; 331F;SQUARE SAIKURU;So;0;L; 30B5 30A4 30AF 30EB;;;;N;SQUARED SAIKURU;;;; 3320;SQUARE SANTIIMU;So;0;L; 30B5 30F3 30C1 30FC 30E0;;;;N;SQUARED SANTIIMU;;;; 3321;SQUARE SIRINGU;So;0;L; 30B7 30EA 30F3 30B0;;;;N;SQUARED SIRINGU;;;; 3322;SQUARE SENTI;So;0;L; 30BB 30F3 30C1;;;;N;SQUARED SENTI;;;; 3323;SQUARE SENTO;So;0;L; 30BB 30F3 30C8;;;;N;SQUARED SENTO;;;; 3324;SQUARE DAASU;So;0;L; 30C0 30FC 30B9;;;;N;SQUARED DAASU;;;; 3325;SQUARE DESI;So;0;L; 30C7 30B7;;;;N;SQUARED DESI;;;; 3326;SQUARE DORU;So;0;L; 30C9 30EB;;;;N;SQUARED DORU;;;; 3327;SQUARE TON;So;0;L; 30C8 30F3;;;;N;SQUARED TON;;;; 3328;SQUARE NANO;So;0;L; 30CA 30CE;;;;N;SQUARED NANO;;;; 3329;SQUARE NOTTO;So;0;L; 30CE 30C3 30C8;;;;N;SQUARED NOTTO;;;; 332A;SQUARE HAITU;So;0;L; 30CF 30A4 30C4;;;;N;SQUARED HAITU;;;; 332B;SQUARE PAASENTO;So;0;L; 30D1 30FC 30BB 30F3 30C8;;;;N;SQUARED PAASENTO;;;; 332C;SQUARE PAATU;So;0;L; 30D1 30FC 30C4;;;;N;SQUARED PAATU;;;; 332D;SQUARE BAARERU;So;0;L; 30D0 30FC 30EC 30EB;;;;N;SQUARED BAARERU;;;; 332E;SQUARE PIASUTORU;So;0;L; 30D4 30A2 30B9 30C8 30EB;;;;N;SQUARED PIASUTORU;;;; 332F;SQUARE PIKURU;So;0;L; 30D4 30AF 30EB;;;;N;SQUARED PIKURU;;;; 3330;SQUARE PIKO;So;0;L; 30D4 30B3;;;;N;SQUARED PIKO;;;; 3331;SQUARE BIRU;So;0;L; 30D3 30EB;;;;N;SQUARED BIRU;;;; 3332;SQUARE HUARADDO;So;0;L; 30D5 30A1 30E9 30C3 30C9;;;;N;SQUARED HUARADDO;;;; 3333;SQUARE HUIITO;So;0;L; 30D5 30A3 30FC 30C8;;;;N;SQUARED HUIITO;;;; 3334;SQUARE BUSSYERU;So;0;L; 30D6 30C3 30B7 30A7 30EB;;;;N;SQUARED BUSSYERU;;;; 3335;SQUARE HURAN;So;0;L; 30D5 30E9 30F3;;;;N;SQUARED HURAN;;;; 3336;SQUARE HEKUTAARU;So;0;L; 30D8 30AF 30BF 30FC 30EB;;;;N;SQUARED HEKUTAARU;;;; 3337;SQUARE PESO;So;0;L; 30DA 30BD;;;;N;SQUARED PESO;;;; 3338;SQUARE PENIHI;So;0;L; 30DA 30CB 30D2;;;;N;SQUARED PENIHI;;;; 3339;SQUARE HERUTU;So;0;L; 30D8 30EB 30C4;;;;N;SQUARED HERUTU;;;; 333A;SQUARE PENSU;So;0;L; 30DA 30F3 30B9;;;;N;SQUARED PENSU;;;; 333B;SQUARE PEEZI;So;0;L; 30DA 30FC 30B8;;;;N;SQUARED PEEZI;;;; 333C;SQUARE BEETA;So;0;L; 30D9 30FC 30BF;;;;N;SQUARED BEETA;;;; 333D;SQUARE POINTO;So;0;L; 30DD 30A4 30F3 30C8;;;;N;SQUARED POINTO;;;; 333E;SQUARE BORUTO;So;0;L; 30DC 30EB 30C8;;;;N;SQUARED BORUTO;;;; 333F;SQUARE HON;So;0;L; 30DB 30F3;;;;N;SQUARED HON;;;; 3340;SQUARE PONDO;So;0;L; 30DD 30F3 30C9;;;;N;SQUARED PONDO;;;; 3341;SQUARE HOORU;So;0;L; 30DB 30FC 30EB;;;;N;SQUARED HOORU;;;; 3342;SQUARE HOON;So;0;L; 30DB 30FC 30F3;;;;N;SQUARED HOON;;;; 3343;SQUARE MAIKURO;So;0;L; 30DE 30A4 30AF 30ED;;;;N;SQUARED MAIKURO;;;; 3344;SQUARE MAIRU;So;0;L; 30DE 30A4 30EB;;;;N;SQUARED MAIRU;;;; 3345;SQUARE MAHHA;So;0;L; 30DE 30C3 30CF;;;;N;SQUARED MAHHA;;;; 3346;SQUARE MARUKU;So;0;L; 30DE 30EB 30AF;;;;N;SQUARED MARUKU;;;; 3347;SQUARE MANSYON;So;0;L; 30DE 30F3 30B7 30E7 30F3;;;;N;SQUARED MANSYON;;;; 3348;SQUARE MIKURON;So;0;L; 30DF 30AF 30ED 30F3;;;;N;SQUARED MIKURON;;;; 3349;SQUARE MIRI;So;0;L; 30DF 30EA;;;;N;SQUARED MIRI;;;; 334A;SQUARE MIRIBAARU;So;0;L; 30DF 30EA 30D0 30FC 30EB;;;;N;SQUARED MIRIBAARU;;;; 334B;SQUARE MEGA;So;0;L; 30E1 30AC;;;;N;SQUARED MEGA;;;; 334C;SQUARE MEGATON;So;0;L; 30E1 30AC 30C8 30F3;;;;N;SQUARED MEGATON;;;; 334D;SQUARE MEETORU;So;0;L; 30E1 30FC 30C8 30EB;;;;N;SQUARED MEETORU;;;; 334E;SQUARE YAADO;So;0;L; 30E4 30FC 30C9;;;;N;SQUARED YAADO;;;; 334F;SQUARE YAARU;So;0;L; 30E4 30FC 30EB;;;;N;SQUARED YAARU;;;; 3350;SQUARE YUAN;So;0;L; 30E6 30A2 30F3;;;;N;SQUARED YUAN;;;; 3351;SQUARE RITTORU;So;0;L; 30EA 30C3 30C8 30EB;;;;N;SQUARED RITTORU;;;; 3352;SQUARE RIRA;So;0;L; 30EA 30E9;;;;N;SQUARED RIRA;;;; 3353;SQUARE RUPII;So;0;L; 30EB 30D4 30FC;;;;N;SQUARED RUPII;;;; 3354;SQUARE RUUBURU;So;0;L; 30EB 30FC 30D6 30EB;;;;N;SQUARED RUUBURU;;;; 3355;SQUARE REMU;So;0;L; 30EC 30E0;;;;N;SQUARED REMU;;;; 3356;SQUARE RENTOGEN;So;0;L; 30EC 30F3 30C8 30B2 30F3;;;;N;SQUARED RENTOGEN;;;; 3357;SQUARE WATTO;So;0;L; 30EF 30C3 30C8;;;;N;SQUARED WATTO;;;; 3358;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR ZERO;So;0;L; 0030 70B9;;;;N;;;;; 3359;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR ONE;So;0;L; 0031 70B9;;;;N;;;;; 335A;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWO;So;0;L; 0032 70B9;;;;N;;;;; 335B;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR THREE;So;0;L; 0033 70B9;;;;N;;;;; 335C;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR FOUR;So;0;L; 0034 70B9;;;;N;;;;; 335D;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR FIVE;So;0;L; 0035 70B9;;;;N;;;;; 335E;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR SIX;So;0;L; 0036 70B9;;;;N;;;;; 335F;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR SEVEN;So;0;L; 0037 70B9;;;;N;;;;; 3360;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR EIGHT;So;0;L; 0038 70B9;;;;N;;;;; 3361;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR NINE;So;0;L; 0039 70B9;;;;N;;;;; 3362;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TEN;So;0;L; 0031 0030 70B9;;;;N;;;;; 3363;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR ELEVEN;So;0;L; 0031 0031 70B9;;;;N;;;;; 3364;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWELVE;So;0;L; 0031 0032 70B9;;;;N;;;;; 3365;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR THIRTEEN;So;0;L; 0031 0033 70B9;;;;N;;;;; 3366;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR FOURTEEN;So;0;L; 0031 0034 70B9;;;;N;;;;; 3367;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR FIFTEEN;So;0;L; 0031 0035 70B9;;;;N;;;;; 3368;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR SIXTEEN;So;0;L; 0031 0036 70B9;;;;N;;;;; 3369;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR SEVENTEEN;So;0;L; 0031 0037 70B9;;;;N;;;;; 336A;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR EIGHTEEN;So;0;L; 0031 0038 70B9;;;;N;;;;; 336B;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR NINETEEN;So;0;L; 0031 0039 70B9;;;;N;;;;; 336C;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY;So;0;L; 0032 0030 70B9;;;;N;;;;; 336D;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY-ONE;So;0;L; 0032 0031 70B9;;;;N;;;;; 336E;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY-TWO;So;0;L; 0032 0032 70B9;;;;N;;;;; 336F;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY-THREE;So;0;L; 0032 0033 70B9;;;;N;;;;; 3370;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY-FOUR;So;0;L; 0032 0034 70B9;;;;N;;;;; 3371;SQUARE HPA;So;0;L; 0068 0050 0061;;;;N;;;;; 3372;SQUARE DA;So;0;L; 0064 0061;;;;N;;;;; 3373;SQUARE AU;So;0;L; 0041 0055;;;;N;;;;; 3374;SQUARE BAR;So;0;L; 0062 0061 0072;;;;N;;;;; 3375;SQUARE OV;So;0;L; 006F 0056;;;;N;;;;; 3376;SQUARE PC;So;0;L; 0070 0063;;;;N;;;;; 337B;SQUARE ERA NAME HEISEI;So;0;L; 5E73 6210;;;;N;SQUARED TWO IDEOGRAPHS ERA NAME HEISEI;;;; 337C;SQUARE ERA NAME SYOUWA;So;0;L; 662D 548C;;;;N;SQUARED TWO IDEOGRAPHS ERA NAME SYOUWA;;;; 337D;SQUARE ERA NAME TAISYOU;So;0;L; 5927 6B63;;;;N;SQUARED TWO IDEOGRAPHS ERA NAME TAISYOU;;;; 337E;SQUARE ERA NAME MEIZI;So;0;L; 660E 6CBB;;;;N;SQUARED TWO IDEOGRAPHS ERA NAME MEIZI;;;; 337F;SQUARE CORPORATION;So;0;L; 682A 5F0F 4F1A 793E;;;;N;SQUARED FOUR IDEOGRAPHS CORPORATION;;;; 3380;SQUARE PA AMPS;So;0;L; 0070 0041;;;;N;SQUARED PA AMPS;;;; 3381;SQUARE NA;So;0;L; 006E 0041;;;;N;SQUARED NA;;;; 3382;SQUARE MU A;So;0;L; 03BC 0041;;;;N;SQUARED MU A;;;; 3383;SQUARE MA;So;0;L; 006D 0041;;;;N;SQUARED MA;;;; 3384;SQUARE KA;So;0;L; 006B 0041;;;;N;SQUARED KA;;;; 3385;SQUARE KB;So;0;L; 004B 0042;;;;N;SQUARED KB;;;; 3386;SQUARE MB;So;0;L; 004D 0042;;;;N;SQUARED MB;;;; 3387;SQUARE GB;So;0;L; 0047 0042;;;;N;SQUARED GB;;;; 3388;SQUARE CAL;So;0;L; 0063 0061 006C;;;;N;SQUARED CAL;;;; 3389;SQUARE KCAL;So;0;L; 006B 0063 0061 006C;;;;N;SQUARED KCAL;;;; 338A;SQUARE PF;So;0;L; 0070 0046;;;;N;SQUARED PF;;;; 338B;SQUARE NF;So;0;L; 006E 0046;;;;N;SQUARED NF;;;; 338C;SQUARE MU F;So;0;L; 03BC 0046;;;;N;SQUARED MU F;;;; 338D;SQUARE MU G;So;0;L; 03BC 0067;;;;N;SQUARED MU G;;;; 338E;SQUARE MG;So;0;L; 006D 0067;;;;N;SQUARED MG;;;; 338F;SQUARE KG;So;0;L; 006B 0067;;;;N;SQUARED KG;;;; 3390;SQUARE HZ;So;0;L; 0048 007A;;;;N;SQUARED HZ;;;; 3391;SQUARE KHZ;So;0;L; 006B 0048 007A;;;;N;SQUARED KHZ;;;; 3392;SQUARE MHZ;So;0;L; 004D 0048 007A;;;;N;SQUARED MHZ;;;; 3393;SQUARE GHZ;So;0;L; 0047 0048 007A;;;;N;SQUARED GHZ;;;; 3394;SQUARE THZ;So;0;L; 0054 0048 007A;;;;N;SQUARED THZ;;;; 3395;SQUARE MU L;So;0;L; 03BC 2113;;;;N;SQUARED MU L;;;; 3396;SQUARE ML;So;0;L; 006D 2113;;;;N;SQUARED ML;;;; 3397;SQUARE DL;So;0;L; 0064 2113;;;;N;SQUARED DL;;;; 3398;SQUARE KL;So;0;L; 006B 2113;;;;N;SQUARED KL;;;; 3399;SQUARE FM;So;0;L; 0066 006D;;;;N;SQUARED FM;;;; 339A;SQUARE NM;So;0;L; 006E 006D;;;;N;SQUARED NM;;;; 339B;SQUARE MU M;So;0;L; 03BC 006D;;;;N;SQUARED MU M;;;; 339C;SQUARE MM;So;0;L; 006D 006D;;;;N;SQUARED MM;;;; 339D;SQUARE CM;So;0;L; 0063 006D;;;;N;SQUARED CM;;;; 339E;SQUARE KM;So;0;L; 006B 006D;;;;N;SQUARED KM;;;; 339F;SQUARE MM SQUARED;So;0;L; 006D 006D 00B2;;;;N;SQUARED MM SQUARED;;;; 33A0;SQUARE CM SQUARED;So;0;L; 0063 006D 00B2;;;;N;SQUARED CM SQUARED;;;; 33A1;SQUARE M SQUARED;So;0;L; 006D 00B2;;;;N;SQUARED M SQUARED;;;; 33A2;SQUARE KM SQUARED;So;0;L; 006B 006D 00B2;;;;N;SQUARED KM SQUARED;;;; 33A3;SQUARE MM CUBED;So;0;L; 006D 006D 00B3;;;;N;SQUARED MM CUBED;;;; 33A4;SQUARE CM CUBED;So;0;L; 0063 006D 00B3;;;;N;SQUARED CM CUBED;;;; 33A5;SQUARE M CUBED;So;0;L; 006D 00B3;;;;N;SQUARED M CUBED;;;; 33A6;SQUARE KM CUBED;So;0;L; 006B 006D 00B3;;;;N;SQUARED KM CUBED;;;; 33A7;SQUARE M OVER S;So;0;L; 006D 2215 0073;;;;N;SQUARED M OVER S;;;; 33A8;SQUARE M OVER S SQUARED;So;0;L; 006D 2215 0073 00B2;;;;N;SQUARED M OVER S SQUARED;;;; 33A9;SQUARE PA;So;0;L; 0050 0061;;;;N;SQUARED PA;;;; 33AA;SQUARE KPA;So;0;L; 006B 0050 0061;;;;N;SQUARED KPA;;;; 33AB;SQUARE MPA;So;0;L; 004D 0050 0061;;;;N;SQUARED MPA;;;; 33AC;SQUARE GPA;So;0;L; 0047 0050 0061;;;;N;SQUARED GPA;;;; 33AD;SQUARE RAD;So;0;L; 0072 0061 0064;;;;N;SQUARED RAD;;;; 33AE;SQUARE RAD OVER S;So;0;L; 0072 0061 0064 2215 0073;;;;N;SQUARED RAD OVER S;;;; 33AF;SQUARE RAD OVER S SQUARED;So;0;L; 0072 0061 0064 2215 0073 00B2;;;;N;SQUARED RAD OVER S SQUARED;;;; 33B0;SQUARE PS;So;0;L; 0070 0073;;;;N;SQUARED PS;;;; 33B1;SQUARE NS;So;0;L; 006E 0073;;;;N;SQUARED NS;;;; 33B2;SQUARE MU S;So;0;L; 03BC 0073;;;;N;SQUARED MU S;;;; 33B3;SQUARE MS;So;0;L; 006D 0073;;;;N;SQUARED MS;;;; 33B4;SQUARE PV;So;0;L; 0070 0056;;;;N;SQUARED PV;;;; 33B5;SQUARE NV;So;0;L; 006E 0056;;;;N;SQUARED NV;;;; 33B6;SQUARE MU V;So;0;L; 03BC 0056;;;;N;SQUARED MU V;;;; 33B7;SQUARE MV;So;0;L; 006D 0056;;;;N;SQUARED MV;;;; 33B8;SQUARE KV;So;0;L; 006B 0056;;;;N;SQUARED KV;;;; 33B9;SQUARE MV MEGA;So;0;L; 004D 0056;;;;N;SQUARED MV MEGA;;;; 33BA;SQUARE PW;So;0;L; 0070 0057;;;;N;SQUARED PW;;;; 33BB;SQUARE NW;So;0;L; 006E 0057;;;;N;SQUARED NW;;;; 33BC;SQUARE MU W;So;0;L; 03BC 0057;;;;N;SQUARED MU W;;;; 33BD;SQUARE MW;So;0;L; 006D 0057;;;;N;SQUARED MW;;;; 33BE;SQUARE KW;So;0;L; 006B 0057;;;;N;SQUARED KW;;;; 33BF;SQUARE MW MEGA;So;0;L; 004D 0057;;;;N;SQUARED MW MEGA;;;; 33C0;SQUARE K OHM;So;0;L; 006B 03A9;;;;N;SQUARED K OHM;;;; 33C1;SQUARE M OHM;So;0;L; 004D 03A9;;;;N;SQUARED M OHM;;;; 33C2;SQUARE AM;So;0;L; 0061 002E 006D 002E;;;;N;SQUARED AM;;;; 33C3;SQUARE BQ;So;0;L; 0042 0071;;;;N;SQUARED BQ;;;; 33C4;SQUARE CC;So;0;L; 0063 0063;;;;N;SQUARED CC;;;; 33C5;SQUARE CD;So;0;L; 0063 0064;;;;N;SQUARED CD;;;; 33C6;SQUARE C OVER KG;So;0;L; 0043 2215 006B 0067;;;;N;SQUARED C OVER KG;;;; 33C7;SQUARE CO;So;0;L; 0043 006F 002E;;;;N;SQUARED CO;;;; 33C8;SQUARE DB;So;0;L; 0064 0042;;;;N;SQUARED DB;;;; 33C9;SQUARE GY;So;0;L; 0047 0079;;;;N;SQUARED GY;;;; 33CA;SQUARE HA;So;0;L; 0068 0061;;;;N;SQUARED HA;;;; 33CB;SQUARE HP;So;0;L; 0048 0050;;;;N;SQUARED HP;;;; 33CC;SQUARE IN;So;0;L; 0069 006E;;;;N;SQUARED IN;;;; 33CD;SQUARE KK;So;0;L; 004B 004B;;;;N;SQUARED KK;;;; 33CE;SQUARE KM CAPITAL;So;0;L; 004B 004D;;;;N;SQUARED KM CAPITAL;;;; 33CF;SQUARE KT;So;0;L; 006B 0074;;;;N;SQUARED KT;;;; 33D0;SQUARE LM;So;0;L; 006C 006D;;;;N;SQUARED LM;;;; 33D1;SQUARE LN;So;0;L; 006C 006E;;;;N;SQUARED LN;;;; 33D2;SQUARE LOG;So;0;L; 006C 006F 0067;;;;N;SQUARED LOG;;;; 33D3;SQUARE LX;So;0;L; 006C 0078;;;;N;SQUARED LX;;;; 33D4;SQUARE MB SMALL;So;0;L; 006D 0062;;;;N;SQUARED MB SMALL;;;; 33D5;SQUARE MIL;So;0;L; 006D 0069 006C;;;;N;SQUARED MIL;;;; 33D6;SQUARE MOL;So;0;L; 006D 006F 006C;;;;N;SQUARED MOL;;;; 33D7;SQUARE PH;So;0;L; 0050 0048;;;;N;SQUARED PH;;;; 33D8;SQUARE PM;So;0;L; 0070 002E 006D 002E;;;;N;SQUARED PM;;;; 33D9;SQUARE PPM;So;0;L; 0050 0050 004D;;;;N;SQUARED PPM;;;; 33DA;SQUARE PR;So;0;L; 0050 0052;;;;N;SQUARED PR;;;; 33DB;SQUARE SR;So;0;L; 0073 0072;;;;N;SQUARED SR;;;; 33DC;SQUARE SV;So;0;L; 0053 0076;;;;N;SQUARED SV;;;; 33DD;SQUARE WB;So;0;L; 0057 0062;;;;N;SQUARED WB;;;; 33E0;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY ONE;So;0;L; 0031 65E5;;;;N;;;;; 33E1;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWO;So;0;L; 0032 65E5;;;;N;;;;; 33E2;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY THREE;So;0;L; 0033 65E5;;;;N;;;;; 33E3;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY FOUR;So;0;L; 0034 65E5;;;;N;;;;; 33E4;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY FIVE;So;0;L; 0035 65E5;;;;N;;;;; 33E5;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY SIX;So;0;L; 0036 65E5;;;;N;;;;; 33E6;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY SEVEN;So;0;L; 0037 65E5;;;;N;;;;; 33E7;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY EIGHT;So;0;L; 0038 65E5;;;;N;;;;; 33E8;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY NINE;So;0;L; 0039 65E5;;;;N;;;;; 33E9;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TEN;So;0;L; 0031 0030 65E5;;;;N;;;;; 33EA;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY ELEVEN;So;0;L; 0031 0031 65E5;;;;N;;;;; 33EB;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWELVE;So;0;L; 0031 0032 65E5;;;;N;;;;; 33EC;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY THIRTEEN;So;0;L; 0031 0033 65E5;;;;N;;;;; 33ED;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY FOURTEEN;So;0;L; 0031 0034 65E5;;;;N;;;;; 33EE;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY FIFTEEN;So;0;L; 0031 0035 65E5;;;;N;;;;; 33EF;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY SIXTEEN;So;0;L; 0031 0036 65E5;;;;N;;;;; 33F0;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY SEVENTEEN;So;0;L; 0031 0037 65E5;;;;N;;;;; 33F1;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY EIGHTEEN;So;0;L; 0031 0038 65E5;;;;N;;;;; 33F2;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY NINETEEN;So;0;L; 0031 0039 65E5;;;;N;;;;; 33F3;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY;So;0;L; 0032 0030 65E5;;;;N;;;;; 33F4;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-ONE;So;0;L; 0032 0031 65E5;;;;N;;;;; 33F5;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-TWO;So;0;L; 0032 0032 65E5;;;;N;;;;; 33F6;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-THREE;So;0;L; 0032 0033 65E5;;;;N;;;;; 33F7;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-FOUR;So;0;L; 0032 0034 65E5;;;;N;;;;; 33F8;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-FIVE;So;0;L; 0032 0035 65E5;;;;N;;;;; 33F9;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-SIX;So;0;L; 0032 0036 65E5;;;;N;;;;; 33FA;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-SEVEN;So;0;L; 0032 0037 65E5;;;;N;;;;; 33FB;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-EIGHT;So;0;L; 0032 0038 65E5;;;;N;;;;; 33FC;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-NINE;So;0;L; 0032 0039 65E5;;;;N;;;;; 33FD;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY THIRTY;So;0;L; 0033 0030 65E5;;;;N;;;;; 33FE;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY THIRTY-ONE;So;0;L; 0033 0031 65E5;;;;N;;;;; 3400;;Lo;0;L;;;;;N;;;;; 4DB5;;Lo;0;L;;;;;N;;;;; 4E00;;Lo;0;L;;;;;N;;;;; 9FA5;;Lo;0;L;;;;;N;;;;; A000;YI SYLLABLE IT;Lo;0;L;;;;;N;;;;; A001;YI SYLLABLE IX;Lo;0;L;;;;;N;;;;; A002;YI SYLLABLE I;Lo;0;L;;;;;N;;;;; A003;YI SYLLABLE IP;Lo;0;L;;;;;N;;;;; A004;YI SYLLABLE IET;Lo;0;L;;;;;N;;;;; A005;YI SYLLABLE IEX;Lo;0;L;;;;;N;;;;; A006;YI SYLLABLE IE;Lo;0;L;;;;;N;;;;; A007;YI SYLLABLE IEP;Lo;0;L;;;;;N;;;;; A008;YI SYLLABLE AT;Lo;0;L;;;;;N;;;;; A009;YI SYLLABLE AX;Lo;0;L;;;;;N;;;;; A00A;YI SYLLABLE A;Lo;0;L;;;;;N;;;;; A00B;YI SYLLABLE AP;Lo;0;L;;;;;N;;;;; A00C;YI SYLLABLE UOX;Lo;0;L;;;;;N;;;;; A00D;YI SYLLABLE UO;Lo;0;L;;;;;N;;;;; A00E;YI SYLLABLE UOP;Lo;0;L;;;;;N;;;;; A00F;YI SYLLABLE OT;Lo;0;L;;;;;N;;;;; A010;YI SYLLABLE OX;Lo;0;L;;;;;N;;;;; A011;YI SYLLABLE O;Lo;0;L;;;;;N;;;;; A012;YI SYLLABLE OP;Lo;0;L;;;;;N;;;;; A013;YI SYLLABLE EX;Lo;0;L;;;;;N;;;;; A014;YI SYLLABLE E;Lo;0;L;;;;;N;;;;; A015;YI SYLLABLE WU;Lo;0;L;;;;;N;;;;; A016;YI SYLLABLE BIT;Lo;0;L;;;;;N;;;;; A017;YI SYLLABLE BIX;Lo;0;L;;;;;N;;;;; A018;YI SYLLABLE BI;Lo;0;L;;;;;N;;;;; A019;YI SYLLABLE BIP;Lo;0;L;;;;;N;;;;; A01A;YI SYLLABLE BIET;Lo;0;L;;;;;N;;;;; A01B;YI SYLLABLE BIEX;Lo;0;L;;;;;N;;;;; A01C;YI SYLLABLE BIE;Lo;0;L;;;;;N;;;;; A01D;YI SYLLABLE BIEP;Lo;0;L;;;;;N;;;;; A01E;YI SYLLABLE BAT;Lo;0;L;;;;;N;;;;; A01F;YI SYLLABLE BAX;Lo;0;L;;;;;N;;;;; A020;YI SYLLABLE BA;Lo;0;L;;;;;N;;;;; A021;YI SYLLABLE BAP;Lo;0;L;;;;;N;;;;; A022;YI SYLLABLE BUOX;Lo;0;L;;;;;N;;;;; A023;YI SYLLABLE BUO;Lo;0;L;;;;;N;;;;; A024;YI SYLLABLE BUOP;Lo;0;L;;;;;N;;;;; A025;YI SYLLABLE BOT;Lo;0;L;;;;;N;;;;; A026;YI SYLLABLE BOX;Lo;0;L;;;;;N;;;;; A027;YI SYLLABLE BO;Lo;0;L;;;;;N;;;;; A028;YI SYLLABLE BOP;Lo;0;L;;;;;N;;;;; A029;YI SYLLABLE BEX;Lo;0;L;;;;;N;;;;; A02A;YI SYLLABLE BE;Lo;0;L;;;;;N;;;;; A02B;YI SYLLABLE BEP;Lo;0;L;;;;;N;;;;; A02C;YI SYLLABLE BUT;Lo;0;L;;;;;N;;;;; A02D;YI SYLLABLE BUX;Lo;0;L;;;;;N;;;;; A02E;YI SYLLABLE BU;Lo;0;L;;;;;N;;;;; A02F;YI SYLLABLE BUP;Lo;0;L;;;;;N;;;;; A030;YI SYLLABLE BURX;Lo;0;L;;;;;N;;;;; A031;YI SYLLABLE BUR;Lo;0;L;;;;;N;;;;; A032;YI SYLLABLE BYT;Lo;0;L;;;;;N;;;;; A033;YI SYLLABLE BYX;Lo;0;L;;;;;N;;;;; A034;YI SYLLABLE BY;Lo;0;L;;;;;N;;;;; A035;YI SYLLABLE BYP;Lo;0;L;;;;;N;;;;; A036;YI SYLLABLE BYRX;Lo;0;L;;;;;N;;;;; A037;YI SYLLABLE BYR;Lo;0;L;;;;;N;;;;; A038;YI SYLLABLE PIT;Lo;0;L;;;;;N;;;;; A039;YI SYLLABLE PIX;Lo;0;L;;;;;N;;;;; A03A;YI SYLLABLE PI;Lo;0;L;;;;;N;;;;; A03B;YI SYLLABLE PIP;Lo;0;L;;;;;N;;;;; A03C;YI SYLLABLE PIEX;Lo;0;L;;;;;N;;;;; A03D;YI SYLLABLE PIE;Lo;0;L;;;;;N;;;;; A03E;YI SYLLABLE PIEP;Lo;0;L;;;;;N;;;;; A03F;YI SYLLABLE PAT;Lo;0;L;;;;;N;;;;; A040;YI SYLLABLE PAX;Lo;0;L;;;;;N;;;;; A041;YI SYLLABLE PA;Lo;0;L;;;;;N;;;;; A042;YI SYLLABLE PAP;Lo;0;L;;;;;N;;;;; A043;YI SYLLABLE PUOX;Lo;0;L;;;;;N;;;;; A044;YI SYLLABLE PUO;Lo;0;L;;;;;N;;;;; A045;YI SYLLABLE PUOP;Lo;0;L;;;;;N;;;;; A046;YI SYLLABLE POT;Lo;0;L;;;;;N;;;;; A047;YI SYLLABLE POX;Lo;0;L;;;;;N;;;;; A048;YI SYLLABLE PO;Lo;0;L;;;;;N;;;;; A049;YI SYLLABLE POP;Lo;0;L;;;;;N;;;;; A04A;YI SYLLABLE PUT;Lo;0;L;;;;;N;;;;; A04B;YI SYLLABLE PUX;Lo;0;L;;;;;N;;;;; A04C;YI SYLLABLE PU;Lo;0;L;;;;;N;;;;; A04D;YI SYLLABLE PUP;Lo;0;L;;;;;N;;;;; A04E;YI SYLLABLE PURX;Lo;0;L;;;;;N;;;;; A04F;YI SYLLABLE PUR;Lo;0;L;;;;;N;;;;; A050;YI SYLLABLE PYT;Lo;0;L;;;;;N;;;;; A051;YI SYLLABLE PYX;Lo;0;L;;;;;N;;;;; A052;YI SYLLABLE PY;Lo;0;L;;;;;N;;;;; A053;YI SYLLABLE PYP;Lo;0;L;;;;;N;;;;; A054;YI SYLLABLE PYRX;Lo;0;L;;;;;N;;;;; A055;YI SYLLABLE PYR;Lo;0;L;;;;;N;;;;; A056;YI SYLLABLE BBIT;Lo;0;L;;;;;N;;;;; A057;YI SYLLABLE BBIX;Lo;0;L;;;;;N;;;;; A058;YI SYLLABLE BBI;Lo;0;L;;;;;N;;;;; A059;YI SYLLABLE BBIP;Lo;0;L;;;;;N;;;;; A05A;YI SYLLABLE BBIET;Lo;0;L;;;;;N;;;;; A05B;YI SYLLABLE BBIEX;Lo;0;L;;;;;N;;;;; A05C;YI SYLLABLE BBIE;Lo;0;L;;;;;N;;;;; A05D;YI SYLLABLE BBIEP;Lo;0;L;;;;;N;;;;; A05E;YI SYLLABLE BBAT;Lo;0;L;;;;;N;;;;; A05F;YI SYLLABLE BBAX;Lo;0;L;;;;;N;;;;; A060;YI SYLLABLE BBA;Lo;0;L;;;;;N;;;;; A061;YI SYLLABLE BBAP;Lo;0;L;;;;;N;;;;; A062;YI SYLLABLE BBUOX;Lo;0;L;;;;;N;;;;; A063;YI SYLLABLE BBUO;Lo;0;L;;;;;N;;;;; A064;YI SYLLABLE BBUOP;Lo;0;L;;;;;N;;;;; A065;YI SYLLABLE BBOT;Lo;0;L;;;;;N;;;;; A066;YI SYLLABLE BBOX;Lo;0;L;;;;;N;;;;; A067;YI SYLLABLE BBO;Lo;0;L;;;;;N;;;;; A068;YI SYLLABLE BBOP;Lo;0;L;;;;;N;;;;; A069;YI SYLLABLE BBEX;Lo;0;L;;;;;N;;;;; A06A;YI SYLLABLE BBE;Lo;0;L;;;;;N;;;;; A06B;YI SYLLABLE BBEP;Lo;0;L;;;;;N;;;;; A06C;YI SYLLABLE BBUT;Lo;0;L;;;;;N;;;;; A06D;YI SYLLABLE BBUX;Lo;0;L;;;;;N;;;;; A06E;YI SYLLABLE BBU;Lo;0;L;;;;;N;;;;; A06F;YI SYLLABLE BBUP;Lo;0;L;;;;;N;;;;; A070;YI SYLLABLE BBURX;Lo;0;L;;;;;N;;;;; A071;YI SYLLABLE BBUR;Lo;0;L;;;;;N;;;;; A072;YI SYLLABLE BBYT;Lo;0;L;;;;;N;;;;; A073;YI SYLLABLE BBYX;Lo;0;L;;;;;N;;;;; A074;YI SYLLABLE BBY;Lo;0;L;;;;;N;;;;; A075;YI SYLLABLE BBYP;Lo;0;L;;;;;N;;;;; A076;YI SYLLABLE NBIT;Lo;0;L;;;;;N;;;;; A077;YI SYLLABLE NBIX;Lo;0;L;;;;;N;;;;; A078;YI SYLLABLE NBI;Lo;0;L;;;;;N;;;;; A079;YI SYLLABLE NBIP;Lo;0;L;;;;;N;;;;; A07A;YI SYLLABLE NBIEX;Lo;0;L;;;;;N;;;;; A07B;YI SYLLABLE NBIE;Lo;0;L;;;;;N;;;;; A07C;YI SYLLABLE NBIEP;Lo;0;L;;;;;N;;;;; A07D;YI SYLLABLE NBAT;Lo;0;L;;;;;N;;;;; A07E;YI SYLLABLE NBAX;Lo;0;L;;;;;N;;;;; A07F;YI SYLLABLE NBA;Lo;0;L;;;;;N;;;;; A080;YI SYLLABLE NBAP;Lo;0;L;;;;;N;;;;; A081;YI SYLLABLE NBOT;Lo;0;L;;;;;N;;;;; A082;YI SYLLABLE NBOX;Lo;0;L;;;;;N;;;;; A083;YI SYLLABLE NBO;Lo;0;L;;;;;N;;;;; A084;YI SYLLABLE NBOP;Lo;0;L;;;;;N;;;;; A085;YI SYLLABLE NBUT;Lo;0;L;;;;;N;;;;; A086;YI SYLLABLE NBUX;Lo;0;L;;;;;N;;;;; A087;YI SYLLABLE NBU;Lo;0;L;;;;;N;;;;; A088;YI SYLLABLE NBUP;Lo;0;L;;;;;N;;;;; A089;YI SYLLABLE NBURX;Lo;0;L;;;;;N;;;;; A08A;YI SYLLABLE NBUR;Lo;0;L;;;;;N;;;;; A08B;YI SYLLABLE NBYT;Lo;0;L;;;;;N;;;;; A08C;YI SYLLABLE NBYX;Lo;0;L;;;;;N;;;;; A08D;YI SYLLABLE NBY;Lo;0;L;;;;;N;;;;; A08E;YI SYLLABLE NBYP;Lo;0;L;;;;;N;;;;; A08F;YI SYLLABLE NBYRX;Lo;0;L;;;;;N;;;;; A090;YI SYLLABLE NBYR;Lo;0;L;;;;;N;;;;; A091;YI SYLLABLE HMIT;Lo;0;L;;;;;N;;;;; A092;YI SYLLABLE HMIX;Lo;0;L;;;;;N;;;;; A093;YI SYLLABLE HMI;Lo;0;L;;;;;N;;;;; A094;YI SYLLABLE HMIP;Lo;0;L;;;;;N;;;;; A095;YI SYLLABLE HMIEX;Lo;0;L;;;;;N;;;;; A096;YI SYLLABLE HMIE;Lo;0;L;;;;;N;;;;; A097;YI SYLLABLE HMIEP;Lo;0;L;;;;;N;;;;; A098;YI SYLLABLE HMAT;Lo;0;L;;;;;N;;;;; A099;YI SYLLABLE HMAX;Lo;0;L;;;;;N;;;;; A09A;YI SYLLABLE HMA;Lo;0;L;;;;;N;;;;; A09B;YI SYLLABLE HMAP;Lo;0;L;;;;;N;;;;; A09C;YI SYLLABLE HMUOX;Lo;0;L;;;;;N;;;;; A09D;YI SYLLABLE HMUO;Lo;0;L;;;;;N;;;;; A09E;YI SYLLABLE HMUOP;Lo;0;L;;;;;N;;;;; A09F;YI SYLLABLE HMOT;Lo;0;L;;;;;N;;;;; A0A0;YI SYLLABLE HMOX;Lo;0;L;;;;;N;;;;; A0A1;YI SYLLABLE HMO;Lo;0;L;;;;;N;;;;; A0A2;YI SYLLABLE HMOP;Lo;0;L;;;;;N;;;;; A0A3;YI SYLLABLE HMUT;Lo;0;L;;;;;N;;;;; A0A4;YI SYLLABLE HMUX;Lo;0;L;;;;;N;;;;; A0A5;YI SYLLABLE HMU;Lo;0;L;;;;;N;;;;; A0A6;YI SYLLABLE HMUP;Lo;0;L;;;;;N;;;;; A0A7;YI SYLLABLE HMURX;Lo;0;L;;;;;N;;;;; A0A8;YI SYLLABLE HMUR;Lo;0;L;;;;;N;;;;; A0A9;YI SYLLABLE HMYX;Lo;0;L;;;;;N;;;;; A0AA;YI SYLLABLE HMY;Lo;0;L;;;;;N;;;;; A0AB;YI SYLLABLE HMYP;Lo;0;L;;;;;N;;;;; A0AC;YI SYLLABLE HMYRX;Lo;0;L;;;;;N;;;;; A0AD;YI SYLLABLE HMYR;Lo;0;L;;;;;N;;;;; A0AE;YI SYLLABLE MIT;Lo;0;L;;;;;N;;;;; A0AF;YI SYLLABLE MIX;Lo;0;L;;;;;N;;;;; A0B0;YI SYLLABLE MI;Lo;0;L;;;;;N;;;;; A0B1;YI SYLLABLE MIP;Lo;0;L;;;;;N;;;;; A0B2;YI SYLLABLE MIEX;Lo;0;L;;;;;N;;;;; A0B3;YI SYLLABLE MIE;Lo;0;L;;;;;N;;;;; A0B4;YI SYLLABLE MIEP;Lo;0;L;;;;;N;;;;; A0B5;YI SYLLABLE MAT;Lo;0;L;;;;;N;;;;; A0B6;YI SYLLABLE MAX;Lo;0;L;;;;;N;;;;; A0B7;YI SYLLABLE MA;Lo;0;L;;;;;N;;;;; A0B8;YI SYLLABLE MAP;Lo;0;L;;;;;N;;;;; A0B9;YI SYLLABLE MUOT;Lo;0;L;;;;;N;;;;; A0BA;YI SYLLABLE MUOX;Lo;0;L;;;;;N;;;;; A0BB;YI SYLLABLE MUO;Lo;0;L;;;;;N;;;;; A0BC;YI SYLLABLE MUOP;Lo;0;L;;;;;N;;;;; A0BD;YI SYLLABLE MOT;Lo;0;L;;;;;N;;;;; A0BE;YI SYLLABLE MOX;Lo;0;L;;;;;N;;;;; A0BF;YI SYLLABLE MO;Lo;0;L;;;;;N;;;;; A0C0;YI SYLLABLE MOP;Lo;0;L;;;;;N;;;;; A0C1;YI SYLLABLE MEX;Lo;0;L;;;;;N;;;;; A0C2;YI SYLLABLE ME;Lo;0;L;;;;;N;;;;; A0C3;YI SYLLABLE MUT;Lo;0;L;;;;;N;;;;; A0C4;YI SYLLABLE MUX;Lo;0;L;;;;;N;;;;; A0C5;YI SYLLABLE MU;Lo;0;L;;;;;N;;;;; A0C6;YI SYLLABLE MUP;Lo;0;L;;;;;N;;;;; A0C7;YI SYLLABLE MURX;Lo;0;L;;;;;N;;;;; A0C8;YI SYLLABLE MUR;Lo;0;L;;;;;N;;;;; A0C9;YI SYLLABLE MYT;Lo;0;L;;;;;N;;;;; A0CA;YI SYLLABLE MYX;Lo;0;L;;;;;N;;;;; A0CB;YI SYLLABLE MY;Lo;0;L;;;;;N;;;;; A0CC;YI SYLLABLE MYP;Lo;0;L;;;;;N;;;;; A0CD;YI SYLLABLE FIT;Lo;0;L;;;;;N;;;;; A0CE;YI SYLLABLE FIX;Lo;0;L;;;;;N;;;;; A0CF;YI SYLLABLE FI;Lo;0;L;;;;;N;;;;; A0D0;YI SYLLABLE FIP;Lo;0;L;;;;;N;;;;; A0D1;YI SYLLABLE FAT;Lo;0;L;;;;;N;;;;; A0D2;YI SYLLABLE FAX;Lo;0;L;;;;;N;;;;; A0D3;YI SYLLABLE FA;Lo;0;L;;;;;N;;;;; A0D4;YI SYLLABLE FAP;Lo;0;L;;;;;N;;;;; A0D5;YI SYLLABLE FOX;Lo;0;L;;;;;N;;;;; A0D6;YI SYLLABLE FO;Lo;0;L;;;;;N;;;;; A0D7;YI SYLLABLE FOP;Lo;0;L;;;;;N;;;;; A0D8;YI SYLLABLE FUT;Lo;0;L;;;;;N;;;;; A0D9;YI SYLLABLE FUX;Lo;0;L;;;;;N;;;;; A0DA;YI SYLLABLE FU;Lo;0;L;;;;;N;;;;; A0DB;YI SYLLABLE FUP;Lo;0;L;;;;;N;;;;; A0DC;YI SYLLABLE FURX;Lo;0;L;;;;;N;;;;; A0DD;YI SYLLABLE FUR;Lo;0;L;;;;;N;;;;; A0DE;YI SYLLABLE FYT;Lo;0;L;;;;;N;;;;; A0DF;YI SYLLABLE FYX;Lo;0;L;;;;;N;;;;; A0E0;YI SYLLABLE FY;Lo;0;L;;;;;N;;;;; A0E1;YI SYLLABLE FYP;Lo;0;L;;;;;N;;;;; A0E2;YI SYLLABLE VIT;Lo;0;L;;;;;N;;;;; A0E3;YI SYLLABLE VIX;Lo;0;L;;;;;N;;;;; A0E4;YI SYLLABLE VI;Lo;0;L;;;;;N;;;;; A0E5;YI SYLLABLE VIP;Lo;0;L;;;;;N;;;;; A0E6;YI SYLLABLE VIET;Lo;0;L;;;;;N;;;;; A0E7;YI SYLLABLE VIEX;Lo;0;L;;;;;N;;;;; A0E8;YI SYLLABLE VIE;Lo;0;L;;;;;N;;;;; A0E9;YI SYLLABLE VIEP;Lo;0;L;;;;;N;;;;; A0EA;YI SYLLABLE VAT;Lo;0;L;;;;;N;;;;; A0EB;YI SYLLABLE VAX;Lo;0;L;;;;;N;;;;; A0EC;YI SYLLABLE VA;Lo;0;L;;;;;N;;;;; A0ED;YI SYLLABLE VAP;Lo;0;L;;;;;N;;;;; A0EE;YI SYLLABLE VOT;Lo;0;L;;;;;N;;;;; A0EF;YI SYLLABLE VOX;Lo;0;L;;;;;N;;;;; A0F0;YI SYLLABLE VO;Lo;0;L;;;;;N;;;;; A0F1;YI SYLLABLE VOP;Lo;0;L;;;;;N;;;;; A0F2;YI SYLLABLE VEX;Lo;0;L;;;;;N;;;;; A0F3;YI SYLLABLE VEP;Lo;0;L;;;;;N;;;;; A0F4;YI SYLLABLE VUT;Lo;0;L;;;;;N;;;;; A0F5;YI SYLLABLE VUX;Lo;0;L;;;;;N;;;;; A0F6;YI SYLLABLE VU;Lo;0;L;;;;;N;;;;; A0F7;YI SYLLABLE VUP;Lo;0;L;;;;;N;;;;; A0F8;YI SYLLABLE VURX;Lo;0;L;;;;;N;;;;; A0F9;YI SYLLABLE VUR;Lo;0;L;;;;;N;;;;; A0FA;YI SYLLABLE VYT;Lo;0;L;;;;;N;;;;; A0FB;YI SYLLABLE VYX;Lo;0;L;;;;;N;;;;; A0FC;YI SYLLABLE VY;Lo;0;L;;;;;N;;;;; A0FD;YI SYLLABLE VYP;Lo;0;L;;;;;N;;;;; A0FE;YI SYLLABLE VYRX;Lo;0;L;;;;;N;;;;; A0FF;YI SYLLABLE VYR;Lo;0;L;;;;;N;;;;; A100;YI SYLLABLE DIT;Lo;0;L;;;;;N;;;;; A101;YI SYLLABLE DIX;Lo;0;L;;;;;N;;;;; A102;YI SYLLABLE DI;Lo;0;L;;;;;N;;;;; A103;YI SYLLABLE DIP;Lo;0;L;;;;;N;;;;; A104;YI SYLLABLE DIEX;Lo;0;L;;;;;N;;;;; A105;YI SYLLABLE DIE;Lo;0;L;;;;;N;;;;; A106;YI SYLLABLE DIEP;Lo;0;L;;;;;N;;;;; A107;YI SYLLABLE DAT;Lo;0;L;;;;;N;;;;; A108;YI SYLLABLE DAX;Lo;0;L;;;;;N;;;;; A109;YI SYLLABLE DA;Lo;0;L;;;;;N;;;;; A10A;YI SYLLABLE DAP;Lo;0;L;;;;;N;;;;; A10B;YI SYLLABLE DUOX;Lo;0;L;;;;;N;;;;; A10C;YI SYLLABLE DUO;Lo;0;L;;;;;N;;;;; A10D;YI SYLLABLE DOT;Lo;0;L;;;;;N;;;;; A10E;YI SYLLABLE DOX;Lo;0;L;;;;;N;;;;; A10F;YI SYLLABLE DO;Lo;0;L;;;;;N;;;;; A110;YI SYLLABLE DOP;Lo;0;L;;;;;N;;;;; A111;YI SYLLABLE DEX;Lo;0;L;;;;;N;;;;; A112;YI SYLLABLE DE;Lo;0;L;;;;;N;;;;; A113;YI SYLLABLE DEP;Lo;0;L;;;;;N;;;;; A114;YI SYLLABLE DUT;Lo;0;L;;;;;N;;;;; A115;YI SYLLABLE DUX;Lo;0;L;;;;;N;;;;; A116;YI SYLLABLE DU;Lo;0;L;;;;;N;;;;; A117;YI SYLLABLE DUP;Lo;0;L;;;;;N;;;;; A118;YI SYLLABLE DURX;Lo;0;L;;;;;N;;;;; A119;YI SYLLABLE DUR;Lo;0;L;;;;;N;;;;; A11A;YI SYLLABLE TIT;Lo;0;L;;;;;N;;;;; A11B;YI SYLLABLE TIX;Lo;0;L;;;;;N;;;;; A11C;YI SYLLABLE TI;Lo;0;L;;;;;N;;;;; A11D;YI SYLLABLE TIP;Lo;0;L;;;;;N;;;;; A11E;YI SYLLABLE TIEX;Lo;0;L;;;;;N;;;;; A11F;YI SYLLABLE TIE;Lo;0;L;;;;;N;;;;; A120;YI SYLLABLE TIEP;Lo;0;L;;;;;N;;;;; A121;YI SYLLABLE TAT;Lo;0;L;;;;;N;;;;; A122;YI SYLLABLE TAX;Lo;0;L;;;;;N;;;;; A123;YI SYLLABLE TA;Lo;0;L;;;;;N;;;;; A124;YI SYLLABLE TAP;Lo;0;L;;;;;N;;;;; A125;YI SYLLABLE TUOT;Lo;0;L;;;;;N;;;;; A126;YI SYLLABLE TUOX;Lo;0;L;;;;;N;;;;; A127;YI SYLLABLE TUO;Lo;0;L;;;;;N;;;;; A128;YI SYLLABLE TUOP;Lo;0;L;;;;;N;;;;; A129;YI SYLLABLE TOT;Lo;0;L;;;;;N;;;;; A12A;YI SYLLABLE TOX;Lo;0;L;;;;;N;;;;; A12B;YI SYLLABLE TO;Lo;0;L;;;;;N;;;;; A12C;YI SYLLABLE TOP;Lo;0;L;;;;;N;;;;; A12D;YI SYLLABLE TEX;Lo;0;L;;;;;N;;;;; A12E;YI SYLLABLE TE;Lo;0;L;;;;;N;;;;; A12F;YI SYLLABLE TEP;Lo;0;L;;;;;N;;;;; A130;YI SYLLABLE TUT;Lo;0;L;;;;;N;;;;; A131;YI SYLLABLE TUX;Lo;0;L;;;;;N;;;;; A132;YI SYLLABLE TU;Lo;0;L;;;;;N;;;;; A133;YI SYLLABLE TUP;Lo;0;L;;;;;N;;;;; A134;YI SYLLABLE TURX;Lo;0;L;;;;;N;;;;; A135;YI SYLLABLE TUR;Lo;0;L;;;;;N;;;;; A136;YI SYLLABLE DDIT;Lo;0;L;;;;;N;;;;; A137;YI SYLLABLE DDIX;Lo;0;L;;;;;N;;;;; A138;YI SYLLABLE DDI;Lo;0;L;;;;;N;;;;; A139;YI SYLLABLE DDIP;Lo;0;L;;;;;N;;;;; A13A;YI SYLLABLE DDIEX;Lo;0;L;;;;;N;;;;; A13B;YI SYLLABLE DDIE;Lo;0;L;;;;;N;;;;; A13C;YI SYLLABLE DDIEP;Lo;0;L;;;;;N;;;;; A13D;YI SYLLABLE DDAT;Lo;0;L;;;;;N;;;;; A13E;YI SYLLABLE DDAX;Lo;0;L;;;;;N;;;;; A13F;YI SYLLABLE DDA;Lo;0;L;;;;;N;;;;; A140;YI SYLLABLE DDAP;Lo;0;L;;;;;N;;;;; A141;YI SYLLABLE DDUOX;Lo;0;L;;;;;N;;;;; A142;YI SYLLABLE DDUO;Lo;0;L;;;;;N;;;;; A143;YI SYLLABLE DDUOP;Lo;0;L;;;;;N;;;;; A144;YI SYLLABLE DDOT;Lo;0;L;;;;;N;;;;; A145;YI SYLLABLE DDOX;Lo;0;L;;;;;N;;;;; A146;YI SYLLABLE DDO;Lo;0;L;;;;;N;;;;; A147;YI SYLLABLE DDOP;Lo;0;L;;;;;N;;;;; A148;YI SYLLABLE DDEX;Lo;0;L;;;;;N;;;;; A149;YI SYLLABLE DDE;Lo;0;L;;;;;N;;;;; A14A;YI SYLLABLE DDEP;Lo;0;L;;;;;N;;;;; A14B;YI SYLLABLE DDUT;Lo;0;L;;;;;N;;;;; A14C;YI SYLLABLE DDUX;Lo;0;L;;;;;N;;;;; A14D;YI SYLLABLE DDU;Lo;0;L;;;;;N;;;;; A14E;YI SYLLABLE DDUP;Lo;0;L;;;;;N;;;;; A14F;YI SYLLABLE DDURX;Lo;0;L;;;;;N;;;;; A150;YI SYLLABLE DDUR;Lo;0;L;;;;;N;;;;; A151;YI SYLLABLE NDIT;Lo;0;L;;;;;N;;;;; A152;YI SYLLABLE NDIX;Lo;0;L;;;;;N;;;;; A153;YI SYLLABLE NDI;Lo;0;L;;;;;N;;;;; A154;YI SYLLABLE NDIP;Lo;0;L;;;;;N;;;;; A155;YI SYLLABLE NDIEX;Lo;0;L;;;;;N;;;;; A156;YI SYLLABLE NDIE;Lo;0;L;;;;;N;;;;; A157;YI SYLLABLE NDAT;Lo;0;L;;;;;N;;;;; A158;YI SYLLABLE NDAX;Lo;0;L;;;;;N;;;;; A159;YI SYLLABLE NDA;Lo;0;L;;;;;N;;;;; A15A;YI SYLLABLE NDAP;Lo;0;L;;;;;N;;;;; A15B;YI SYLLABLE NDOT;Lo;0;L;;;;;N;;;;; A15C;YI SYLLABLE NDOX;Lo;0;L;;;;;N;;;;; A15D;YI SYLLABLE NDO;Lo;0;L;;;;;N;;;;; A15E;YI SYLLABLE NDOP;Lo;0;L;;;;;N;;;;; A15F;YI SYLLABLE NDEX;Lo;0;L;;;;;N;;;;; A160;YI SYLLABLE NDE;Lo;0;L;;;;;N;;;;; A161;YI SYLLABLE NDEP;Lo;0;L;;;;;N;;;;; A162;YI SYLLABLE NDUT;Lo;0;L;;;;;N;;;;; A163;YI SYLLABLE NDUX;Lo;0;L;;;;;N;;;;; A164;YI SYLLABLE NDU;Lo;0;L;;;;;N;;;;; A165;YI SYLLABLE NDUP;Lo;0;L;;;;;N;;;;; A166;YI SYLLABLE NDURX;Lo;0;L;;;;;N;;;;; A167;YI SYLLABLE NDUR;Lo;0;L;;;;;N;;;;; A168;YI SYLLABLE HNIT;Lo;0;L;;;;;N;;;;; A169;YI SYLLABLE HNIX;Lo;0;L;;;;;N;;;;; A16A;YI SYLLABLE HNI;Lo;0;L;;;;;N;;;;; A16B;YI SYLLABLE HNIP;Lo;0;L;;;;;N;;;;; A16C;YI SYLLABLE HNIET;Lo;0;L;;;;;N;;;;; A16D;YI SYLLABLE HNIEX;Lo;0;L;;;;;N;;;;; A16E;YI SYLLABLE HNIE;Lo;0;L;;;;;N;;;;; A16F;YI SYLLABLE HNIEP;Lo;0;L;;;;;N;;;;; A170;YI SYLLABLE HNAT;Lo;0;L;;;;;N;;;;; A171;YI SYLLABLE HNAX;Lo;0;L;;;;;N;;;;; A172;YI SYLLABLE HNA;Lo;0;L;;;;;N;;;;; A173;YI SYLLABLE HNAP;Lo;0;L;;;;;N;;;;; A174;YI SYLLABLE HNUOX;Lo;0;L;;;;;N;;;;; A175;YI SYLLABLE HNUO;Lo;0;L;;;;;N;;;;; A176;YI SYLLABLE HNOT;Lo;0;L;;;;;N;;;;; A177;YI SYLLABLE HNOX;Lo;0;L;;;;;N;;;;; A178;YI SYLLABLE HNOP;Lo;0;L;;;;;N;;;;; A179;YI SYLLABLE HNEX;Lo;0;L;;;;;N;;;;; A17A;YI SYLLABLE HNE;Lo;0;L;;;;;N;;;;; A17B;YI SYLLABLE HNEP;Lo;0;L;;;;;N;;;;; A17C;YI SYLLABLE HNUT;Lo;0;L;;;;;N;;;;; A17D;YI SYLLABLE NIT;Lo;0;L;;;;;N;;;;; A17E;YI SYLLABLE NIX;Lo;0;L;;;;;N;;;;; A17F;YI SYLLABLE NI;Lo;0;L;;;;;N;;;;; A180;YI SYLLABLE NIP;Lo;0;L;;;;;N;;;;; A181;YI SYLLABLE NIEX;Lo;0;L;;;;;N;;;;; A182;YI SYLLABLE NIE;Lo;0;L;;;;;N;;;;; A183;YI SYLLABLE NIEP;Lo;0;L;;;;;N;;;;; A184;YI SYLLABLE NAX;Lo;0;L;;;;;N;;;;; A185;YI SYLLABLE NA;Lo;0;L;;;;;N;;;;; A186;YI SYLLABLE NAP;Lo;0;L;;;;;N;;;;; A187;YI SYLLABLE NUOX;Lo;0;L;;;;;N;;;;; A188;YI SYLLABLE NUO;Lo;0;L;;;;;N;;;;; A189;YI SYLLABLE NUOP;Lo;0;L;;;;;N;;;;; A18A;YI SYLLABLE NOT;Lo;0;L;;;;;N;;;;; A18B;YI SYLLABLE NOX;Lo;0;L;;;;;N;;;;; A18C;YI SYLLABLE NO;Lo;0;L;;;;;N;;;;; A18D;YI SYLLABLE NOP;Lo;0;L;;;;;N;;;;; A18E;YI SYLLABLE NEX;Lo;0;L;;;;;N;;;;; A18F;YI SYLLABLE NE;Lo;0;L;;;;;N;;;;; A190;YI SYLLABLE NEP;Lo;0;L;;;;;N;;;;; A191;YI SYLLABLE NUT;Lo;0;L;;;;;N;;;;; A192;YI SYLLABLE NUX;Lo;0;L;;;;;N;;;;; A193;YI SYLLABLE NU;Lo;0;L;;;;;N;;;;; A194;YI SYLLABLE NUP;Lo;0;L;;;;;N;;;;; A195;YI SYLLABLE NURX;Lo;0;L;;;;;N;;;;; A196;YI SYLLABLE NUR;Lo;0;L;;;;;N;;;;; A197;YI SYLLABLE HLIT;Lo;0;L;;;;;N;;;;; A198;YI SYLLABLE HLIX;Lo;0;L;;;;;N;;;;; A199;YI SYLLABLE HLI;Lo;0;L;;;;;N;;;;; A19A;YI SYLLABLE HLIP;Lo;0;L;;;;;N;;;;; A19B;YI SYLLABLE HLIEX;Lo;0;L;;;;;N;;;;; A19C;YI SYLLABLE HLIE;Lo;0;L;;;;;N;;;;; A19D;YI SYLLABLE HLIEP;Lo;0;L;;;;;N;;;;; A19E;YI SYLLABLE HLAT;Lo;0;L;;;;;N;;;;; A19F;YI SYLLABLE HLAX;Lo;0;L;;;;;N;;;;; A1A0;YI SYLLABLE HLA;Lo;0;L;;;;;N;;;;; A1A1;YI SYLLABLE HLAP;Lo;0;L;;;;;N;;;;; A1A2;YI SYLLABLE HLUOX;Lo;0;L;;;;;N;;;;; A1A3;YI SYLLABLE HLUO;Lo;0;L;;;;;N;;;;; A1A4;YI SYLLABLE HLUOP;Lo;0;L;;;;;N;;;;; A1A5;YI SYLLABLE HLOX;Lo;0;L;;;;;N;;;;; A1A6;YI SYLLABLE HLO;Lo;0;L;;;;;N;;;;; A1A7;YI SYLLABLE HLOP;Lo;0;L;;;;;N;;;;; A1A8;YI SYLLABLE HLEX;Lo;0;L;;;;;N;;;;; A1A9;YI SYLLABLE HLE;Lo;0;L;;;;;N;;;;; A1AA;YI SYLLABLE HLEP;Lo;0;L;;;;;N;;;;; A1AB;YI SYLLABLE HLUT;Lo;0;L;;;;;N;;;;; A1AC;YI SYLLABLE HLUX;Lo;0;L;;;;;N;;;;; A1AD;YI SYLLABLE HLU;Lo;0;L;;;;;N;;;;; A1AE;YI SYLLABLE HLUP;Lo;0;L;;;;;N;;;;; A1AF;YI SYLLABLE HLURX;Lo;0;L;;;;;N;;;;; A1B0;YI SYLLABLE HLUR;Lo;0;L;;;;;N;;;;; A1B1;YI SYLLABLE HLYT;Lo;0;L;;;;;N;;;;; A1B2;YI SYLLABLE HLYX;Lo;0;L;;;;;N;;;;; A1B3;YI SYLLABLE HLY;Lo;0;L;;;;;N;;;;; A1B4;YI SYLLABLE HLYP;Lo;0;L;;;;;N;;;;; A1B5;YI SYLLABLE HLYRX;Lo;0;L;;;;;N;;;;; A1B6;YI SYLLABLE HLYR;Lo;0;L;;;;;N;;;;; A1B7;YI SYLLABLE LIT;Lo;0;L;;;;;N;;;;; A1B8;YI SYLLABLE LIX;Lo;0;L;;;;;N;;;;; A1B9;YI SYLLABLE LI;Lo;0;L;;;;;N;;;;; A1BA;YI SYLLABLE LIP;Lo;0;L;;;;;N;;;;; A1BB;YI SYLLABLE LIET;Lo;0;L;;;;;N;;;;; A1BC;YI SYLLABLE LIEX;Lo;0;L;;;;;N;;;;; A1BD;YI SYLLABLE LIE;Lo;0;L;;;;;N;;;;; A1BE;YI SYLLABLE LIEP;Lo;0;L;;;;;N;;;;; A1BF;YI SYLLABLE LAT;Lo;0;L;;;;;N;;;;; A1C0;YI SYLLABLE LAX;Lo;0;L;;;;;N;;;;; A1C1;YI SYLLABLE LA;Lo;0;L;;;;;N;;;;; A1C2;YI SYLLABLE LAP;Lo;0;L;;;;;N;;;;; A1C3;YI SYLLABLE LUOT;Lo;0;L;;;;;N;;;;; A1C4;YI SYLLABLE LUOX;Lo;0;L;;;;;N;;;;; A1C5;YI SYLLABLE LUO;Lo;0;L;;;;;N;;;;; A1C6;YI SYLLABLE LUOP;Lo;0;L;;;;;N;;;;; A1C7;YI SYLLABLE LOT;Lo;0;L;;;;;N;;;;; A1C8;YI SYLLABLE LOX;Lo;0;L;;;;;N;;;;; A1C9;YI SYLLABLE LO;Lo;0;L;;;;;N;;;;; A1CA;YI SYLLABLE LOP;Lo;0;L;;;;;N;;;;; A1CB;YI SYLLABLE LEX;Lo;0;L;;;;;N;;;;; A1CC;YI SYLLABLE LE;Lo;0;L;;;;;N;;;;; A1CD;YI SYLLABLE LEP;Lo;0;L;;;;;N;;;;; A1CE;YI SYLLABLE LUT;Lo;0;L;;;;;N;;;;; A1CF;YI SYLLABLE LUX;Lo;0;L;;;;;N;;;;; A1D0;YI SYLLABLE LU;Lo;0;L;;;;;N;;;;; A1D1;YI SYLLABLE LUP;Lo;0;L;;;;;N;;;;; A1D2;YI SYLLABLE LURX;Lo;0;L;;;;;N;;;;; A1D3;YI SYLLABLE LUR;Lo;0;L;;;;;N;;;;; A1D4;YI SYLLABLE LYT;Lo;0;L;;;;;N;;;;; A1D5;YI SYLLABLE LYX;Lo;0;L;;;;;N;;;;; A1D6;YI SYLLABLE LY;Lo;0;L;;;;;N;;;;; A1D7;YI SYLLABLE LYP;Lo;0;L;;;;;N;;;;; A1D8;YI SYLLABLE LYRX;Lo;0;L;;;;;N;;;;; A1D9;YI SYLLABLE LYR;Lo;0;L;;;;;N;;;;; A1DA;YI SYLLABLE GIT;Lo;0;L;;;;;N;;;;; A1DB;YI SYLLABLE GIX;Lo;0;L;;;;;N;;;;; A1DC;YI SYLLABLE GI;Lo;0;L;;;;;N;;;;; A1DD;YI SYLLABLE GIP;Lo;0;L;;;;;N;;;;; A1DE;YI SYLLABLE GIET;Lo;0;L;;;;;N;;;;; A1DF;YI SYLLABLE GIEX;Lo;0;L;;;;;N;;;;; A1E0;YI SYLLABLE GIE;Lo;0;L;;;;;N;;;;; A1E1;YI SYLLABLE GIEP;Lo;0;L;;;;;N;;;;; A1E2;YI SYLLABLE GAT;Lo;0;L;;;;;N;;;;; A1E3;YI SYLLABLE GAX;Lo;0;L;;;;;N;;;;; A1E4;YI SYLLABLE GA;Lo;0;L;;;;;N;;;;; A1E5;YI SYLLABLE GAP;Lo;0;L;;;;;N;;;;; A1E6;YI SYLLABLE GUOT;Lo;0;L;;;;;N;;;;; A1E7;YI SYLLABLE GUOX;Lo;0;L;;;;;N;;;;; A1E8;YI SYLLABLE GUO;Lo;0;L;;;;;N;;;;; A1E9;YI SYLLABLE GUOP;Lo;0;L;;;;;N;;;;; A1EA;YI SYLLABLE GOT;Lo;0;L;;;;;N;;;;; A1EB;YI SYLLABLE GOX;Lo;0;L;;;;;N;;;;; A1EC;YI SYLLABLE GO;Lo;0;L;;;;;N;;;;; A1ED;YI SYLLABLE GOP;Lo;0;L;;;;;N;;;;; A1EE;YI SYLLABLE GET;Lo;0;L;;;;;N;;;;; A1EF;YI SYLLABLE GEX;Lo;0;L;;;;;N;;;;; A1F0;YI SYLLABLE GE;Lo;0;L;;;;;N;;;;; A1F1;YI SYLLABLE GEP;Lo;0;L;;;;;N;;;;; A1F2;YI SYLLABLE GUT;Lo;0;L;;;;;N;;;;; A1F3;YI SYLLABLE GUX;Lo;0;L;;;;;N;;;;; A1F4;YI SYLLABLE GU;Lo;0;L;;;;;N;;;;; A1F5;YI SYLLABLE GUP;Lo;0;L;;;;;N;;;;; A1F6;YI SYLLABLE GURX;Lo;0;L;;;;;N;;;;; A1F7;YI SYLLABLE GUR;Lo;0;L;;;;;N;;;;; A1F8;YI SYLLABLE KIT;Lo;0;L;;;;;N;;;;; A1F9;YI SYLLABLE KIX;Lo;0;L;;;;;N;;;;; A1FA;YI SYLLABLE KI;Lo;0;L;;;;;N;;;;; A1FB;YI SYLLABLE KIP;Lo;0;L;;;;;N;;;;; A1FC;YI SYLLABLE KIEX;Lo;0;L;;;;;N;;;;; A1FD;YI SYLLABLE KIE;Lo;0;L;;;;;N;;;;; A1FE;YI SYLLABLE KIEP;Lo;0;L;;;;;N;;;;; A1FF;YI SYLLABLE KAT;Lo;0;L;;;;;N;;;;; A200;YI SYLLABLE KAX;Lo;0;L;;;;;N;;;;; A201;YI SYLLABLE KA;Lo;0;L;;;;;N;;;;; A202;YI SYLLABLE KAP;Lo;0;L;;;;;N;;;;; A203;YI SYLLABLE KUOX;Lo;0;L;;;;;N;;;;; A204;YI SYLLABLE KUO;Lo;0;L;;;;;N;;;;; A205;YI SYLLABLE KUOP;Lo;0;L;;;;;N;;;;; A206;YI SYLLABLE KOT;Lo;0;L;;;;;N;;;;; A207;YI SYLLABLE KOX;Lo;0;L;;;;;N;;;;; A208;YI SYLLABLE KO;Lo;0;L;;;;;N;;;;; A209;YI SYLLABLE KOP;Lo;0;L;;;;;N;;;;; A20A;YI SYLLABLE KET;Lo;0;L;;;;;N;;;;; A20B;YI SYLLABLE KEX;Lo;0;L;;;;;N;;;;; A20C;YI SYLLABLE KE;Lo;0;L;;;;;N;;;;; A20D;YI SYLLABLE KEP;Lo;0;L;;;;;N;;;;; A20E;YI SYLLABLE KUT;Lo;0;L;;;;;N;;;;; A20F;YI SYLLABLE KUX;Lo;0;L;;;;;N;;;;; A210;YI SYLLABLE KU;Lo;0;L;;;;;N;;;;; A211;YI SYLLABLE KUP;Lo;0;L;;;;;N;;;;; A212;YI SYLLABLE KURX;Lo;0;L;;;;;N;;;;; A213;YI SYLLABLE KUR;Lo;0;L;;;;;N;;;;; A214;YI SYLLABLE GGIT;Lo;0;L;;;;;N;;;;; A215;YI SYLLABLE GGIX;Lo;0;L;;;;;N;;;;; A216;YI SYLLABLE GGI;Lo;0;L;;;;;N;;;;; A217;YI SYLLABLE GGIEX;Lo;0;L;;;;;N;;;;; A218;YI SYLLABLE GGIE;Lo;0;L;;;;;N;;;;; A219;YI SYLLABLE GGIEP;Lo;0;L;;;;;N;;;;; A21A;YI SYLLABLE GGAT;Lo;0;L;;;;;N;;;;; A21B;YI SYLLABLE GGAX;Lo;0;L;;;;;N;;;;; A21C;YI SYLLABLE GGA;Lo;0;L;;;;;N;;;;; A21D;YI SYLLABLE GGAP;Lo;0;L;;;;;N;;;;; A21E;YI SYLLABLE GGUOT;Lo;0;L;;;;;N;;;;; A21F;YI SYLLABLE GGUOX;Lo;0;L;;;;;N;;;;; A220;YI SYLLABLE GGUO;Lo;0;L;;;;;N;;;;; A221;YI SYLLABLE GGUOP;Lo;0;L;;;;;N;;;;; A222;YI SYLLABLE GGOT;Lo;0;L;;;;;N;;;;; A223;YI SYLLABLE GGOX;Lo;0;L;;;;;N;;;;; A224;YI SYLLABLE GGO;Lo;0;L;;;;;N;;;;; A225;YI SYLLABLE GGOP;Lo;0;L;;;;;N;;;;; A226;YI SYLLABLE GGET;Lo;0;L;;;;;N;;;;; A227;YI SYLLABLE GGEX;Lo;0;L;;;;;N;;;;; A228;YI SYLLABLE GGE;Lo;0;L;;;;;N;;;;; A229;YI SYLLABLE GGEP;Lo;0;L;;;;;N;;;;; A22A;YI SYLLABLE GGUT;Lo;0;L;;;;;N;;;;; A22B;YI SYLLABLE GGUX;Lo;0;L;;;;;N;;;;; A22C;YI SYLLABLE GGU;Lo;0;L;;;;;N;;;;; A22D;YI SYLLABLE GGUP;Lo;0;L;;;;;N;;;;; A22E;YI SYLLABLE GGURX;Lo;0;L;;;;;N;;;;; A22F;YI SYLLABLE GGUR;Lo;0;L;;;;;N;;;;; A230;YI SYLLABLE MGIEX;Lo;0;L;;;;;N;;;;; A231;YI SYLLABLE MGIE;Lo;0;L;;;;;N;;;;; A232;YI SYLLABLE MGAT;Lo;0;L;;;;;N;;;;; A233;YI SYLLABLE MGAX;Lo;0;L;;;;;N;;;;; A234;YI SYLLABLE MGA;Lo;0;L;;;;;N;;;;; A235;YI SYLLABLE MGAP;Lo;0;L;;;;;N;;;;; A236;YI SYLLABLE MGUOX;Lo;0;L;;;;;N;;;;; A237;YI SYLLABLE MGUO;Lo;0;L;;;;;N;;;;; A238;YI SYLLABLE MGUOP;Lo;0;L;;;;;N;;;;; A239;YI SYLLABLE MGOT;Lo;0;L;;;;;N;;;;; A23A;YI SYLLABLE MGOX;Lo;0;L;;;;;N;;;;; A23B;YI SYLLABLE MGO;Lo;0;L;;;;;N;;;;; A23C;YI SYLLABLE MGOP;Lo;0;L;;;;;N;;;;; A23D;YI SYLLABLE MGEX;Lo;0;L;;;;;N;;;;; A23E;YI SYLLABLE MGE;Lo;0;L;;;;;N;;;;; A23F;YI SYLLABLE MGEP;Lo;0;L;;;;;N;;;;; A240;YI SYLLABLE MGUT;Lo;0;L;;;;;N;;;;; A241;YI SYLLABLE MGUX;Lo;0;L;;;;;N;;;;; A242;YI SYLLABLE MGU;Lo;0;L;;;;;N;;;;; A243;YI SYLLABLE MGUP;Lo;0;L;;;;;N;;;;; A244;YI SYLLABLE MGURX;Lo;0;L;;;;;N;;;;; A245;YI SYLLABLE MGUR;Lo;0;L;;;;;N;;;;; A246;YI SYLLABLE HXIT;Lo;0;L;;;;;N;;;;; A247;YI SYLLABLE HXIX;Lo;0;L;;;;;N;;;;; A248;YI SYLLABLE HXI;Lo;0;L;;;;;N;;;;; A249;YI SYLLABLE HXIP;Lo;0;L;;;;;N;;;;; A24A;YI SYLLABLE HXIET;Lo;0;L;;;;;N;;;;; A24B;YI SYLLABLE HXIEX;Lo;0;L;;;;;N;;;;; A24C;YI SYLLABLE HXIE;Lo;0;L;;;;;N;;;;; A24D;YI SYLLABLE HXIEP;Lo;0;L;;;;;N;;;;; A24E;YI SYLLABLE HXAT;Lo;0;L;;;;;N;;;;; A24F;YI SYLLABLE HXAX;Lo;0;L;;;;;N;;;;; A250;YI SYLLABLE HXA;Lo;0;L;;;;;N;;;;; A251;YI SYLLABLE HXAP;Lo;0;L;;;;;N;;;;; A252;YI SYLLABLE HXUOT;Lo;0;L;;;;;N;;;;; A253;YI SYLLABLE HXUOX;Lo;0;L;;;;;N;;;;; A254;YI SYLLABLE HXUO;Lo;0;L;;;;;N;;;;; A255;YI SYLLABLE HXUOP;Lo;0;L;;;;;N;;;;; A256;YI SYLLABLE HXOT;Lo;0;L;;;;;N;;;;; A257;YI SYLLABLE HXOX;Lo;0;L;;;;;N;;;;; A258;YI SYLLABLE HXO;Lo;0;L;;;;;N;;;;; A259;YI SYLLABLE HXOP;Lo;0;L;;;;;N;;;;; A25A;YI SYLLABLE HXEX;Lo;0;L;;;;;N;;;;; A25B;YI SYLLABLE HXE;Lo;0;L;;;;;N;;;;; A25C;YI SYLLABLE HXEP;Lo;0;L;;;;;N;;;;; A25D;YI SYLLABLE NGIEX;Lo;0;L;;;;;N;;;;; A25E;YI SYLLABLE NGIE;Lo;0;L;;;;;N;;;;; A25F;YI SYLLABLE NGIEP;Lo;0;L;;;;;N;;;;; A260;YI SYLLABLE NGAT;Lo;0;L;;;;;N;;;;; A261;YI SYLLABLE NGAX;Lo;0;L;;;;;N;;;;; A262;YI SYLLABLE NGA;Lo;0;L;;;;;N;;;;; A263;YI SYLLABLE NGAP;Lo;0;L;;;;;N;;;;; A264;YI SYLLABLE NGUOT;Lo;0;L;;;;;N;;;;; A265;YI SYLLABLE NGUOX;Lo;0;L;;;;;N;;;;; A266;YI SYLLABLE NGUO;Lo;0;L;;;;;N;;;;; A267;YI SYLLABLE NGOT;Lo;0;L;;;;;N;;;;; A268;YI SYLLABLE NGOX;Lo;0;L;;;;;N;;;;; A269;YI SYLLABLE NGO;Lo;0;L;;;;;N;;;;; A26A;YI SYLLABLE NGOP;Lo;0;L;;;;;N;;;;; A26B;YI SYLLABLE NGEX;Lo;0;L;;;;;N;;;;; A26C;YI SYLLABLE NGE;Lo;0;L;;;;;N;;;;; A26D;YI SYLLABLE NGEP;Lo;0;L;;;;;N;;;;; A26E;YI SYLLABLE HIT;Lo;0;L;;;;;N;;;;; A26F;YI SYLLABLE HIEX;Lo;0;L;;;;;N;;;;; A270;YI SYLLABLE HIE;Lo;0;L;;;;;N;;;;; A271;YI SYLLABLE HAT;Lo;0;L;;;;;N;;;;; A272;YI SYLLABLE HAX;Lo;0;L;;;;;N;;;;; A273;YI SYLLABLE HA;Lo;0;L;;;;;N;;;;; A274;YI SYLLABLE HAP;Lo;0;L;;;;;N;;;;; A275;YI SYLLABLE HUOT;Lo;0;L;;;;;N;;;;; A276;YI SYLLABLE HUOX;Lo;0;L;;;;;N;;;;; A277;YI SYLLABLE HUO;Lo;0;L;;;;;N;;;;; A278;YI SYLLABLE HUOP;Lo;0;L;;;;;N;;;;; A279;YI SYLLABLE HOT;Lo;0;L;;;;;N;;;;; A27A;YI SYLLABLE HOX;Lo;0;L;;;;;N;;;;; A27B;YI SYLLABLE HO;Lo;0;L;;;;;N;;;;; A27C;YI SYLLABLE HOP;Lo;0;L;;;;;N;;;;; A27D;YI SYLLABLE HEX;Lo;0;L;;;;;N;;;;; A27E;YI SYLLABLE HE;Lo;0;L;;;;;N;;;;; A27F;YI SYLLABLE HEP;Lo;0;L;;;;;N;;;;; A280;YI SYLLABLE WAT;Lo;0;L;;;;;N;;;;; A281;YI SYLLABLE WAX;Lo;0;L;;;;;N;;;;; A282;YI SYLLABLE WA;Lo;0;L;;;;;N;;;;; A283;YI SYLLABLE WAP;Lo;0;L;;;;;N;;;;; A284;YI SYLLABLE WUOX;Lo;0;L;;;;;N;;;;; A285;YI SYLLABLE WUO;Lo;0;L;;;;;N;;;;; A286;YI SYLLABLE WUOP;Lo;0;L;;;;;N;;;;; A287;YI SYLLABLE WOX;Lo;0;L;;;;;N;;;;; A288;YI SYLLABLE WO;Lo;0;L;;;;;N;;;;; A289;YI SYLLABLE WOP;Lo;0;L;;;;;N;;;;; A28A;YI SYLLABLE WEX;Lo;0;L;;;;;N;;;;; A28B;YI SYLLABLE WE;Lo;0;L;;;;;N;;;;; A28C;YI SYLLABLE WEP;Lo;0;L;;;;;N;;;;; A28D;YI SYLLABLE ZIT;Lo;0;L;;;;;N;;;;; A28E;YI SYLLABLE ZIX;Lo;0;L;;;;;N;;;;; A28F;YI SYLLABLE ZI;Lo;0;L;;;;;N;;;;; A290;YI SYLLABLE ZIP;Lo;0;L;;;;;N;;;;; A291;YI SYLLABLE ZIEX;Lo;0;L;;;;;N;;;;; A292;YI SYLLABLE ZIE;Lo;0;L;;;;;N;;;;; A293;YI SYLLABLE ZIEP;Lo;0;L;;;;;N;;;;; A294;YI SYLLABLE ZAT;Lo;0;L;;;;;N;;;;; A295;YI SYLLABLE ZAX;Lo;0;L;;;;;N;;;;; A296;YI SYLLABLE ZA;Lo;0;L;;;;;N;;;;; A297;YI SYLLABLE ZAP;Lo;0;L;;;;;N;;;;; A298;YI SYLLABLE ZUOX;Lo;0;L;;;;;N;;;;; A299;YI SYLLABLE ZUO;Lo;0;L;;;;;N;;;;; A29A;YI SYLLABLE ZUOP;Lo;0;L;;;;;N;;;;; A29B;YI SYLLABLE ZOT;Lo;0;L;;;;;N;;;;; A29C;YI SYLLABLE ZOX;Lo;0;L;;;;;N;;;;; A29D;YI SYLLABLE ZO;Lo;0;L;;;;;N;;;;; A29E;YI SYLLABLE ZOP;Lo;0;L;;;;;N;;;;; A29F;YI SYLLABLE ZEX;Lo;0;L;;;;;N;;;;; A2A0;YI SYLLABLE ZE;Lo;0;L;;;;;N;;;;; A2A1;YI SYLLABLE ZEP;Lo;0;L;;;;;N;;;;; A2A2;YI SYLLABLE ZUT;Lo;0;L;;;;;N;;;;; A2A3;YI SYLLABLE ZUX;Lo;0;L;;;;;N;;;;; A2A4;YI SYLLABLE ZU;Lo;0;L;;;;;N;;;;; A2A5;YI SYLLABLE ZUP;Lo;0;L;;;;;N;;;;; A2A6;YI SYLLABLE ZURX;Lo;0;L;;;;;N;;;;; A2A7;YI SYLLABLE ZUR;Lo;0;L;;;;;N;;;;; A2A8;YI SYLLABLE ZYT;Lo;0;L;;;;;N;;;;; A2A9;YI SYLLABLE ZYX;Lo;0;L;;;;;N;;;;; A2AA;YI SYLLABLE ZY;Lo;0;L;;;;;N;;;;; A2AB;YI SYLLABLE ZYP;Lo;0;L;;;;;N;;;;; A2AC;YI SYLLABLE ZYRX;Lo;0;L;;;;;N;;;;; A2AD;YI SYLLABLE ZYR;Lo;0;L;;;;;N;;;;; A2AE;YI SYLLABLE CIT;Lo;0;L;;;;;N;;;;; A2AF;YI SYLLABLE CIX;Lo;0;L;;;;;N;;;;; A2B0;YI SYLLABLE CI;Lo;0;L;;;;;N;;;;; A2B1;YI SYLLABLE CIP;Lo;0;L;;;;;N;;;;; A2B2;YI SYLLABLE CIET;Lo;0;L;;;;;N;;;;; A2B3;YI SYLLABLE CIEX;Lo;0;L;;;;;N;;;;; A2B4;YI SYLLABLE CIE;Lo;0;L;;;;;N;;;;; A2B5;YI SYLLABLE CIEP;Lo;0;L;;;;;N;;;;; A2B6;YI SYLLABLE CAT;Lo;0;L;;;;;N;;;;; A2B7;YI SYLLABLE CAX;Lo;0;L;;;;;N;;;;; A2B8;YI SYLLABLE CA;Lo;0;L;;;;;N;;;;; A2B9;YI SYLLABLE CAP;Lo;0;L;;;;;N;;;;; A2BA;YI SYLLABLE CUOX;Lo;0;L;;;;;N;;;;; A2BB;YI SYLLABLE CUO;Lo;0;L;;;;;N;;;;; A2BC;YI SYLLABLE CUOP;Lo;0;L;;;;;N;;;;; A2BD;YI SYLLABLE COT;Lo;0;L;;;;;N;;;;; A2BE;YI SYLLABLE COX;Lo;0;L;;;;;N;;;;; A2BF;YI SYLLABLE CO;Lo;0;L;;;;;N;;;;; A2C0;YI SYLLABLE COP;Lo;0;L;;;;;N;;;;; A2C1;YI SYLLABLE CEX;Lo;0;L;;;;;N;;;;; A2C2;YI SYLLABLE CE;Lo;0;L;;;;;N;;;;; A2C3;YI SYLLABLE CEP;Lo;0;L;;;;;N;;;;; A2C4;YI SYLLABLE CUT;Lo;0;L;;;;;N;;;;; A2C5;YI SYLLABLE CUX;Lo;0;L;;;;;N;;;;; A2C6;YI SYLLABLE CU;Lo;0;L;;;;;N;;;;; A2C7;YI SYLLABLE CUP;Lo;0;L;;;;;N;;;;; A2C8;YI SYLLABLE CURX;Lo;0;L;;;;;N;;;;; A2C9;YI SYLLABLE CUR;Lo;0;L;;;;;N;;;;; A2CA;YI SYLLABLE CYT;Lo;0;L;;;;;N;;;;; A2CB;YI SYLLABLE CYX;Lo;0;L;;;;;N;;;;; A2CC;YI SYLLABLE CY;Lo;0;L;;;;;N;;;;; A2CD;YI SYLLABLE CYP;Lo;0;L;;;;;N;;;;; A2CE;YI SYLLABLE CYRX;Lo;0;L;;;;;N;;;;; A2CF;YI SYLLABLE CYR;Lo;0;L;;;;;N;;;;; A2D0;YI SYLLABLE ZZIT;Lo;0;L;;;;;N;;;;; A2D1;YI SYLLABLE ZZIX;Lo;0;L;;;;;N;;;;; A2D2;YI SYLLABLE ZZI;Lo;0;L;;;;;N;;;;; A2D3;YI SYLLABLE ZZIP;Lo;0;L;;;;;N;;;;; A2D4;YI SYLLABLE ZZIET;Lo;0;L;;;;;N;;;;; A2D5;YI SYLLABLE ZZIEX;Lo;0;L;;;;;N;;;;; A2D6;YI SYLLABLE ZZIE;Lo;0;L;;;;;N;;;;; A2D7;YI SYLLABLE ZZIEP;Lo;0;L;;;;;N;;;;; A2D8;YI SYLLABLE ZZAT;Lo;0;L;;;;;N;;;;; A2D9;YI SYLLABLE ZZAX;Lo;0;L;;;;;N;;;;; A2DA;YI SYLLABLE ZZA;Lo;0;L;;;;;N;;;;; A2DB;YI SYLLABLE ZZAP;Lo;0;L;;;;;N;;;;; A2DC;YI SYLLABLE ZZOX;Lo;0;L;;;;;N;;;;; A2DD;YI SYLLABLE ZZO;Lo;0;L;;;;;N;;;;; A2DE;YI SYLLABLE ZZOP;Lo;0;L;;;;;N;;;;; A2DF;YI SYLLABLE ZZEX;Lo;0;L;;;;;N;;;;; A2E0;YI SYLLABLE ZZE;Lo;0;L;;;;;N;;;;; A2E1;YI SYLLABLE ZZEP;Lo;0;L;;;;;N;;;;; A2E2;YI SYLLABLE ZZUX;Lo;0;L;;;;;N;;;;; A2E3;YI SYLLABLE ZZU;Lo;0;L;;;;;N;;;;; A2E4;YI SYLLABLE ZZUP;Lo;0;L;;;;;N;;;;; A2E5;YI SYLLABLE ZZURX;Lo;0;L;;;;;N;;;;; A2E6;YI SYLLABLE ZZUR;Lo;0;L;;;;;N;;;;; A2E7;YI SYLLABLE ZZYT;Lo;0;L;;;;;N;;;;; A2E8;YI SYLLABLE ZZYX;Lo;0;L;;;;;N;;;;; A2E9;YI SYLLABLE ZZY;Lo;0;L;;;;;N;;;;; A2EA;YI SYLLABLE ZZYP;Lo;0;L;;;;;N;;;;; A2EB;YI SYLLABLE ZZYRX;Lo;0;L;;;;;N;;;;; A2EC;YI SYLLABLE ZZYR;Lo;0;L;;;;;N;;;;; A2ED;YI SYLLABLE NZIT;Lo;0;L;;;;;N;;;;; A2EE;YI SYLLABLE NZIX;Lo;0;L;;;;;N;;;;; A2EF;YI SYLLABLE NZI;Lo;0;L;;;;;N;;;;; A2F0;YI SYLLABLE NZIP;Lo;0;L;;;;;N;;;;; A2F1;YI SYLLABLE NZIEX;Lo;0;L;;;;;N;;;;; A2F2;YI SYLLABLE NZIE;Lo;0;L;;;;;N;;;;; A2F3;YI SYLLABLE NZIEP;Lo;0;L;;;;;N;;;;; A2F4;YI SYLLABLE NZAT;Lo;0;L;;;;;N;;;;; A2F5;YI SYLLABLE NZAX;Lo;0;L;;;;;N;;;;; A2F6;YI SYLLABLE NZA;Lo;0;L;;;;;N;;;;; A2F7;YI SYLLABLE NZAP;Lo;0;L;;;;;N;;;;; A2F8;YI SYLLABLE NZUOX;Lo;0;L;;;;;N;;;;; A2F9;YI SYLLABLE NZUO;Lo;0;L;;;;;N;;;;; A2FA;YI SYLLABLE NZOX;Lo;0;L;;;;;N;;;;; A2FB;YI SYLLABLE NZOP;Lo;0;L;;;;;N;;;;; A2FC;YI SYLLABLE NZEX;Lo;0;L;;;;;N;;;;; A2FD;YI SYLLABLE NZE;Lo;0;L;;;;;N;;;;; A2FE;YI SYLLABLE NZUX;Lo;0;L;;;;;N;;;;; A2FF;YI SYLLABLE NZU;Lo;0;L;;;;;N;;;;; A300;YI SYLLABLE NZUP;Lo;0;L;;;;;N;;;;; A301;YI SYLLABLE NZURX;Lo;0;L;;;;;N;;;;; A302;YI SYLLABLE NZUR;Lo;0;L;;;;;N;;;;; A303;YI SYLLABLE NZYT;Lo;0;L;;;;;N;;;;; A304;YI SYLLABLE NZYX;Lo;0;L;;;;;N;;;;; A305;YI SYLLABLE NZY;Lo;0;L;;;;;N;;;;; A306;YI SYLLABLE NZYP;Lo;0;L;;;;;N;;;;; A307;YI SYLLABLE NZYRX;Lo;0;L;;;;;N;;;;; A308;YI SYLLABLE NZYR;Lo;0;L;;;;;N;;;;; A309;YI SYLLABLE SIT;Lo;0;L;;;;;N;;;;; A30A;YI SYLLABLE SIX;Lo;0;L;;;;;N;;;;; A30B;YI SYLLABLE SI;Lo;0;L;;;;;N;;;;; A30C;YI SYLLABLE SIP;Lo;0;L;;;;;N;;;;; A30D;YI SYLLABLE SIEX;Lo;0;L;;;;;N;;;;; A30E;YI SYLLABLE SIE;Lo;0;L;;;;;N;;;;; A30F;YI SYLLABLE SIEP;Lo;0;L;;;;;N;;;;; A310;YI SYLLABLE SAT;Lo;0;L;;;;;N;;;;; A311;YI SYLLABLE SAX;Lo;0;L;;;;;N;;;;; A312;YI SYLLABLE SA;Lo;0;L;;;;;N;;;;; A313;YI SYLLABLE SAP;Lo;0;L;;;;;N;;;;; A314;YI SYLLABLE SUOX;Lo;0;L;;;;;N;;;;; A315;YI SYLLABLE SUO;Lo;0;L;;;;;N;;;;; A316;YI SYLLABLE SUOP;Lo;0;L;;;;;N;;;;; A317;YI SYLLABLE SOT;Lo;0;L;;;;;N;;;;; A318;YI SYLLABLE SOX;Lo;0;L;;;;;N;;;;; A319;YI SYLLABLE SO;Lo;0;L;;;;;N;;;;; A31A;YI SYLLABLE SOP;Lo;0;L;;;;;N;;;;; A31B;YI SYLLABLE SEX;Lo;0;L;;;;;N;;;;; A31C;YI SYLLABLE SE;Lo;0;L;;;;;N;;;;; A31D;YI SYLLABLE SEP;Lo;0;L;;;;;N;;;;; A31E;YI SYLLABLE SUT;Lo;0;L;;;;;N;;;;; A31F;YI SYLLABLE SUX;Lo;0;L;;;;;N;;;;; A320;YI SYLLABLE SU;Lo;0;L;;;;;N;;;;; A321;YI SYLLABLE SUP;Lo;0;L;;;;;N;;;;; A322;YI SYLLABLE SURX;Lo;0;L;;;;;N;;;;; A323;YI SYLLABLE SUR;Lo;0;L;;;;;N;;;;; A324;YI SYLLABLE SYT;Lo;0;L;;;;;N;;;;; A325;YI SYLLABLE SYX;Lo;0;L;;;;;N;;;;; A326;YI SYLLABLE SY;Lo;0;L;;;;;N;;;;; A327;YI SYLLABLE SYP;Lo;0;L;;;;;N;;;;; A328;YI SYLLABLE SYRX;Lo;0;L;;;;;N;;;;; A329;YI SYLLABLE SYR;Lo;0;L;;;;;N;;;;; A32A;YI SYLLABLE SSIT;Lo;0;L;;;;;N;;;;; A32B;YI SYLLABLE SSIX;Lo;0;L;;;;;N;;;;; A32C;YI SYLLABLE SSI;Lo;0;L;;;;;N;;;;; A32D;YI SYLLABLE SSIP;Lo;0;L;;;;;N;;;;; A32E;YI SYLLABLE SSIEX;Lo;0;L;;;;;N;;;;; A32F;YI SYLLABLE SSIE;Lo;0;L;;;;;N;;;;; A330;YI SYLLABLE SSIEP;Lo;0;L;;;;;N;;;;; A331;YI SYLLABLE SSAT;Lo;0;L;;;;;N;;;;; A332;YI SYLLABLE SSAX;Lo;0;L;;;;;N;;;;; A333;YI SYLLABLE SSA;Lo;0;L;;;;;N;;;;; A334;YI SYLLABLE SSAP;Lo;0;L;;;;;N;;;;; A335;YI SYLLABLE SSOT;Lo;0;L;;;;;N;;;;; A336;YI SYLLABLE SSOX;Lo;0;L;;;;;N;;;;; A337;YI SYLLABLE SSO;Lo;0;L;;;;;N;;;;; A338;YI SYLLABLE SSOP;Lo;0;L;;;;;N;;;;; A339;YI SYLLABLE SSEX;Lo;0;L;;;;;N;;;;; A33A;YI SYLLABLE SSE;Lo;0;L;;;;;N;;;;; A33B;YI SYLLABLE SSEP;Lo;0;L;;;;;N;;;;; A33C;YI SYLLABLE SSUT;Lo;0;L;;;;;N;;;;; A33D;YI SYLLABLE SSUX;Lo;0;L;;;;;N;;;;; A33E;YI SYLLABLE SSU;Lo;0;L;;;;;N;;;;; A33F;YI SYLLABLE SSUP;Lo;0;L;;;;;N;;;;; A340;YI SYLLABLE SSYT;Lo;0;L;;;;;N;;;;; A341;YI SYLLABLE SSYX;Lo;0;L;;;;;N;;;;; A342;YI SYLLABLE SSY;Lo;0;L;;;;;N;;;;; A343;YI SYLLABLE SSYP;Lo;0;L;;;;;N;;;;; A344;YI SYLLABLE SSYRX;Lo;0;L;;;;;N;;;;; A345;YI SYLLABLE SSYR;Lo;0;L;;;;;N;;;;; A346;YI SYLLABLE ZHAT;Lo;0;L;;;;;N;;;;; A347;YI SYLLABLE ZHAX;Lo;0;L;;;;;N;;;;; A348;YI SYLLABLE ZHA;Lo;0;L;;;;;N;;;;; A349;YI SYLLABLE ZHAP;Lo;0;L;;;;;N;;;;; A34A;YI SYLLABLE ZHUOX;Lo;0;L;;;;;N;;;;; A34B;YI SYLLABLE ZHUO;Lo;0;L;;;;;N;;;;; A34C;YI SYLLABLE ZHUOP;Lo;0;L;;;;;N;;;;; A34D;YI SYLLABLE ZHOT;Lo;0;L;;;;;N;;;;; A34E;YI SYLLABLE ZHOX;Lo;0;L;;;;;N;;;;; A34F;YI SYLLABLE ZHO;Lo;0;L;;;;;N;;;;; A350;YI SYLLABLE ZHOP;Lo;0;L;;;;;N;;;;; A351;YI SYLLABLE ZHET;Lo;0;L;;;;;N;;;;; A352;YI SYLLABLE ZHEX;Lo;0;L;;;;;N;;;;; A353;YI SYLLABLE ZHE;Lo;0;L;;;;;N;;;;; A354;YI SYLLABLE ZHEP;Lo;0;L;;;;;N;;;;; A355;YI SYLLABLE ZHUT;Lo;0;L;;;;;N;;;;; A356;YI SYLLABLE ZHUX;Lo;0;L;;;;;N;;;;; A357;YI SYLLABLE ZHU;Lo;0;L;;;;;N;;;;; A358;YI SYLLABLE ZHUP;Lo;0;L;;;;;N;;;;; A359;YI SYLLABLE ZHURX;Lo;0;L;;;;;N;;;;; A35A;YI SYLLABLE ZHUR;Lo;0;L;;;;;N;;;;; A35B;YI SYLLABLE ZHYT;Lo;0;L;;;;;N;;;;; A35C;YI SYLLABLE ZHYX;Lo;0;L;;;;;N;;;;; A35D;YI SYLLABLE ZHY;Lo;0;L;;;;;N;;;;; A35E;YI SYLLABLE ZHYP;Lo;0;L;;;;;N;;;;; A35F;YI SYLLABLE ZHYRX;Lo;0;L;;;;;N;;;;; A360;YI SYLLABLE ZHYR;Lo;0;L;;;;;N;;;;; A361;YI SYLLABLE CHAT;Lo;0;L;;;;;N;;;;; A362;YI SYLLABLE CHAX;Lo;0;L;;;;;N;;;;; A363;YI SYLLABLE CHA;Lo;0;L;;;;;N;;;;; A364;YI SYLLABLE CHAP;Lo;0;L;;;;;N;;;;; A365;YI SYLLABLE CHUOT;Lo;0;L;;;;;N;;;;; A366;YI SYLLABLE CHUOX;Lo;0;L;;;;;N;;;;; A367;YI SYLLABLE CHUO;Lo;0;L;;;;;N;;;;; A368;YI SYLLABLE CHUOP;Lo;0;L;;;;;N;;;;; A369;YI SYLLABLE CHOT;Lo;0;L;;;;;N;;;;; A36A;YI SYLLABLE CHOX;Lo;0;L;;;;;N;;;;; A36B;YI SYLLABLE CHO;Lo;0;L;;;;;N;;;;; A36C;YI SYLLABLE CHOP;Lo;0;L;;;;;N;;;;; A36D;YI SYLLABLE CHET;Lo;0;L;;;;;N;;;;; A36E;YI SYLLABLE CHEX;Lo;0;L;;;;;N;;;;; A36F;YI SYLLABLE CHE;Lo;0;L;;;;;N;;;;; A370;YI SYLLABLE CHEP;Lo;0;L;;;;;N;;;;; A371;YI SYLLABLE CHUX;Lo;0;L;;;;;N;;;;; A372;YI SYLLABLE CHU;Lo;0;L;;;;;N;;;;; A373;YI SYLLABLE CHUP;Lo;0;L;;;;;N;;;;; A374;YI SYLLABLE CHURX;Lo;0;L;;;;;N;;;;; A375;YI SYLLABLE CHUR;Lo;0;L;;;;;N;;;;; A376;YI SYLLABLE CHYT;Lo;0;L;;;;;N;;;;; A377;YI SYLLABLE CHYX;Lo;0;L;;;;;N;;;;; A378;YI SYLLABLE CHY;Lo;0;L;;;;;N;;;;; A379;YI SYLLABLE CHYP;Lo;0;L;;;;;N;;;;; A37A;YI SYLLABLE CHYRX;Lo;0;L;;;;;N;;;;; A37B;YI SYLLABLE CHYR;Lo;0;L;;;;;N;;;;; A37C;YI SYLLABLE RRAX;Lo;0;L;;;;;N;;;;; A37D;YI SYLLABLE RRA;Lo;0;L;;;;;N;;;;; A37E;YI SYLLABLE RRUOX;Lo;0;L;;;;;N;;;;; A37F;YI SYLLABLE RRUO;Lo;0;L;;;;;N;;;;; A380;YI SYLLABLE RROT;Lo;0;L;;;;;N;;;;; A381;YI SYLLABLE RROX;Lo;0;L;;;;;N;;;;; A382;YI SYLLABLE RRO;Lo;0;L;;;;;N;;;;; A383;YI SYLLABLE RROP;Lo;0;L;;;;;N;;;;; A384;YI SYLLABLE RRET;Lo;0;L;;;;;N;;;;; A385;YI SYLLABLE RREX;Lo;0;L;;;;;N;;;;; A386;YI SYLLABLE RRE;Lo;0;L;;;;;N;;;;; A387;YI SYLLABLE RREP;Lo;0;L;;;;;N;;;;; A388;YI SYLLABLE RRUT;Lo;0;L;;;;;N;;;;; A389;YI SYLLABLE RRUX;Lo;0;L;;;;;N;;;;; A38A;YI SYLLABLE RRU;Lo;0;L;;;;;N;;;;; A38B;YI SYLLABLE RRUP;Lo;0;L;;;;;N;;;;; A38C;YI SYLLABLE RRURX;Lo;0;L;;;;;N;;;;; A38D;YI SYLLABLE RRUR;Lo;0;L;;;;;N;;;;; A38E;YI SYLLABLE RRYT;Lo;0;L;;;;;N;;;;; A38F;YI SYLLABLE RRYX;Lo;0;L;;;;;N;;;;; A390;YI SYLLABLE RRY;Lo;0;L;;;;;N;;;;; A391;YI SYLLABLE RRYP;Lo;0;L;;;;;N;;;;; A392;YI SYLLABLE RRYRX;Lo;0;L;;;;;N;;;;; A393;YI SYLLABLE RRYR;Lo;0;L;;;;;N;;;;; A394;YI SYLLABLE NRAT;Lo;0;L;;;;;N;;;;; A395;YI SYLLABLE NRAX;Lo;0;L;;;;;N;;;;; A396;YI SYLLABLE NRA;Lo;0;L;;;;;N;;;;; A397;YI SYLLABLE NRAP;Lo;0;L;;;;;N;;;;; A398;YI SYLLABLE NROX;Lo;0;L;;;;;N;;;;; A399;YI SYLLABLE NRO;Lo;0;L;;;;;N;;;;; A39A;YI SYLLABLE NROP;Lo;0;L;;;;;N;;;;; A39B;YI SYLLABLE NRET;Lo;0;L;;;;;N;;;;; A39C;YI SYLLABLE NREX;Lo;0;L;;;;;N;;;;; A39D;YI SYLLABLE NRE;Lo;0;L;;;;;N;;;;; A39E;YI SYLLABLE NREP;Lo;0;L;;;;;N;;;;; A39F;YI SYLLABLE NRUT;Lo;0;L;;;;;N;;;;; A3A0;YI SYLLABLE NRUX;Lo;0;L;;;;;N;;;;; A3A1;YI SYLLABLE NRU;Lo;0;L;;;;;N;;;;; A3A2;YI SYLLABLE NRUP;Lo;0;L;;;;;N;;;;; A3A3;YI SYLLABLE NRURX;Lo;0;L;;;;;N;;;;; A3A4;YI SYLLABLE NRUR;Lo;0;L;;;;;N;;;;; A3A5;YI SYLLABLE NRYT;Lo;0;L;;;;;N;;;;; A3A6;YI SYLLABLE NRYX;Lo;0;L;;;;;N;;;;; A3A7;YI SYLLABLE NRY;Lo;0;L;;;;;N;;;;; A3A8;YI SYLLABLE NRYP;Lo;0;L;;;;;N;;;;; A3A9;YI SYLLABLE NRYRX;Lo;0;L;;;;;N;;;;; A3AA;YI SYLLABLE NRYR;Lo;0;L;;;;;N;;;;; A3AB;YI SYLLABLE SHAT;Lo;0;L;;;;;N;;;;; A3AC;YI SYLLABLE SHAX;Lo;0;L;;;;;N;;;;; A3AD;YI SYLLABLE SHA;Lo;0;L;;;;;N;;;;; A3AE;YI SYLLABLE SHAP;Lo;0;L;;;;;N;;;;; A3AF;YI SYLLABLE SHUOX;Lo;0;L;;;;;N;;;;; A3B0;YI SYLLABLE SHUO;Lo;0;L;;;;;N;;;;; A3B1;YI SYLLABLE SHUOP;Lo;0;L;;;;;N;;;;; A3B2;YI SYLLABLE SHOT;Lo;0;L;;;;;N;;;;; A3B3;YI SYLLABLE SHOX;Lo;0;L;;;;;N;;;;; A3B4;YI SYLLABLE SHO;Lo;0;L;;;;;N;;;;; A3B5;YI SYLLABLE SHOP;Lo;0;L;;;;;N;;;;; A3B6;YI SYLLABLE SHET;Lo;0;L;;;;;N;;;;; A3B7;YI SYLLABLE SHEX;Lo;0;L;;;;;N;;;;; A3B8;YI SYLLABLE SHE;Lo;0;L;;;;;N;;;;; A3B9;YI SYLLABLE SHEP;Lo;0;L;;;;;N;;;;; A3BA;YI SYLLABLE SHUT;Lo;0;L;;;;;N;;;;; A3BB;YI SYLLABLE SHUX;Lo;0;L;;;;;N;;;;; A3BC;YI SYLLABLE SHU;Lo;0;L;;;;;N;;;;; A3BD;YI SYLLABLE SHUP;Lo;0;L;;;;;N;;;;; A3BE;YI SYLLABLE SHURX;Lo;0;L;;;;;N;;;;; A3BF;YI SYLLABLE SHUR;Lo;0;L;;;;;N;;;;; A3C0;YI SYLLABLE SHYT;Lo;0;L;;;;;N;;;;; A3C1;YI SYLLABLE SHYX;Lo;0;L;;;;;N;;;;; A3C2;YI SYLLABLE SHY;Lo;0;L;;;;;N;;;;; A3C3;YI SYLLABLE SHYP;Lo;0;L;;;;;N;;;;; A3C4;YI SYLLABLE SHYRX;Lo;0;L;;;;;N;;;;; A3C5;YI SYLLABLE SHYR;Lo;0;L;;;;;N;;;;; A3C6;YI SYLLABLE RAT;Lo;0;L;;;;;N;;;;; A3C7;YI SYLLABLE RAX;Lo;0;L;;;;;N;;;;; A3C8;YI SYLLABLE RA;Lo;0;L;;;;;N;;;;; A3C9;YI SYLLABLE RAP;Lo;0;L;;;;;N;;;;; A3CA;YI SYLLABLE RUOX;Lo;0;L;;;;;N;;;;; A3CB;YI SYLLABLE RUO;Lo;0;L;;;;;N;;;;; A3CC;YI SYLLABLE RUOP;Lo;0;L;;;;;N;;;;; A3CD;YI SYLLABLE ROT;Lo;0;L;;;;;N;;;;; A3CE;YI SYLLABLE ROX;Lo;0;L;;;;;N;;;;; A3CF;YI SYLLABLE RO;Lo;0;L;;;;;N;;;;; A3D0;YI SYLLABLE ROP;Lo;0;L;;;;;N;;;;; A3D1;YI SYLLABLE REX;Lo;0;L;;;;;N;;;;; A3D2;YI SYLLABLE RE;Lo;0;L;;;;;N;;;;; A3D3;YI SYLLABLE REP;Lo;0;L;;;;;N;;;;; A3D4;YI SYLLABLE RUT;Lo;0;L;;;;;N;;;;; A3D5;YI SYLLABLE RUX;Lo;0;L;;;;;N;;;;; A3D6;YI SYLLABLE RU;Lo;0;L;;;;;N;;;;; A3D7;YI SYLLABLE RUP;Lo;0;L;;;;;N;;;;; A3D8;YI SYLLABLE RURX;Lo;0;L;;;;;N;;;;; A3D9;YI SYLLABLE RUR;Lo;0;L;;;;;N;;;;; A3DA;YI SYLLABLE RYT;Lo;0;L;;;;;N;;;;; A3DB;YI SYLLABLE RYX;Lo;0;L;;;;;N;;;;; A3DC;YI SYLLABLE RY;Lo;0;L;;;;;N;;;;; A3DD;YI SYLLABLE RYP;Lo;0;L;;;;;N;;;;; A3DE;YI SYLLABLE RYRX;Lo;0;L;;;;;N;;;;; A3DF;YI SYLLABLE RYR;Lo;0;L;;;;;N;;;;; A3E0;YI SYLLABLE JIT;Lo;0;L;;;;;N;;;;; A3E1;YI SYLLABLE JIX;Lo;0;L;;;;;N;;;;; A3E2;YI SYLLABLE JI;Lo;0;L;;;;;N;;;;; A3E3;YI SYLLABLE JIP;Lo;0;L;;;;;N;;;;; A3E4;YI SYLLABLE JIET;Lo;0;L;;;;;N;;;;; A3E5;YI SYLLABLE JIEX;Lo;0;L;;;;;N;;;;; A3E6;YI SYLLABLE JIE;Lo;0;L;;;;;N;;;;; A3E7;YI SYLLABLE JIEP;Lo;0;L;;;;;N;;;;; A3E8;YI SYLLABLE JUOT;Lo;0;L;;;;;N;;;;; A3E9;YI SYLLABLE JUOX;Lo;0;L;;;;;N;;;;; A3EA;YI SYLLABLE JUO;Lo;0;L;;;;;N;;;;; A3EB;YI SYLLABLE JUOP;Lo;0;L;;;;;N;;;;; A3EC;YI SYLLABLE JOT;Lo;0;L;;;;;N;;;;; A3ED;YI SYLLABLE JOX;Lo;0;L;;;;;N;;;;; A3EE;YI SYLLABLE JO;Lo;0;L;;;;;N;;;;; A3EF;YI SYLLABLE JOP;Lo;0;L;;;;;N;;;;; A3F0;YI SYLLABLE JUT;Lo;0;L;;;;;N;;;;; A3F1;YI SYLLABLE JUX;Lo;0;L;;;;;N;;;;; A3F2;YI SYLLABLE JU;Lo;0;L;;;;;N;;;;; A3F3;YI SYLLABLE JUP;Lo;0;L;;;;;N;;;;; A3F4;YI SYLLABLE JURX;Lo;0;L;;;;;N;;;;; A3F5;YI SYLLABLE JUR;Lo;0;L;;;;;N;;;;; A3F6;YI SYLLABLE JYT;Lo;0;L;;;;;N;;;;; A3F7;YI SYLLABLE JYX;Lo;0;L;;;;;N;;;;; A3F8;YI SYLLABLE JY;Lo;0;L;;;;;N;;;;; A3F9;YI SYLLABLE JYP;Lo;0;L;;;;;N;;;;; A3FA;YI SYLLABLE JYRX;Lo;0;L;;;;;N;;;;; A3FB;YI SYLLABLE JYR;Lo;0;L;;;;;N;;;;; A3FC;YI SYLLABLE QIT;Lo;0;L;;;;;N;;;;; A3FD;YI SYLLABLE QIX;Lo;0;L;;;;;N;;;;; A3FE;YI SYLLABLE QI;Lo;0;L;;;;;N;;;;; A3FF;YI SYLLABLE QIP;Lo;0;L;;;;;N;;;;; A400;YI SYLLABLE QIET;Lo;0;L;;;;;N;;;;; A401;YI SYLLABLE QIEX;Lo;0;L;;;;;N;;;;; A402;YI SYLLABLE QIE;Lo;0;L;;;;;N;;;;; A403;YI SYLLABLE QIEP;Lo;0;L;;;;;N;;;;; A404;YI SYLLABLE QUOT;Lo;0;L;;;;;N;;;;; A405;YI SYLLABLE QUOX;Lo;0;L;;;;;N;;;;; A406;YI SYLLABLE QUO;Lo;0;L;;;;;N;;;;; A407;YI SYLLABLE QUOP;Lo;0;L;;;;;N;;;;; A408;YI SYLLABLE QOT;Lo;0;L;;;;;N;;;;; A409;YI SYLLABLE QOX;Lo;0;L;;;;;N;;;;; A40A;YI SYLLABLE QO;Lo;0;L;;;;;N;;;;; A40B;YI SYLLABLE QOP;Lo;0;L;;;;;N;;;;; A40C;YI SYLLABLE QUT;Lo;0;L;;;;;N;;;;; A40D;YI SYLLABLE QUX;Lo;0;L;;;;;N;;;;; A40E;YI SYLLABLE QU;Lo;0;L;;;;;N;;;;; A40F;YI SYLLABLE QUP;Lo;0;L;;;;;N;;;;; A410;YI SYLLABLE QURX;Lo;0;L;;;;;N;;;;; A411;YI SYLLABLE QUR;Lo;0;L;;;;;N;;;;; A412;YI SYLLABLE QYT;Lo;0;L;;;;;N;;;;; A413;YI SYLLABLE QYX;Lo;0;L;;;;;N;;;;; A414;YI SYLLABLE QY;Lo;0;L;;;;;N;;;;; A415;YI SYLLABLE QYP;Lo;0;L;;;;;N;;;;; A416;YI SYLLABLE QYRX;Lo;0;L;;;;;N;;;;; A417;YI SYLLABLE QYR;Lo;0;L;;;;;N;;;;; A418;YI SYLLABLE JJIT;Lo;0;L;;;;;N;;;;; A419;YI SYLLABLE JJIX;Lo;0;L;;;;;N;;;;; A41A;YI SYLLABLE JJI;Lo;0;L;;;;;N;;;;; A41B;YI SYLLABLE JJIP;Lo;0;L;;;;;N;;;;; A41C;YI SYLLABLE JJIET;Lo;0;L;;;;;N;;;;; A41D;YI SYLLABLE JJIEX;Lo;0;L;;;;;N;;;;; A41E;YI SYLLABLE JJIE;Lo;0;L;;;;;N;;;;; A41F;YI SYLLABLE JJIEP;Lo;0;L;;;;;N;;;;; A420;YI SYLLABLE JJUOX;Lo;0;L;;;;;N;;;;; A421;YI SYLLABLE JJUO;Lo;0;L;;;;;N;;;;; A422;YI SYLLABLE JJUOP;Lo;0;L;;;;;N;;;;; A423;YI SYLLABLE JJOT;Lo;0;L;;;;;N;;;;; A424;YI SYLLABLE JJOX;Lo;0;L;;;;;N;;;;; A425;YI SYLLABLE JJO;Lo;0;L;;;;;N;;;;; A426;YI SYLLABLE JJOP;Lo;0;L;;;;;N;;;;; A427;YI SYLLABLE JJUT;Lo;0;L;;;;;N;;;;; A428;YI SYLLABLE JJUX;Lo;0;L;;;;;N;;;;; A429;YI SYLLABLE JJU;Lo;0;L;;;;;N;;;;; A42A;YI SYLLABLE JJUP;Lo;0;L;;;;;N;;;;; A42B;YI SYLLABLE JJURX;Lo;0;L;;;;;N;;;;; A42C;YI SYLLABLE JJUR;Lo;0;L;;;;;N;;;;; A42D;YI SYLLABLE JJYT;Lo;0;L;;;;;N;;;;; A42E;YI SYLLABLE JJYX;Lo;0;L;;;;;N;;;;; A42F;YI SYLLABLE JJY;Lo;0;L;;;;;N;;;;; A430;YI SYLLABLE JJYP;Lo;0;L;;;;;N;;;;; A431;YI SYLLABLE NJIT;Lo;0;L;;;;;N;;;;; A432;YI SYLLABLE NJIX;Lo;0;L;;;;;N;;;;; A433;YI SYLLABLE NJI;Lo;0;L;;;;;N;;;;; A434;YI SYLLABLE NJIP;Lo;0;L;;;;;N;;;;; A435;YI SYLLABLE NJIET;Lo;0;L;;;;;N;;;;; A436;YI SYLLABLE NJIEX;Lo;0;L;;;;;N;;;;; A437;YI SYLLABLE NJIE;Lo;0;L;;;;;N;;;;; A438;YI SYLLABLE NJIEP;Lo;0;L;;;;;N;;;;; A439;YI SYLLABLE NJUOX;Lo;0;L;;;;;N;;;;; A43A;YI SYLLABLE NJUO;Lo;0;L;;;;;N;;;;; A43B;YI SYLLABLE NJOT;Lo;0;L;;;;;N;;;;; A43C;YI SYLLABLE NJOX;Lo;0;L;;;;;N;;;;; A43D;YI SYLLABLE NJO;Lo;0;L;;;;;N;;;;; A43E;YI SYLLABLE NJOP;Lo;0;L;;;;;N;;;;; A43F;YI SYLLABLE NJUX;Lo;0;L;;;;;N;;;;; A440;YI SYLLABLE NJU;Lo;0;L;;;;;N;;;;; A441;YI SYLLABLE NJUP;Lo;0;L;;;;;N;;;;; A442;YI SYLLABLE NJURX;Lo;0;L;;;;;N;;;;; A443;YI SYLLABLE NJUR;Lo;0;L;;;;;N;;;;; A444;YI SYLLABLE NJYT;Lo;0;L;;;;;N;;;;; A445;YI SYLLABLE NJYX;Lo;0;L;;;;;N;;;;; A446;YI SYLLABLE NJY;Lo;0;L;;;;;N;;;;; A447;YI SYLLABLE NJYP;Lo;0;L;;;;;N;;;;; A448;YI SYLLABLE NJYRX;Lo;0;L;;;;;N;;;;; A449;YI SYLLABLE NJYR;Lo;0;L;;;;;N;;;;; A44A;YI SYLLABLE NYIT;Lo;0;L;;;;;N;;;;; A44B;YI SYLLABLE NYIX;Lo;0;L;;;;;N;;;;; A44C;YI SYLLABLE NYI;Lo;0;L;;;;;N;;;;; A44D;YI SYLLABLE NYIP;Lo;0;L;;;;;N;;;;; A44E;YI SYLLABLE NYIET;Lo;0;L;;;;;N;;;;; A44F;YI SYLLABLE NYIEX;Lo;0;L;;;;;N;;;;; A450;YI SYLLABLE NYIE;Lo;0;L;;;;;N;;;;; A451;YI SYLLABLE NYIEP;Lo;0;L;;;;;N;;;;; A452;YI SYLLABLE NYUOX;Lo;0;L;;;;;N;;;;; A453;YI SYLLABLE NYUO;Lo;0;L;;;;;N;;;;; A454;YI SYLLABLE NYUOP;Lo;0;L;;;;;N;;;;; A455;YI SYLLABLE NYOT;Lo;0;L;;;;;N;;;;; A456;YI SYLLABLE NYOX;Lo;0;L;;;;;N;;;;; A457;YI SYLLABLE NYO;Lo;0;L;;;;;N;;;;; A458;YI SYLLABLE NYOP;Lo;0;L;;;;;N;;;;; A459;YI SYLLABLE NYUT;Lo;0;L;;;;;N;;;;; A45A;YI SYLLABLE NYUX;Lo;0;L;;;;;N;;;;; A45B;YI SYLLABLE NYU;Lo;0;L;;;;;N;;;;; A45C;YI SYLLABLE NYUP;Lo;0;L;;;;;N;;;;; A45D;YI SYLLABLE XIT;Lo;0;L;;;;;N;;;;; A45E;YI SYLLABLE XIX;Lo;0;L;;;;;N;;;;; A45F;YI SYLLABLE XI;Lo;0;L;;;;;N;;;;; A460;YI SYLLABLE XIP;Lo;0;L;;;;;N;;;;; A461;YI SYLLABLE XIET;Lo;0;L;;;;;N;;;;; A462;YI SYLLABLE XIEX;Lo;0;L;;;;;N;;;;; A463;YI SYLLABLE XIE;Lo;0;L;;;;;N;;;;; A464;YI SYLLABLE XIEP;Lo;0;L;;;;;N;;;;; A465;YI SYLLABLE XUOX;Lo;0;L;;;;;N;;;;; A466;YI SYLLABLE XUO;Lo;0;L;;;;;N;;;;; A467;YI SYLLABLE XOT;Lo;0;L;;;;;N;;;;; A468;YI SYLLABLE XOX;Lo;0;L;;;;;N;;;;; A469;YI SYLLABLE XO;Lo;0;L;;;;;N;;;;; A46A;YI SYLLABLE XOP;Lo;0;L;;;;;N;;;;; A46B;YI SYLLABLE XYT;Lo;0;L;;;;;N;;;;; A46C;YI SYLLABLE XYX;Lo;0;L;;;;;N;;;;; A46D;YI SYLLABLE XY;Lo;0;L;;;;;N;;;;; A46E;YI SYLLABLE XYP;Lo;0;L;;;;;N;;;;; A46F;YI SYLLABLE XYRX;Lo;0;L;;;;;N;;;;; A470;YI SYLLABLE XYR;Lo;0;L;;;;;N;;;;; A471;YI SYLLABLE YIT;Lo;0;L;;;;;N;;;;; A472;YI SYLLABLE YIX;Lo;0;L;;;;;N;;;;; A473;YI SYLLABLE YI;Lo;0;L;;;;;N;;;;; A474;YI SYLLABLE YIP;Lo;0;L;;;;;N;;;;; A475;YI SYLLABLE YIET;Lo;0;L;;;;;N;;;;; A476;YI SYLLABLE YIEX;Lo;0;L;;;;;N;;;;; A477;YI SYLLABLE YIE;Lo;0;L;;;;;N;;;;; A478;YI SYLLABLE YIEP;Lo;0;L;;;;;N;;;;; A479;YI SYLLABLE YUOT;Lo;0;L;;;;;N;;;;; A47A;YI SYLLABLE YUOX;Lo;0;L;;;;;N;;;;; A47B;YI SYLLABLE YUO;Lo;0;L;;;;;N;;;;; A47C;YI SYLLABLE YUOP;Lo;0;L;;;;;N;;;;; A47D;YI SYLLABLE YOT;Lo;0;L;;;;;N;;;;; A47E;YI SYLLABLE YOX;Lo;0;L;;;;;N;;;;; A47F;YI SYLLABLE YO;Lo;0;L;;;;;N;;;;; A480;YI SYLLABLE YOP;Lo;0;L;;;;;N;;;;; A481;YI SYLLABLE YUT;Lo;0;L;;;;;N;;;;; A482;YI SYLLABLE YUX;Lo;0;L;;;;;N;;;;; A483;YI SYLLABLE YU;Lo;0;L;;;;;N;;;;; A484;YI SYLLABLE YUP;Lo;0;L;;;;;N;;;;; A485;YI SYLLABLE YURX;Lo;0;L;;;;;N;;;;; A486;YI SYLLABLE YUR;Lo;0;L;;;;;N;;;;; A487;YI SYLLABLE YYT;Lo;0;L;;;;;N;;;;; A488;YI SYLLABLE YYX;Lo;0;L;;;;;N;;;;; A489;YI SYLLABLE YY;Lo;0;L;;;;;N;;;;; A48A;YI SYLLABLE YYP;Lo;0;L;;;;;N;;;;; A48B;YI SYLLABLE YYRX;Lo;0;L;;;;;N;;;;; A48C;YI SYLLABLE YYR;Lo;0;L;;;;;N;;;;; A490;YI RADICAL QOT;So;0;ON;;;;;N;;;;; A491;YI RADICAL LI;So;0;ON;;;;;N;;;;; A492;YI RADICAL KIT;So;0;ON;;;;;N;;;;; A493;YI RADICAL NYIP;So;0;ON;;;;;N;;;;; A494;YI RADICAL CYP;So;0;ON;;;;;N;;;;; A495;YI RADICAL SSI;So;0;ON;;;;;N;;;;; A496;YI RADICAL GGOP;So;0;ON;;;;;N;;;;; A497;YI RADICAL GEP;So;0;ON;;;;;N;;;;; A498;YI RADICAL MI;So;0;ON;;;;;N;;;;; A499;YI RADICAL HXIT;So;0;ON;;;;;N;;;;; A49A;YI RADICAL LYR;So;0;ON;;;;;N;;;;; A49B;YI RADICAL BBUT;So;0;ON;;;;;N;;;;; A49C;YI RADICAL MOP;So;0;ON;;;;;N;;;;; A49D;YI RADICAL YO;So;0;ON;;;;;N;;;;; A49E;YI RADICAL PUT;So;0;ON;;;;;N;;;;; A49F;YI RADICAL HXUO;So;0;ON;;;;;N;;;;; A4A0;YI RADICAL TAT;So;0;ON;;;;;N;;;;; A4A1;YI RADICAL GA;So;0;ON;;;;;N;;;;; A4A4;YI RADICAL DDUR;So;0;ON;;;;;N;;;;; A4A5;YI RADICAL BUR;So;0;ON;;;;;N;;;;; A4A6;YI RADICAL GGUO;So;0;ON;;;;;N;;;;; A4A7;YI RADICAL NYOP;So;0;ON;;;;;N;;;;; A4A8;YI RADICAL TU;So;0;ON;;;;;N;;;;; A4A9;YI RADICAL OP;So;0;ON;;;;;N;;;;; A4AA;YI RADICAL JJUT;So;0;ON;;;;;N;;;;; A4AB;YI RADICAL ZOT;So;0;ON;;;;;N;;;;; A4AC;YI RADICAL PYT;So;0;ON;;;;;N;;;;; A4AD;YI RADICAL HMO;So;0;ON;;;;;N;;;;; A4AE;YI RADICAL YIT;So;0;ON;;;;;N;;;;; A4AF;YI RADICAL VUR;So;0;ON;;;;;N;;;;; A4B0;YI RADICAL SHY;So;0;ON;;;;;N;;;;; A4B1;YI RADICAL VEP;So;0;ON;;;;;N;;;;; A4B2;YI RADICAL ZA;So;0;ON;;;;;N;;;;; A4B3;YI RADICAL JO;So;0;ON;;;;;N;;;;; A4B5;YI RADICAL JJY;So;0;ON;;;;;N;;;;; A4B6;YI RADICAL GOT;So;0;ON;;;;;N;;;;; A4B7;YI RADICAL JJIE;So;0;ON;;;;;N;;;;; A4B8;YI RADICAL WO;So;0;ON;;;;;N;;;;; A4B9;YI RADICAL DU;So;0;ON;;;;;N;;;;; A4BA;YI RADICAL SHUR;So;0;ON;;;;;N;;;;; A4BB;YI RADICAL LIE;So;0;ON;;;;;N;;;;; A4BC;YI RADICAL CY;So;0;ON;;;;;N;;;;; A4BD;YI RADICAL CUOP;So;0;ON;;;;;N;;;;; A4BE;YI RADICAL CIP;So;0;ON;;;;;N;;;;; A4BF;YI RADICAL HXOP;So;0;ON;;;;;N;;;;; A4C0;YI RADICAL SHAT;So;0;ON;;;;;N;;;;; A4C2;YI RADICAL SHOP;So;0;ON;;;;;N;;;;; A4C3;YI RADICAL CHE;So;0;ON;;;;;N;;;;; A4C4;YI RADICAL ZZIET;So;0;ON;;;;;N;;;;; A4C6;YI RADICAL KE;So;0;ON;;;;;N;;;;; AC00;;Lo;0;L;;;;;N;;;;; D7A3;;Lo;0;L;;;;;N;;;;; D800;;Cs;0;L;;;;;N;;;;; DB7F;;Cs;0;L;;;;;N;;;;; DB80;;Cs;0;L;;;;;N;;;;; DBFF;;Cs;0;L;;;;;N;;;;; DC00;;Cs;0;L;;;;;N;;;;; DFFF;;Cs;0;L;;;;;N;;;;; E000;;Co;0;L;;;;;N;;;;; F8FF;;Co;0;L;;;;;N;;;;; F900;CJK COMPATIBILITY IDEOGRAPH-F900;Lo;0;L;8C48;;;;N;;;;; F901;CJK COMPATIBILITY IDEOGRAPH-F901;Lo;0;L;66F4;;;;N;;;;; F902;CJK COMPATIBILITY IDEOGRAPH-F902;Lo;0;L;8ECA;;;;N;;;;; F903;CJK COMPATIBILITY IDEOGRAPH-F903;Lo;0;L;8CC8;;;;N;;;;; F904;CJK COMPATIBILITY IDEOGRAPH-F904;Lo;0;L;6ED1;;;;N;;;;; F905;CJK COMPATIBILITY IDEOGRAPH-F905;Lo;0;L;4E32;;;;N;;;;; F906;CJK COMPATIBILITY IDEOGRAPH-F906;Lo;0;L;53E5;;;;N;;;;; F907;CJK COMPATIBILITY IDEOGRAPH-F907;Lo;0;L;9F9C;;;;N;;;;; F908;CJK COMPATIBILITY IDEOGRAPH-F908;Lo;0;L;9F9C;;;;N;;;;; F909;CJK COMPATIBILITY IDEOGRAPH-F909;Lo;0;L;5951;;;;N;;;;; F90A;CJK COMPATIBILITY IDEOGRAPH-F90A;Lo;0;L;91D1;;;;N;;;;; F90B;CJK COMPATIBILITY IDEOGRAPH-F90B;Lo;0;L;5587;;;;N;;;;; F90C;CJK COMPATIBILITY IDEOGRAPH-F90C;Lo;0;L;5948;;;;N;;;;; F90D;CJK COMPATIBILITY IDEOGRAPH-F90D;Lo;0;L;61F6;;;;N;;;;; F90E;CJK COMPATIBILITY IDEOGRAPH-F90E;Lo;0;L;7669;;;;N;;;;; F90F;CJK COMPATIBILITY IDEOGRAPH-F90F;Lo;0;L;7F85;;;;N;;;;; F910;CJK COMPATIBILITY IDEOGRAPH-F910;Lo;0;L;863F;;;;N;;;;; F911;CJK COMPATIBILITY IDEOGRAPH-F911;Lo;0;L;87BA;;;;N;;;;; F912;CJK COMPATIBILITY IDEOGRAPH-F912;Lo;0;L;88F8;;;;N;;;;; F913;CJK COMPATIBILITY IDEOGRAPH-F913;Lo;0;L;908F;;;;N;;;;; F914;CJK COMPATIBILITY IDEOGRAPH-F914;Lo;0;L;6A02;;;;N;;;;; F915;CJK COMPATIBILITY IDEOGRAPH-F915;Lo;0;L;6D1B;;;;N;;;;; F916;CJK COMPATIBILITY IDEOGRAPH-F916;Lo;0;L;70D9;;;;N;;;;; F917;CJK COMPATIBILITY IDEOGRAPH-F917;Lo;0;L;73DE;;;;N;;;;; F918;CJK COMPATIBILITY IDEOGRAPH-F918;Lo;0;L;843D;;;;N;;;;; F919;CJK COMPATIBILITY IDEOGRAPH-F919;Lo;0;L;916A;;;;N;;;;; F91A;CJK COMPATIBILITY IDEOGRAPH-F91A;Lo;0;L;99F1;;;;N;;;;; F91B;CJK COMPATIBILITY IDEOGRAPH-F91B;Lo;0;L;4E82;;;;N;;;;; F91C;CJK COMPATIBILITY IDEOGRAPH-F91C;Lo;0;L;5375;;;;N;;;;; F91D;CJK COMPATIBILITY IDEOGRAPH-F91D;Lo;0;L;6B04;;;;N;;;;; F91E;CJK COMPATIBILITY IDEOGRAPH-F91E;Lo;0;L;721B;;;;N;;;;; F91F;CJK COMPATIBILITY IDEOGRAPH-F91F;Lo;0;L;862D;;;;N;;;;; F920;CJK COMPATIBILITY IDEOGRAPH-F920;Lo;0;L;9E1E;;;;N;;;;; F921;CJK COMPATIBILITY IDEOGRAPH-F921;Lo;0;L;5D50;;;;N;;;;; F922;CJK COMPATIBILITY IDEOGRAPH-F922;Lo;0;L;6FEB;;;;N;;;;; F923;CJK COMPATIBILITY IDEOGRAPH-F923;Lo;0;L;85CD;;;;N;;;;; F924;CJK COMPATIBILITY IDEOGRAPH-F924;Lo;0;L;8964;;;;N;;;;; F925;CJK COMPATIBILITY IDEOGRAPH-F925;Lo;0;L;62C9;;;;N;;;;; F926;CJK COMPATIBILITY IDEOGRAPH-F926;Lo;0;L;81D8;;;;N;;;;; F927;CJK COMPATIBILITY IDEOGRAPH-F927;Lo;0;L;881F;;;;N;;;;; F928;CJK COMPATIBILITY IDEOGRAPH-F928;Lo;0;L;5ECA;;;;N;;;;; F929;CJK COMPATIBILITY IDEOGRAPH-F929;Lo;0;L;6717;;;;N;;;;; F92A;CJK COMPATIBILITY IDEOGRAPH-F92A;Lo;0;L;6D6A;;;;N;;;;; F92B;CJK COMPATIBILITY IDEOGRAPH-F92B;Lo;0;L;72FC;;;;N;;;;; F92C;CJK COMPATIBILITY IDEOGRAPH-F92C;Lo;0;L;90CE;;;;N;;;;; F92D;CJK COMPATIBILITY IDEOGRAPH-F92D;Lo;0;L;4F86;;;;N;;;;; F92E;CJK COMPATIBILITY IDEOGRAPH-F92E;Lo;0;L;51B7;;;;N;;;;; F92F;CJK COMPATIBILITY IDEOGRAPH-F92F;Lo;0;L;52DE;;;;N;;;;; F930;CJK COMPATIBILITY IDEOGRAPH-F930;Lo;0;L;64C4;;;;N;;;;; F931;CJK COMPATIBILITY IDEOGRAPH-F931;Lo;0;L;6AD3;;;;N;;;;; F932;CJK COMPATIBILITY IDEOGRAPH-F932;Lo;0;L;7210;;;;N;;;;; F933;CJK COMPATIBILITY IDEOGRAPH-F933;Lo;0;L;76E7;;;;N;;;;; F934;CJK COMPATIBILITY IDEOGRAPH-F934;Lo;0;L;8001;;;;N;;;;; F935;CJK COMPATIBILITY IDEOGRAPH-F935;Lo;0;L;8606;;;;N;;;;; F936;CJK COMPATIBILITY IDEOGRAPH-F936;Lo;0;L;865C;;;;N;;;;; F937;CJK COMPATIBILITY IDEOGRAPH-F937;Lo;0;L;8DEF;;;;N;;;;; F938;CJK COMPATIBILITY IDEOGRAPH-F938;Lo;0;L;9732;;;;N;;;;; F939;CJK COMPATIBILITY IDEOGRAPH-F939;Lo;0;L;9B6F;;;;N;;;;; F93A;CJK COMPATIBILITY IDEOGRAPH-F93A;Lo;0;L;9DFA;;;;N;;;;; F93B;CJK COMPATIBILITY IDEOGRAPH-F93B;Lo;0;L;788C;;;;N;;;;; F93C;CJK COMPATIBILITY IDEOGRAPH-F93C;Lo;0;L;797F;;;;N;;;;; F93D;CJK COMPATIBILITY IDEOGRAPH-F93D;Lo;0;L;7DA0;;;;N;;;;; F93E;CJK COMPATIBILITY IDEOGRAPH-F93E;Lo;0;L;83C9;;;;N;;;;; F93F;CJK COMPATIBILITY IDEOGRAPH-F93F;Lo;0;L;9304;;;;N;;;;; F940;CJK COMPATIBILITY IDEOGRAPH-F940;Lo;0;L;9E7F;;;;N;;;;; F941;CJK COMPATIBILITY IDEOGRAPH-F941;Lo;0;L;8AD6;;;;N;;;;; F942;CJK COMPATIBILITY IDEOGRAPH-F942;Lo;0;L;58DF;;;;N;;;;; F943;CJK COMPATIBILITY IDEOGRAPH-F943;Lo;0;L;5F04;;;;N;;;;; F944;CJK COMPATIBILITY IDEOGRAPH-F944;Lo;0;L;7C60;;;;N;;;;; F945;CJK COMPATIBILITY IDEOGRAPH-F945;Lo;0;L;807E;;;;N;;;;; F946;CJK COMPATIBILITY IDEOGRAPH-F946;Lo;0;L;7262;;;;N;;;;; F947;CJK COMPATIBILITY IDEOGRAPH-F947;Lo;0;L;78CA;;;;N;;;;; F948;CJK COMPATIBILITY IDEOGRAPH-F948;Lo;0;L;8CC2;;;;N;;;;; F949;CJK COMPATIBILITY IDEOGRAPH-F949;Lo;0;L;96F7;;;;N;;;;; F94A;CJK COMPATIBILITY IDEOGRAPH-F94A;Lo;0;L;58D8;;;;N;;;;; F94B;CJK COMPATIBILITY IDEOGRAPH-F94B;Lo;0;L;5C62;;;;N;;;;; F94C;CJK COMPATIBILITY IDEOGRAPH-F94C;Lo;0;L;6A13;;;;N;;;;; F94D;CJK COMPATIBILITY IDEOGRAPH-F94D;Lo;0;L;6DDA;;;;N;;;;; F94E;CJK COMPATIBILITY IDEOGRAPH-F94E;Lo;0;L;6F0F;;;;N;;;;; F94F;CJK COMPATIBILITY IDEOGRAPH-F94F;Lo;0;L;7D2F;;;;N;;;;; F950;CJK COMPATIBILITY IDEOGRAPH-F950;Lo;0;L;7E37;;;;N;;;;; F951;CJK COMPATIBILITY IDEOGRAPH-F951;Lo;0;L;96FB;;;;N;;;;; F952;CJK COMPATIBILITY IDEOGRAPH-F952;Lo;0;L;52D2;;;;N;;;;; F953;CJK COMPATIBILITY IDEOGRAPH-F953;Lo;0;L;808B;;;;N;;;;; F954;CJK COMPATIBILITY IDEOGRAPH-F954;Lo;0;L;51DC;;;;N;;;;; F955;CJK COMPATIBILITY IDEOGRAPH-F955;Lo;0;L;51CC;;;;N;;;;; F956;CJK COMPATIBILITY IDEOGRAPH-F956;Lo;0;L;7A1C;;;;N;;;;; F957;CJK COMPATIBILITY IDEOGRAPH-F957;Lo;0;L;7DBE;;;;N;;;;; F958;CJK COMPATIBILITY IDEOGRAPH-F958;Lo;0;L;83F1;;;;N;;;;; F959;CJK COMPATIBILITY IDEOGRAPH-F959;Lo;0;L;9675;;;;N;;;;; F95A;CJK COMPATIBILITY IDEOGRAPH-F95A;Lo;0;L;8B80;;;;N;;;;; F95B;CJK COMPATIBILITY IDEOGRAPH-F95B;Lo;0;L;62CF;;;;N;;;;; F95C;CJK COMPATIBILITY IDEOGRAPH-F95C;Lo;0;L;6A02;;;;N;;;;; F95D;CJK COMPATIBILITY IDEOGRAPH-F95D;Lo;0;L;8AFE;;;;N;;;;; F95E;CJK COMPATIBILITY IDEOGRAPH-F95E;Lo;0;L;4E39;;;;N;;;;; F95F;CJK COMPATIBILITY IDEOGRAPH-F95F;Lo;0;L;5BE7;;;;N;;;;; F960;CJK COMPATIBILITY IDEOGRAPH-F960;Lo;0;L;6012;;;;N;;;;; F961;CJK COMPATIBILITY IDEOGRAPH-F961;Lo;0;L;7387;;;;N;;;;; F962;CJK COMPATIBILITY IDEOGRAPH-F962;Lo;0;L;7570;;;;N;;;;; F963;CJK COMPATIBILITY IDEOGRAPH-F963;Lo;0;L;5317;;;;N;;;;; F964;CJK COMPATIBILITY IDEOGRAPH-F964;Lo;0;L;78FB;;;;N;;;;; F965;CJK COMPATIBILITY IDEOGRAPH-F965;Lo;0;L;4FBF;;;;N;;;;; F966;CJK COMPATIBILITY IDEOGRAPH-F966;Lo;0;L;5FA9;;;;N;;;;; F967;CJK COMPATIBILITY IDEOGRAPH-F967;Lo;0;L;4E0D;;;;N;;;;; F968;CJK COMPATIBILITY IDEOGRAPH-F968;Lo;0;L;6CCC;;;;N;;;;; F969;CJK COMPATIBILITY IDEOGRAPH-F969;Lo;0;L;6578;;;;N;;;;; F96A;CJK COMPATIBILITY IDEOGRAPH-F96A;Lo;0;L;7D22;;;;N;;;;; F96B;CJK COMPATIBILITY IDEOGRAPH-F96B;Lo;0;L;53C3;;;;N;;;;; F96C;CJK COMPATIBILITY IDEOGRAPH-F96C;Lo;0;L;585E;;;;N;;;;; F96D;CJK COMPATIBILITY IDEOGRAPH-F96D;Lo;0;L;7701;;;;N;;;;; F96E;CJK COMPATIBILITY IDEOGRAPH-F96E;Lo;0;L;8449;;;;N;;;;; F96F;CJK COMPATIBILITY IDEOGRAPH-F96F;Lo;0;L;8AAA;;;;N;;;;; F970;CJK COMPATIBILITY IDEOGRAPH-F970;Lo;0;L;6BBA;;;;N;;;;; F971;CJK COMPATIBILITY IDEOGRAPH-F971;Lo;0;L;8FB0;;;;N;;;;; F972;CJK COMPATIBILITY IDEOGRAPH-F972;Lo;0;L;6C88;;;;N;;;;; F973;CJK COMPATIBILITY IDEOGRAPH-F973;Lo;0;L;62FE;;;;N;;;;; F974;CJK COMPATIBILITY IDEOGRAPH-F974;Lo;0;L;82E5;;;;N;;;;; F975;CJK COMPATIBILITY IDEOGRAPH-F975;Lo;0;L;63A0;;;;N;;;;; F976;CJK COMPATIBILITY IDEOGRAPH-F976;Lo;0;L;7565;;;;N;;;;; F977;CJK COMPATIBILITY IDEOGRAPH-F977;Lo;0;L;4EAE;;;;N;;;;; F978;CJK COMPATIBILITY IDEOGRAPH-F978;Lo;0;L;5169;;;;N;;;;; F979;CJK COMPATIBILITY IDEOGRAPH-F979;Lo;0;L;51C9;;;;N;;;;; F97A;CJK COMPATIBILITY IDEOGRAPH-F97A;Lo;0;L;6881;;;;N;;;;; F97B;CJK COMPATIBILITY IDEOGRAPH-F97B;Lo;0;L;7CE7;;;;N;;;;; F97C;CJK COMPATIBILITY IDEOGRAPH-F97C;Lo;0;L;826F;;;;N;;;;; F97D;CJK COMPATIBILITY IDEOGRAPH-F97D;Lo;0;L;8AD2;;;;N;;;;; F97E;CJK COMPATIBILITY IDEOGRAPH-F97E;Lo;0;L;91CF;;;;N;;;;; F97F;CJK COMPATIBILITY IDEOGRAPH-F97F;Lo;0;L;52F5;;;;N;;;;; F980;CJK COMPATIBILITY IDEOGRAPH-F980;Lo;0;L;5442;;;;N;;;;; F981;CJK COMPATIBILITY IDEOGRAPH-F981;Lo;0;L;5973;;;;N;;;;; F982;CJK COMPATIBILITY IDEOGRAPH-F982;Lo;0;L;5EEC;;;;N;;;;; F983;CJK COMPATIBILITY IDEOGRAPH-F983;Lo;0;L;65C5;;;;N;;;;; F984;CJK COMPATIBILITY IDEOGRAPH-F984;Lo;0;L;6FFE;;;;N;;;;; F985;CJK COMPATIBILITY IDEOGRAPH-F985;Lo;0;L;792A;;;;N;;;;; F986;CJK COMPATIBILITY IDEOGRAPH-F986;Lo;0;L;95AD;;;;N;;;;; F987;CJK COMPATIBILITY IDEOGRAPH-F987;Lo;0;L;9A6A;;;;N;;;;; F988;CJK COMPATIBILITY IDEOGRAPH-F988;Lo;0;L;9E97;;;;N;;;;; F989;CJK COMPATIBILITY IDEOGRAPH-F989;Lo;0;L;9ECE;;;;N;;;;; F98A;CJK COMPATIBILITY IDEOGRAPH-F98A;Lo;0;L;529B;;;;N;;;;; F98B;CJK COMPATIBILITY IDEOGRAPH-F98B;Lo;0;L;66C6;;;;N;;;;; F98C;CJK COMPATIBILITY IDEOGRAPH-F98C;Lo;0;L;6B77;;;;N;;;;; F98D;CJK COMPATIBILITY IDEOGRAPH-F98D;Lo;0;L;8F62;;;;N;;;;; F98E;CJK COMPATIBILITY IDEOGRAPH-F98E;Lo;0;L;5E74;;;;N;;;;; F98F;CJK COMPATIBILITY IDEOGRAPH-F98F;Lo;0;L;6190;;;;N;;;;; F990;CJK COMPATIBILITY IDEOGRAPH-F990;Lo;0;L;6200;;;;N;;;;; F991;CJK COMPATIBILITY IDEOGRAPH-F991;Lo;0;L;649A;;;;N;;;;; F992;CJK COMPATIBILITY IDEOGRAPH-F992;Lo;0;L;6F23;;;;N;;;;; F993;CJK COMPATIBILITY IDEOGRAPH-F993;Lo;0;L;7149;;;;N;;;;; F994;CJK COMPATIBILITY IDEOGRAPH-F994;Lo;0;L;7489;;;;N;;;;; F995;CJK COMPATIBILITY IDEOGRAPH-F995;Lo;0;L;79CA;;;;N;;;;; F996;CJK COMPATIBILITY IDEOGRAPH-F996;Lo;0;L;7DF4;;;;N;;;;; F997;CJK COMPATIBILITY IDEOGRAPH-F997;Lo;0;L;806F;;;;N;;;;; F998;CJK COMPATIBILITY IDEOGRAPH-F998;Lo;0;L;8F26;;;;N;;;;; F999;CJK COMPATIBILITY IDEOGRAPH-F999;Lo;0;L;84EE;;;;N;;;;; F99A;CJK COMPATIBILITY IDEOGRAPH-F99A;Lo;0;L;9023;;;;N;;;;; F99B;CJK COMPATIBILITY IDEOGRAPH-F99B;Lo;0;L;934A;;;;N;;;;; F99C;CJK COMPATIBILITY IDEOGRAPH-F99C;Lo;0;L;5217;;;;N;;;;; F99D;CJK COMPATIBILITY IDEOGRAPH-F99D;Lo;0;L;52A3;;;;N;;;;; F99E;CJK COMPATIBILITY IDEOGRAPH-F99E;Lo;0;L;54BD;;;;N;;;;; F99F;CJK COMPATIBILITY IDEOGRAPH-F99F;Lo;0;L;70C8;;;;N;;;;; F9A0;CJK COMPATIBILITY IDEOGRAPH-F9A0;Lo;0;L;88C2;;;;N;;;;; F9A1;CJK COMPATIBILITY IDEOGRAPH-F9A1;Lo;0;L;8AAA;;;;N;;;;; F9A2;CJK COMPATIBILITY IDEOGRAPH-F9A2;Lo;0;L;5EC9;;;;N;;;;; F9A3;CJK COMPATIBILITY IDEOGRAPH-F9A3;Lo;0;L;5FF5;;;;N;;;;; F9A4;CJK COMPATIBILITY IDEOGRAPH-F9A4;Lo;0;L;637B;;;;N;;;;; F9A5;CJK COMPATIBILITY IDEOGRAPH-F9A5;Lo;0;L;6BAE;;;;N;;;;; F9A6;CJK COMPATIBILITY IDEOGRAPH-F9A6;Lo;0;L;7C3E;;;;N;;;;; F9A7;CJK COMPATIBILITY IDEOGRAPH-F9A7;Lo;0;L;7375;;;;N;;;;; F9A8;CJK COMPATIBILITY IDEOGRAPH-F9A8;Lo;0;L;4EE4;;;;N;;;;; F9A9;CJK COMPATIBILITY IDEOGRAPH-F9A9;Lo;0;L;56F9;;;;N;;;;; F9AA;CJK COMPATIBILITY IDEOGRAPH-F9AA;Lo;0;L;5BE7;;;;N;;;;; F9AB;CJK COMPATIBILITY IDEOGRAPH-F9AB;Lo;0;L;5DBA;;;;N;;;;; F9AC;CJK COMPATIBILITY IDEOGRAPH-F9AC;Lo;0;L;601C;;;;N;;;;; F9AD;CJK COMPATIBILITY IDEOGRAPH-F9AD;Lo;0;L;73B2;;;;N;;;;; F9AE;CJK COMPATIBILITY IDEOGRAPH-F9AE;Lo;0;L;7469;;;;N;;;;; F9AF;CJK COMPATIBILITY IDEOGRAPH-F9AF;Lo;0;L;7F9A;;;;N;;;;; F9B0;CJK COMPATIBILITY IDEOGRAPH-F9B0;Lo;0;L;8046;;;;N;;;;; F9B1;CJK COMPATIBILITY IDEOGRAPH-F9B1;Lo;0;L;9234;;;;N;;;;; F9B2;CJK COMPATIBILITY IDEOGRAPH-F9B2;Lo;0;L;96F6;;;;N;;;;; F9B3;CJK COMPATIBILITY IDEOGRAPH-F9B3;Lo;0;L;9748;;;;N;;;;; F9B4;CJK COMPATIBILITY IDEOGRAPH-F9B4;Lo;0;L;9818;;;;N;;;;; F9B5;CJK COMPATIBILITY IDEOGRAPH-F9B5;Lo;0;L;4F8B;;;;N;;;;; F9B6;CJK COMPATIBILITY IDEOGRAPH-F9B6;Lo;0;L;79AE;;;;N;;;;; F9B7;CJK COMPATIBILITY IDEOGRAPH-F9B7;Lo;0;L;91B4;;;;N;;;;; F9B8;CJK COMPATIBILITY IDEOGRAPH-F9B8;Lo;0;L;96B8;;;;N;;;;; F9B9;CJK COMPATIBILITY IDEOGRAPH-F9B9;Lo;0;L;60E1;;;;N;;;;; F9BA;CJK COMPATIBILITY IDEOGRAPH-F9BA;Lo;0;L;4E86;;;;N;;;;; F9BB;CJK COMPATIBILITY IDEOGRAPH-F9BB;Lo;0;L;50DA;;;;N;;;;; F9BC;CJK COMPATIBILITY IDEOGRAPH-F9BC;Lo;0;L;5BEE;;;;N;;;;; F9BD;CJK COMPATIBILITY IDEOGRAPH-F9BD;Lo;0;L;5C3F;;;;N;;;;; F9BE;CJK COMPATIBILITY IDEOGRAPH-F9BE;Lo;0;L;6599;;;;N;;;;; F9BF;CJK COMPATIBILITY IDEOGRAPH-F9BF;Lo;0;L;6A02;;;;N;;;;; F9C0;CJK COMPATIBILITY IDEOGRAPH-F9C0;Lo;0;L;71CE;;;;N;;;;; F9C1;CJK COMPATIBILITY IDEOGRAPH-F9C1;Lo;0;L;7642;;;;N;;;;; F9C2;CJK COMPATIBILITY IDEOGRAPH-F9C2;Lo;0;L;84FC;;;;N;;;;; F9C3;CJK COMPATIBILITY IDEOGRAPH-F9C3;Lo;0;L;907C;;;;N;;;;; F9C4;CJK COMPATIBILITY IDEOGRAPH-F9C4;Lo;0;L;9F8D;;;;N;;;;; F9C5;CJK COMPATIBILITY IDEOGRAPH-F9C5;Lo;0;L;6688;;;;N;;;;; F9C6;CJK COMPATIBILITY IDEOGRAPH-F9C6;Lo;0;L;962E;;;;N;;;;; F9C7;CJK COMPATIBILITY IDEOGRAPH-F9C7;Lo;0;L;5289;;;;N;;;;; F9C8;CJK COMPATIBILITY IDEOGRAPH-F9C8;Lo;0;L;677B;;;;N;;;;; F9C9;CJK COMPATIBILITY IDEOGRAPH-F9C9;Lo;0;L;67F3;;;;N;;;;; F9CA;CJK COMPATIBILITY IDEOGRAPH-F9CA;Lo;0;L;6D41;;;;N;;;;; F9CB;CJK COMPATIBILITY IDEOGRAPH-F9CB;Lo;0;L;6E9C;;;;N;;;;; F9CC;CJK COMPATIBILITY IDEOGRAPH-F9CC;Lo;0;L;7409;;;;N;;;;; F9CD;CJK COMPATIBILITY IDEOGRAPH-F9CD;Lo;0;L;7559;;;;N;;;;; F9CE;CJK COMPATIBILITY IDEOGRAPH-F9CE;Lo;0;L;786B;;;;N;;;;; F9CF;CJK COMPATIBILITY IDEOGRAPH-F9CF;Lo;0;L;7D10;;;;N;;;;; F9D0;CJK COMPATIBILITY IDEOGRAPH-F9D0;Lo;0;L;985E;;;;N;;;;; F9D1;CJK COMPATIBILITY IDEOGRAPH-F9D1;Lo;0;L;516D;;;;N;;;;; F9D2;CJK COMPATIBILITY IDEOGRAPH-F9D2;Lo;0;L;622E;;;;N;;;;; F9D3;CJK COMPATIBILITY IDEOGRAPH-F9D3;Lo;0;L;9678;;;;N;;;;; F9D4;CJK COMPATIBILITY IDEOGRAPH-F9D4;Lo;0;L;502B;;;;N;;;;; F9D5;CJK COMPATIBILITY IDEOGRAPH-F9D5;Lo;0;L;5D19;;;;N;;;;; F9D6;CJK COMPATIBILITY IDEOGRAPH-F9D6;Lo;0;L;6DEA;;;;N;;;;; F9D7;CJK COMPATIBILITY IDEOGRAPH-F9D7;Lo;0;L;8F2A;;;;N;;;;; F9D8;CJK COMPATIBILITY IDEOGRAPH-F9D8;Lo;0;L;5F8B;;;;N;;;;; F9D9;CJK COMPATIBILITY IDEOGRAPH-F9D9;Lo;0;L;6144;;;;N;;;;; F9DA;CJK COMPATIBILITY IDEOGRAPH-F9DA;Lo;0;L;6817;;;;N;;;;; F9DB;CJK COMPATIBILITY IDEOGRAPH-F9DB;Lo;0;L;7387;;;;N;;;;; F9DC;CJK COMPATIBILITY IDEOGRAPH-F9DC;Lo;0;L;9686;;;;N;;;;; F9DD;CJK COMPATIBILITY IDEOGRAPH-F9DD;Lo;0;L;5229;;;;N;;;;; F9DE;CJK COMPATIBILITY IDEOGRAPH-F9DE;Lo;0;L;540F;;;;N;;;;; F9DF;CJK COMPATIBILITY IDEOGRAPH-F9DF;Lo;0;L;5C65;;;;N;;;;; F9E0;CJK COMPATIBILITY IDEOGRAPH-F9E0;Lo;0;L;6613;;;;N;;;;; F9E1;CJK COMPATIBILITY IDEOGRAPH-F9E1;Lo;0;L;674E;;;;N;;;;; F9E2;CJK COMPATIBILITY IDEOGRAPH-F9E2;Lo;0;L;68A8;;;;N;;;;; F9E3;CJK COMPATIBILITY IDEOGRAPH-F9E3;Lo;0;L;6CE5;;;;N;;;;; F9E4;CJK COMPATIBILITY IDEOGRAPH-F9E4;Lo;0;L;7406;;;;N;;;;; F9E5;CJK COMPATIBILITY IDEOGRAPH-F9E5;Lo;0;L;75E2;;;;N;;;;; F9E6;CJK COMPATIBILITY IDEOGRAPH-F9E6;Lo;0;L;7F79;;;;N;;;;; F9E7;CJK COMPATIBILITY IDEOGRAPH-F9E7;Lo;0;L;88CF;;;;N;;;;; F9E8;CJK COMPATIBILITY IDEOGRAPH-F9E8;Lo;0;L;88E1;;;;N;;;;; F9E9;CJK COMPATIBILITY IDEOGRAPH-F9E9;Lo;0;L;91CC;;;;N;;;;; F9EA;CJK COMPATIBILITY IDEOGRAPH-F9EA;Lo;0;L;96E2;;;;N;;;;; F9EB;CJK COMPATIBILITY IDEOGRAPH-F9EB;Lo;0;L;533F;;;;N;;;;; F9EC;CJK COMPATIBILITY IDEOGRAPH-F9EC;Lo;0;L;6EBA;;;;N;;;;; F9ED;CJK COMPATIBILITY IDEOGRAPH-F9ED;Lo;0;L;541D;;;;N;;;;; F9EE;CJK COMPATIBILITY IDEOGRAPH-F9EE;Lo;0;L;71D0;;;;N;;;;; F9EF;CJK COMPATIBILITY IDEOGRAPH-F9EF;Lo;0;L;7498;;;;N;;;;; F9F0;CJK COMPATIBILITY IDEOGRAPH-F9F0;Lo;0;L;85FA;;;;N;;;;; F9F1;CJK COMPATIBILITY IDEOGRAPH-F9F1;Lo;0;L;96A3;;;;N;;;;; F9F2;CJK COMPATIBILITY IDEOGRAPH-F9F2;Lo;0;L;9C57;;;;N;;;;; F9F3;CJK COMPATIBILITY IDEOGRAPH-F9F3;Lo;0;L;9E9F;;;;N;;;;; F9F4;CJK COMPATIBILITY IDEOGRAPH-F9F4;Lo;0;L;6797;;;;N;;;;; F9F5;CJK COMPATIBILITY IDEOGRAPH-F9F5;Lo;0;L;6DCB;;;;N;;;;; F9F6;CJK COMPATIBILITY IDEOGRAPH-F9F6;Lo;0;L;81E8;;;;N;;;;; F9F7;CJK COMPATIBILITY IDEOGRAPH-F9F7;Lo;0;L;7ACB;;;;N;;;;; F9F8;CJK COMPATIBILITY IDEOGRAPH-F9F8;Lo;0;L;7B20;;;;N;;;;; F9F9;CJK COMPATIBILITY IDEOGRAPH-F9F9;Lo;0;L;7C92;;;;N;;;;; F9FA;CJK COMPATIBILITY IDEOGRAPH-F9FA;Lo;0;L;72C0;;;;N;;;;; F9FB;CJK COMPATIBILITY IDEOGRAPH-F9FB;Lo;0;L;7099;;;;N;;;;; F9FC;CJK COMPATIBILITY IDEOGRAPH-F9FC;Lo;0;L;8B58;;;;N;;;;; F9FD;CJK COMPATIBILITY IDEOGRAPH-F9FD;Lo;0;L;4EC0;;;;N;;;;; F9FE;CJK COMPATIBILITY IDEOGRAPH-F9FE;Lo;0;L;8336;;;;N;;;;; F9FF;CJK COMPATIBILITY IDEOGRAPH-F9FF;Lo;0;L;523A;;;;N;;;;; FA00;CJK COMPATIBILITY IDEOGRAPH-FA00;Lo;0;L;5207;;;;N;;;;; FA01;CJK COMPATIBILITY IDEOGRAPH-FA01;Lo;0;L;5EA6;;;;N;;;;; FA02;CJK COMPATIBILITY IDEOGRAPH-FA02;Lo;0;L;62D3;;;;N;;;;; FA03;CJK COMPATIBILITY IDEOGRAPH-FA03;Lo;0;L;7CD6;;;;N;;;;; FA04;CJK COMPATIBILITY IDEOGRAPH-FA04;Lo;0;L;5B85;;;;N;;;;; FA05;CJK COMPATIBILITY IDEOGRAPH-FA05;Lo;0;L;6D1E;;;;N;;;;; FA06;CJK COMPATIBILITY IDEOGRAPH-FA06;Lo;0;L;66B4;;;;N;;;;; FA07;CJK COMPATIBILITY IDEOGRAPH-FA07;Lo;0;L;8F3B;;;;N;;;;; FA08;CJK COMPATIBILITY IDEOGRAPH-FA08;Lo;0;L;884C;;;;N;;;;; FA09;CJK COMPATIBILITY IDEOGRAPH-FA09;Lo;0;L;964D;;;;N;;;;; FA0A;CJK COMPATIBILITY IDEOGRAPH-FA0A;Lo;0;L;898B;;;;N;;;;; FA0B;CJK COMPATIBILITY IDEOGRAPH-FA0B;Lo;0;L;5ED3;;;;N;;;;; FA0C;CJK COMPATIBILITY IDEOGRAPH-FA0C;Lo;0;L;5140;;;;N;;;;; FA0D;CJK COMPATIBILITY IDEOGRAPH-FA0D;Lo;0;L;55C0;;;;N;;;;; FA0E;CJK COMPATIBILITY IDEOGRAPH-FA0E;Lo;0;L;;;;;N;;;;; FA0F;CJK COMPATIBILITY IDEOGRAPH-FA0F;Lo;0;L;;;;;N;;;;; FA10;CJK COMPATIBILITY IDEOGRAPH-FA10;Lo;0;L;585A;;;;N;;;;; FA11;CJK COMPATIBILITY IDEOGRAPH-FA11;Lo;0;L;;;;;N;;;;; FA12;CJK COMPATIBILITY IDEOGRAPH-FA12;Lo;0;L;6674;;;;N;;;;; FA13;CJK COMPATIBILITY IDEOGRAPH-FA13;Lo;0;L;;;;;N;;;;; FA14;CJK COMPATIBILITY IDEOGRAPH-FA14;Lo;0;L;;;;;N;;;;; FA15;CJK COMPATIBILITY IDEOGRAPH-FA15;Lo;0;L;51DE;;;;N;;;;; FA16;CJK COMPATIBILITY IDEOGRAPH-FA16;Lo;0;L;732A;;;;N;;;;; FA17;CJK COMPATIBILITY IDEOGRAPH-FA17;Lo;0;L;76CA;;;;N;;;;; FA18;CJK COMPATIBILITY IDEOGRAPH-FA18;Lo;0;L;793C;;;;N;;;;; FA19;CJK COMPATIBILITY IDEOGRAPH-FA19;Lo;0;L;795E;;;;N;;;;; FA1A;CJK COMPATIBILITY IDEOGRAPH-FA1A;Lo;0;L;7965;;;;N;;;;; FA1B;CJK COMPATIBILITY IDEOGRAPH-FA1B;Lo;0;L;798F;;;;N;;;;; FA1C;CJK COMPATIBILITY IDEOGRAPH-FA1C;Lo;0;L;9756;;;;N;;;;; FA1D;CJK COMPATIBILITY IDEOGRAPH-FA1D;Lo;0;L;7CBE;;;;N;;;;; FA1E;CJK COMPATIBILITY IDEOGRAPH-FA1E;Lo;0;L;7FBD;;;;N;;;;; FA1F;CJK COMPATIBILITY IDEOGRAPH-FA1F;Lo;0;L;;;;;N;;*;;; FA20;CJK COMPATIBILITY IDEOGRAPH-FA20;Lo;0;L;8612;;;;N;;;;; FA21;CJK COMPATIBILITY IDEOGRAPH-FA21;Lo;0;L;;;;;N;;;;; FA22;CJK COMPATIBILITY IDEOGRAPH-FA22;Lo;0;L;8AF8;;;;N;;;;; FA23;CJK COMPATIBILITY IDEOGRAPH-FA23;Lo;0;L;;;;;N;;*;;; FA24;CJK COMPATIBILITY IDEOGRAPH-FA24;Lo;0;L;;;;;N;;;;; FA25;CJK COMPATIBILITY IDEOGRAPH-FA25;Lo;0;L;9038;;;;N;;;;; FA26;CJK COMPATIBILITY IDEOGRAPH-FA26;Lo;0;L;90FD;;;;N;;;;; FA27;CJK COMPATIBILITY IDEOGRAPH-FA27;Lo;0;L;;;;;N;;;;; FA28;CJK COMPATIBILITY IDEOGRAPH-FA28;Lo;0;L;;;;;N;;;;; FA29;CJK COMPATIBILITY IDEOGRAPH-FA29;Lo;0;L;;;;;N;;;;; FA2A;CJK COMPATIBILITY IDEOGRAPH-FA2A;Lo;0;L;98EF;;;;N;;;;; FA2B;CJK COMPATIBILITY IDEOGRAPH-FA2B;Lo;0;L;98FC;;;;N;;;;; FA2C;CJK COMPATIBILITY IDEOGRAPH-FA2C;Lo;0;L;9928;;;;N;;;;; FA2D;CJK COMPATIBILITY IDEOGRAPH-FA2D;Lo;0;L;9DB4;;;;N;;;;; FB00;LATIN SMALL LIGATURE FF;Ll;0;L; 0066 0066;;;;N;;;;; FB01;LATIN SMALL LIGATURE FI;Ll;0;L; 0066 0069;;;;N;;;;; FB02;LATIN SMALL LIGATURE FL;Ll;0;L; 0066 006C;;;;N;;;;; FB03;LATIN SMALL LIGATURE FFI;Ll;0;L; 0066 0066 0069;;;;N;;;;; FB04;LATIN SMALL LIGATURE FFL;Ll;0;L; 0066 0066 006C;;;;N;;;;; FB05;LATIN SMALL LIGATURE LONG S T;Ll;0;L; 017F 0074;;;;N;;;;; FB06;LATIN SMALL LIGATURE ST;Ll;0;L; 0073 0074;;;;N;;;;; FB13;ARMENIAN SMALL LIGATURE MEN NOW;Ll;0;L; 0574 0576;;;;N;;;;; FB14;ARMENIAN SMALL LIGATURE MEN ECH;Ll;0;L; 0574 0565;;;;N;;;;; FB15;ARMENIAN SMALL LIGATURE MEN INI;Ll;0;L; 0574 056B;;;;N;;;;; FB16;ARMENIAN SMALL LIGATURE VEW NOW;Ll;0;L; 057E 0576;;;;N;;;;; FB17;ARMENIAN SMALL LIGATURE MEN XEH;Ll;0;L; 0574 056D;;;;N;;;;; FB1D;HEBREW LETTER YOD WITH HIRIQ;Lo;0;R;05D9 05B4;;;;N;;;;; FB1E;HEBREW POINT JUDEO-SPANISH VARIKA;Mn;26;NSM;;;;;N;HEBREW POINT VARIKA;;;; FB1F;HEBREW LIGATURE YIDDISH YOD YOD PATAH;Lo;0;R;05F2 05B7;;;;N;;;;; FB20;HEBREW LETTER ALTERNATIVE AYIN;Lo;0;R; 05E2;;;;N;;;;; FB21;HEBREW LETTER WIDE ALEF;Lo;0;R; 05D0;;;;N;;;;; FB22;HEBREW LETTER WIDE DALET;Lo;0;R; 05D3;;;;N;;;;; FB23;HEBREW LETTER WIDE HE;Lo;0;R; 05D4;;;;N;;;;; FB24;HEBREW LETTER WIDE KAF;Lo;0;R; 05DB;;;;N;;;;; FB25;HEBREW LETTER WIDE LAMED;Lo;0;R; 05DC;;;;N;;;;; FB26;HEBREW LETTER WIDE FINAL MEM;Lo;0;R; 05DD;;;;N;;;;; FB27;HEBREW LETTER WIDE RESH;Lo;0;R; 05E8;;;;N;;;;; FB28;HEBREW LETTER WIDE TAV;Lo;0;R; 05EA;;;;N;;;;; FB29;HEBREW LETTER ALTERNATIVE PLUS SIGN;Sm;0;ET; 002B;;;;N;;;;; FB2A;HEBREW LETTER SHIN WITH SHIN DOT;Lo;0;R;05E9 05C1;;;;N;;;;; FB2B;HEBREW LETTER SHIN WITH SIN DOT;Lo;0;R;05E9 05C2;;;;N;;;;; FB2C;HEBREW LETTER SHIN WITH DAGESH AND SHIN DOT;Lo;0;R;FB49 05C1;;;;N;;;;; FB2D;HEBREW LETTER SHIN WITH DAGESH AND SIN DOT;Lo;0;R;FB49 05C2;;;;N;;;;; FB2E;HEBREW LETTER ALEF WITH PATAH;Lo;0;R;05D0 05B7;;;;N;;;;; FB2F;HEBREW LETTER ALEF WITH QAMATS;Lo;0;R;05D0 05B8;;;;N;;;;; FB30;HEBREW LETTER ALEF WITH MAPIQ;Lo;0;R;05D0 05BC;;;;N;;;;; FB31;HEBREW LETTER BET WITH DAGESH;Lo;0;R;05D1 05BC;;;;N;;;;; FB32;HEBREW LETTER GIMEL WITH DAGESH;Lo;0;R;05D2 05BC;;;;N;;;;; FB33;HEBREW LETTER DALET WITH DAGESH;Lo;0;R;05D3 05BC;;;;N;;;;; FB34;HEBREW LETTER HE WITH MAPIQ;Lo;0;R;05D4 05BC;;;;N;;;;; FB35;HEBREW LETTER VAV WITH DAGESH;Lo;0;R;05D5 05BC;;;;N;;;;; FB36;HEBREW LETTER ZAYIN WITH DAGESH;Lo;0;R;05D6 05BC;;;;N;;;;; FB38;HEBREW LETTER TET WITH DAGESH;Lo;0;R;05D8 05BC;;;;N;;;;; FB39;HEBREW LETTER YOD WITH DAGESH;Lo;0;R;05D9 05BC;;;;N;;;;; FB3A;HEBREW LETTER FINAL KAF WITH DAGESH;Lo;0;R;05DA 05BC;;;;N;;;;; FB3B;HEBREW LETTER KAF WITH DAGESH;Lo;0;R;05DB 05BC;;;;N;;;;; FB3C;HEBREW LETTER LAMED WITH DAGESH;Lo;0;R;05DC 05BC;;;;N;;;;; FB3E;HEBREW LETTER MEM WITH DAGESH;Lo;0;R;05DE 05BC;;;;N;;;;; FB40;HEBREW LETTER NUN WITH DAGESH;Lo;0;R;05E0 05BC;;;;N;;;;; FB41;HEBREW LETTER SAMEKH WITH DAGESH;Lo;0;R;05E1 05BC;;;;N;;;;; FB43;HEBREW LETTER FINAL PE WITH DAGESH;Lo;0;R;05E3 05BC;;;;N;;;;; FB44;HEBREW LETTER PE WITH DAGESH;Lo;0;R;05E4 05BC;;;;N;;;;; FB46;HEBREW LETTER TSADI WITH DAGESH;Lo;0;R;05E6 05BC;;;;N;;;;; FB47;HEBREW LETTER QOF WITH DAGESH;Lo;0;R;05E7 05BC;;;;N;;;;; FB48;HEBREW LETTER RESH WITH DAGESH;Lo;0;R;05E8 05BC;;;;N;;;;; FB49;HEBREW LETTER SHIN WITH DAGESH;Lo;0;R;05E9 05BC;;;;N;;;;; FB4A;HEBREW LETTER TAV WITH DAGESH;Lo;0;R;05EA 05BC;;;;N;;;;; FB4B;HEBREW LETTER VAV WITH HOLAM;Lo;0;R;05D5 05B9;;;;N;;;;; FB4C;HEBREW LETTER BET WITH RAFE;Lo;0;R;05D1 05BF;;;;N;;;;; FB4D;HEBREW LETTER KAF WITH RAFE;Lo;0;R;05DB 05BF;;;;N;;;;; FB4E;HEBREW LETTER PE WITH RAFE;Lo;0;R;05E4 05BF;;;;N;;;;; FB4F;HEBREW LIGATURE ALEF LAMED;Lo;0;R; 05D0 05DC;;;;N;;;;; FB50;ARABIC LETTER ALEF WASLA ISOLATED FORM;Lo;0;AL; 0671;;;;N;;;;; FB51;ARABIC LETTER ALEF WASLA FINAL FORM;Lo;0;AL; 0671;;;;N;;;;; FB52;ARABIC LETTER BEEH ISOLATED FORM;Lo;0;AL; 067B;;;;N;;;;; FB53;ARABIC LETTER BEEH FINAL FORM;Lo;0;AL; 067B;;;;N;;;;; FB54;ARABIC LETTER BEEH INITIAL FORM;Lo;0;AL; 067B;;;;N;;;;; FB55;ARABIC LETTER BEEH MEDIAL FORM;Lo;0;AL; 067B;;;;N;;;;; FB56;ARABIC LETTER PEH ISOLATED FORM;Lo;0;AL; 067E;;;;N;;;;; FB57;ARABIC LETTER PEH FINAL FORM;Lo;0;AL; 067E;;;;N;;;;; FB58;ARABIC LETTER PEH INITIAL FORM;Lo;0;AL; 067E;;;;N;;;;; FB59;ARABIC LETTER PEH MEDIAL FORM;Lo;0;AL; 067E;;;;N;;;;; FB5A;ARABIC LETTER BEHEH ISOLATED FORM;Lo;0;AL; 0680;;;;N;;;;; FB5B;ARABIC LETTER BEHEH FINAL FORM;Lo;0;AL; 0680;;;;N;;;;; FB5C;ARABIC LETTER BEHEH INITIAL FORM;Lo;0;AL; 0680;;;;N;;;;; FB5D;ARABIC LETTER BEHEH MEDIAL FORM;Lo;0;AL; 0680;;;;N;;;;; FB5E;ARABIC LETTER TTEHEH ISOLATED FORM;Lo;0;AL; 067A;;;;N;;;;; FB5F;ARABIC LETTER TTEHEH FINAL FORM;Lo;0;AL; 067A;;;;N;;;;; FB60;ARABIC LETTER TTEHEH INITIAL FORM;Lo;0;AL; 067A;;;;N;;;;; FB61;ARABIC LETTER TTEHEH MEDIAL FORM;Lo;0;AL; 067A;;;;N;;;;; FB62;ARABIC LETTER TEHEH ISOLATED FORM;Lo;0;AL; 067F;;;;N;;;;; FB63;ARABIC LETTER TEHEH FINAL FORM;Lo;0;AL; 067F;;;;N;;;;; FB64;ARABIC LETTER TEHEH INITIAL FORM;Lo;0;AL; 067F;;;;N;;;;; FB65;ARABIC LETTER TEHEH MEDIAL FORM;Lo;0;AL; 067F;;;;N;;;;; FB66;ARABIC LETTER TTEH ISOLATED FORM;Lo;0;AL; 0679;;;;N;;;;; FB67;ARABIC LETTER TTEH FINAL FORM;Lo;0;AL; 0679;;;;N;;;;; FB68;ARABIC LETTER TTEH INITIAL FORM;Lo;0;AL; 0679;;;;N;;;;; FB69;ARABIC LETTER TTEH MEDIAL FORM;Lo;0;AL; 0679;;;;N;;;;; FB6A;ARABIC LETTER VEH ISOLATED FORM;Lo;0;AL; 06A4;;;;N;;;;; FB6B;ARABIC LETTER VEH FINAL FORM;Lo;0;AL; 06A4;;;;N;;;;; FB6C;ARABIC LETTER VEH INITIAL FORM;Lo;0;AL; 06A4;;;;N;;;;; FB6D;ARABIC LETTER VEH MEDIAL FORM;Lo;0;AL; 06A4;;;;N;;;;; FB6E;ARABIC LETTER PEHEH ISOLATED FORM;Lo;0;AL; 06A6;;;;N;;;;; FB6F;ARABIC LETTER PEHEH FINAL FORM;Lo;0;AL; 06A6;;;;N;;;;; FB70;ARABIC LETTER PEHEH INITIAL FORM;Lo;0;AL; 06A6;;;;N;;;;; FB71;ARABIC LETTER PEHEH MEDIAL FORM;Lo;0;AL; 06A6;;;;N;;;;; FB72;ARABIC LETTER DYEH ISOLATED FORM;Lo;0;AL; 0684;;;;N;;;;; FB73;ARABIC LETTER DYEH FINAL FORM;Lo;0;AL; 0684;;;;N;;;;; FB74;ARABIC LETTER DYEH INITIAL FORM;Lo;0;AL; 0684;;;;N;;;;; FB75;ARABIC LETTER DYEH MEDIAL FORM;Lo;0;AL; 0684;;;;N;;;;; FB76;ARABIC LETTER NYEH ISOLATED FORM;Lo;0;AL; 0683;;;;N;;;;; FB77;ARABIC LETTER NYEH FINAL FORM;Lo;0;AL; 0683;;;;N;;;;; FB78;ARABIC LETTER NYEH INITIAL FORM;Lo;0;AL; 0683;;;;N;;;;; FB79;ARABIC LETTER NYEH MEDIAL FORM;Lo;0;AL; 0683;;;;N;;;;; FB7A;ARABIC LETTER TCHEH ISOLATED FORM;Lo;0;AL; 0686;;;;N;;;;; FB7B;ARABIC LETTER TCHEH FINAL FORM;Lo;0;AL; 0686;;;;N;;;;; FB7C;ARABIC LETTER TCHEH INITIAL FORM;Lo;0;AL; 0686;;;;N;;;;; FB7D;ARABIC LETTER TCHEH MEDIAL FORM;Lo;0;AL; 0686;;;;N;;;;; FB7E;ARABIC LETTER TCHEHEH ISOLATED FORM;Lo;0;AL; 0687;;;;N;;;;; FB7F;ARABIC LETTER TCHEHEH FINAL FORM;Lo;0;AL; 0687;;;;N;;;;; FB80;ARABIC LETTER TCHEHEH INITIAL FORM;Lo;0;AL; 0687;;;;N;;;;; FB81;ARABIC LETTER TCHEHEH MEDIAL FORM;Lo;0;AL; 0687;;;;N;;;;; FB82;ARABIC LETTER DDAHAL ISOLATED FORM;Lo;0;AL; 068D;;;;N;;;;; FB83;ARABIC LETTER DDAHAL FINAL FORM;Lo;0;AL; 068D;;;;N;;;;; FB84;ARABIC LETTER DAHAL ISOLATED FORM;Lo;0;AL; 068C;;;;N;;;;; FB85;ARABIC LETTER DAHAL FINAL FORM;Lo;0;AL; 068C;;;;N;;;;; FB86;ARABIC LETTER DUL ISOLATED FORM;Lo;0;AL; 068E;;;;N;;;;; FB87;ARABIC LETTER DUL FINAL FORM;Lo;0;AL; 068E;;;;N;;;;; FB88;ARABIC LETTER DDAL ISOLATED FORM;Lo;0;AL; 0688;;;;N;;;;; FB89;ARABIC LETTER DDAL FINAL FORM;Lo;0;AL; 0688;;;;N;;;;; FB8A;ARABIC LETTER JEH ISOLATED FORM;Lo;0;AL; 0698;;;;N;;;;; FB8B;ARABIC LETTER JEH FINAL FORM;Lo;0;AL; 0698;;;;N;;;;; FB8C;ARABIC LETTER RREH ISOLATED FORM;Lo;0;AL; 0691;;;;N;;;;; FB8D;ARABIC LETTER RREH FINAL FORM;Lo;0;AL; 0691;;;;N;;;;; FB8E;ARABIC LETTER KEHEH ISOLATED FORM;Lo;0;AL; 06A9;;;;N;;;;; FB8F;ARABIC LETTER KEHEH FINAL FORM;Lo;0;AL; 06A9;;;;N;;;;; FB90;ARABIC LETTER KEHEH INITIAL FORM;Lo;0;AL; 06A9;;;;N;;;;; FB91;ARABIC LETTER KEHEH MEDIAL FORM;Lo;0;AL; 06A9;;;;N;;;;; FB92;ARABIC LETTER GAF ISOLATED FORM;Lo;0;AL; 06AF;;;;N;;;;; FB93;ARABIC LETTER GAF FINAL FORM;Lo;0;AL; 06AF;;;;N;;;;; FB94;ARABIC LETTER GAF INITIAL FORM;Lo;0;AL; 06AF;;;;N;;;;; FB95;ARABIC LETTER GAF MEDIAL FORM;Lo;0;AL; 06AF;;;;N;;;;; FB96;ARABIC LETTER GUEH ISOLATED FORM;Lo;0;AL; 06B3;;;;N;;;;; FB97;ARABIC LETTER GUEH FINAL FORM;Lo;0;AL; 06B3;;;;N;;;;; FB98;ARABIC LETTER GUEH INITIAL FORM;Lo;0;AL; 06B3;;;;N;;;;; FB99;ARABIC LETTER GUEH MEDIAL FORM;Lo;0;AL; 06B3;;;;N;;;;; FB9A;ARABIC LETTER NGOEH ISOLATED FORM;Lo;0;AL; 06B1;;;;N;;;;; FB9B;ARABIC LETTER NGOEH FINAL FORM;Lo;0;AL; 06B1;;;;N;;;;; FB9C;ARABIC LETTER NGOEH INITIAL FORM;Lo;0;AL; 06B1;;;;N;;;;; FB9D;ARABIC LETTER NGOEH MEDIAL FORM;Lo;0;AL; 06B1;;;;N;;;;; FB9E;ARABIC LETTER NOON GHUNNA ISOLATED FORM;Lo;0;AL; 06BA;;;;N;;;;; FB9F;ARABIC LETTER NOON GHUNNA FINAL FORM;Lo;0;AL; 06BA;;;;N;;;;; FBA0;ARABIC LETTER RNOON ISOLATED FORM;Lo;0;AL; 06BB;;;;N;;;;; FBA1;ARABIC LETTER RNOON FINAL FORM;Lo;0;AL; 06BB;;;;N;;;;; FBA2;ARABIC LETTER RNOON INITIAL FORM;Lo;0;AL; 06BB;;;;N;;;;; FBA3;ARABIC LETTER RNOON MEDIAL FORM;Lo;0;AL; 06BB;;;;N;;;;; FBA4;ARABIC LETTER HEH WITH YEH ABOVE ISOLATED FORM;Lo;0;AL; 06C0;;;;N;;;;; FBA5;ARABIC LETTER HEH WITH YEH ABOVE FINAL FORM;Lo;0;AL; 06C0;;;;N;;;;; FBA6;ARABIC LETTER HEH GOAL ISOLATED FORM;Lo;0;AL; 06C1;;;;N;;;;; FBA7;ARABIC LETTER HEH GOAL FINAL FORM;Lo;0;AL; 06C1;;;;N;;;;; FBA8;ARABIC LETTER HEH GOAL INITIAL FORM;Lo;0;AL; 06C1;;;;N;;;;; FBA9;ARABIC LETTER HEH GOAL MEDIAL FORM;Lo;0;AL; 06C1;;;;N;;;;; FBAA;ARABIC LETTER HEH DOACHASHMEE ISOLATED FORM;Lo;0;AL; 06BE;;;;N;;;;; FBAB;ARABIC LETTER HEH DOACHASHMEE FINAL FORM;Lo;0;AL; 06BE;;;;N;;;;; FBAC;ARABIC LETTER HEH DOACHASHMEE INITIAL FORM;Lo;0;AL; 06BE;;;;N;;;;; FBAD;ARABIC LETTER HEH DOACHASHMEE MEDIAL FORM;Lo;0;AL; 06BE;;;;N;;;;; FBAE;ARABIC LETTER YEH BARREE ISOLATED FORM;Lo;0;AL; 06D2;;;;N;;;;; FBAF;ARABIC LETTER YEH BARREE FINAL FORM;Lo;0;AL; 06D2;;;;N;;;;; FBB0;ARABIC LETTER YEH BARREE WITH HAMZA ABOVE ISOLATED FORM;Lo;0;AL; 06D3;;;;N;;;;; FBB1;ARABIC LETTER YEH BARREE WITH HAMZA ABOVE FINAL FORM;Lo;0;AL; 06D3;;;;N;;;;; FBD3;ARABIC LETTER NG ISOLATED FORM;Lo;0;AL; 06AD;;;;N;;;;; FBD4;ARABIC LETTER NG FINAL FORM;Lo;0;AL; 06AD;;;;N;;;;; FBD5;ARABIC LETTER NG INITIAL FORM;Lo;0;AL; 06AD;;;;N;;;;; FBD6;ARABIC LETTER NG MEDIAL FORM;Lo;0;AL; 06AD;;;;N;;;;; FBD7;ARABIC LETTER U ISOLATED FORM;Lo;0;AL; 06C7;;;;N;;;;; FBD8;ARABIC LETTER U FINAL FORM;Lo;0;AL; 06C7;;;;N;;;;; FBD9;ARABIC LETTER OE ISOLATED FORM;Lo;0;AL; 06C6;;;;N;;;;; FBDA;ARABIC LETTER OE FINAL FORM;Lo;0;AL; 06C6;;;;N;;;;; FBDB;ARABIC LETTER YU ISOLATED FORM;Lo;0;AL; 06C8;;;;N;;;;; FBDC;ARABIC LETTER YU FINAL FORM;Lo;0;AL; 06C8;;;;N;;;;; FBDD;ARABIC LETTER U WITH HAMZA ABOVE ISOLATED FORM;Lo;0;AL; 0677;;;;N;;;;; FBDE;ARABIC LETTER VE ISOLATED FORM;Lo;0;AL; 06CB;;;;N;;;;; FBDF;ARABIC LETTER VE FINAL FORM;Lo;0;AL; 06CB;;;;N;;;;; FBE0;ARABIC LETTER KIRGHIZ OE ISOLATED FORM;Lo;0;AL; 06C5;;;;N;;;;; FBE1;ARABIC LETTER KIRGHIZ OE FINAL FORM;Lo;0;AL; 06C5;;;;N;;;;; FBE2;ARABIC LETTER KIRGHIZ YU ISOLATED FORM;Lo;0;AL; 06C9;;;;N;;;;; FBE3;ARABIC LETTER KIRGHIZ YU FINAL FORM;Lo;0;AL; 06C9;;;;N;;;;; FBE4;ARABIC LETTER E ISOLATED FORM;Lo;0;AL; 06D0;;;;N;;;;; FBE5;ARABIC LETTER E FINAL FORM;Lo;0;AL; 06D0;;;;N;;;;; FBE6;ARABIC LETTER E INITIAL FORM;Lo;0;AL; 06D0;;;;N;;;;; FBE7;ARABIC LETTER E MEDIAL FORM;Lo;0;AL; 06D0;;;;N;;;;; FBE8;ARABIC LETTER UIGHUR KAZAKH KIRGHIZ ALEF MAKSURA INITIAL FORM;Lo;0;AL; 0649;;;;N;;;;; FBE9;ARABIC LETTER UIGHUR KAZAKH KIRGHIZ ALEF MAKSURA MEDIAL FORM;Lo;0;AL; 0649;;;;N;;;;; FBEA;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH ALEF ISOLATED FORM;Lo;0;AL; 0626 0627;;;;N;;;;; FBEB;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH ALEF FINAL FORM;Lo;0;AL; 0626 0627;;;;N;;;;; FBEC;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH AE ISOLATED FORM;Lo;0;AL; 0626 06D5;;;;N;;;;; FBED;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH AE FINAL FORM;Lo;0;AL; 0626 06D5;;;;N;;;;; FBEE;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH WAW ISOLATED FORM;Lo;0;AL; 0626 0648;;;;N;;;;; FBEF;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH WAW FINAL FORM;Lo;0;AL; 0626 0648;;;;N;;;;; FBF0;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH U ISOLATED FORM;Lo;0;AL; 0626 06C7;;;;N;;;;; FBF1;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH U FINAL FORM;Lo;0;AL; 0626 06C7;;;;N;;;;; FBF2;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH OE ISOLATED FORM;Lo;0;AL; 0626 06C6;;;;N;;;;; FBF3;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH OE FINAL FORM;Lo;0;AL; 0626 06C6;;;;N;;;;; FBF4;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH YU ISOLATED FORM;Lo;0;AL; 0626 06C8;;;;N;;;;; FBF5;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH YU FINAL FORM;Lo;0;AL; 0626 06C8;;;;N;;;;; FBF6;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH E ISOLATED FORM;Lo;0;AL; 0626 06D0;;;;N;;;;; FBF7;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH E FINAL FORM;Lo;0;AL; 0626 06D0;;;;N;;;;; FBF8;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH E INITIAL FORM;Lo;0;AL; 0626 06D0;;;;N;;;;; FBF9;ARABIC LIGATURE UIGHUR KIRGHIZ YEH WITH HAMZA ABOVE WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL; 0626 0649;;;;N;;;;; FBFA;ARABIC LIGATURE UIGHUR KIRGHIZ YEH WITH HAMZA ABOVE WITH ALEF MAKSURA FINAL FORM;Lo;0;AL; 0626 0649;;;;N;;;;; FBFB;ARABIC LIGATURE UIGHUR KIRGHIZ YEH WITH HAMZA ABOVE WITH ALEF MAKSURA INITIAL FORM;Lo;0;AL; 0626 0649;;;;N;;;;; FBFC;ARABIC LETTER FARSI YEH ISOLATED FORM;Lo;0;AL; 06CC;;;;N;;;;; FBFD;ARABIC LETTER FARSI YEH FINAL FORM;Lo;0;AL; 06CC;;;;N;;;;; FBFE;ARABIC LETTER FARSI YEH INITIAL FORM;Lo;0;AL; 06CC;;;;N;;;;; FBFF;ARABIC LETTER FARSI YEH MEDIAL FORM;Lo;0;AL; 06CC;;;;N;;;;; FC00;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH JEEM ISOLATED FORM;Lo;0;AL; 0626 062C;;;;N;;;;; FC01;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH HAH ISOLATED FORM;Lo;0;AL; 0626 062D;;;;N;;;;; FC02;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH MEEM ISOLATED FORM;Lo;0;AL; 0626 0645;;;;N;;;;; FC03;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL; 0626 0649;;;;N;;;;; FC04;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH YEH ISOLATED FORM;Lo;0;AL; 0626 064A;;;;N;;;;; FC05;ARABIC LIGATURE BEH WITH JEEM ISOLATED FORM;Lo;0;AL; 0628 062C;;;;N;;;;; FC06;ARABIC LIGATURE BEH WITH HAH ISOLATED FORM;Lo;0;AL; 0628 062D;;;;N;;;;; FC07;ARABIC LIGATURE BEH WITH KHAH ISOLATED FORM;Lo;0;AL; 0628 062E;;;;N;;;;; FC08;ARABIC LIGATURE BEH WITH MEEM ISOLATED FORM;Lo;0;AL; 0628 0645;;;;N;;;;; FC09;ARABIC LIGATURE BEH WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL; 0628 0649;;;;N;;;;; FC0A;ARABIC LIGATURE BEH WITH YEH ISOLATED FORM;Lo;0;AL; 0628 064A;;;;N;;;;; FC0B;ARABIC LIGATURE TEH WITH JEEM ISOLATED FORM;Lo;0;AL; 062A 062C;;;;N;;;;; FC0C;ARABIC LIGATURE TEH WITH HAH ISOLATED FORM;Lo;0;AL; 062A 062D;;;;N;;;;; FC0D;ARABIC LIGATURE TEH WITH KHAH ISOLATED FORM;Lo;0;AL; 062A 062E;;;;N;;;;; FC0E;ARABIC LIGATURE TEH WITH MEEM ISOLATED FORM;Lo;0;AL; 062A 0645;;;;N;;;;; FC0F;ARABIC LIGATURE TEH WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL; 062A 0649;;;;N;;;;; FC10;ARABIC LIGATURE TEH WITH YEH ISOLATED FORM;Lo;0;AL; 062A 064A;;;;N;;;;; FC11;ARABIC LIGATURE THEH WITH JEEM ISOLATED FORM;Lo;0;AL; 062B 062C;;;;N;;;;; FC12;ARABIC LIGATURE THEH WITH MEEM ISOLATED FORM;Lo;0;AL; 062B 0645;;;;N;;;;; FC13;ARABIC LIGATURE THEH WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL; 062B 0649;;;;N;;;;; FC14;ARABIC LIGATURE THEH WITH YEH ISOLATED FORM;Lo;0;AL; 062B 064A;;;;N;;;;; FC15;ARABIC LIGATURE JEEM WITH HAH ISOLATED FORM;Lo;0;AL; 062C 062D;;;;N;;;;; FC16;ARABIC LIGATURE JEEM WITH MEEM ISOLATED FORM;Lo;0;AL; 062C 0645;;;;N;;;;; FC17;ARABIC LIGATURE HAH WITH JEEM ISOLATED FORM;Lo;0;AL; 062D 062C;;;;N;;;;; FC18;ARABIC LIGATURE HAH WITH MEEM ISOLATED FORM;Lo;0;AL; 062D 0645;;;;N;;;;; FC19;ARABIC LIGATURE KHAH WITH JEEM ISOLATED FORM;Lo;0;AL; 062E 062C;;;;N;;;;; FC1A;ARABIC LIGATURE KHAH WITH HAH ISOLATED FORM;Lo;0;AL; 062E 062D;;;;N;;;;; FC1B;ARABIC LIGATURE KHAH WITH MEEM ISOLATED FORM;Lo;0;AL; 062E 0645;;;;N;;;;; FC1C;ARABIC LIGATURE SEEN WITH JEEM ISOLATED FORM;Lo;0;AL; 0633 062C;;;;N;;;;; FC1D;ARABIC LIGATURE SEEN WITH HAH ISOLATED FORM;Lo;0;AL; 0633 062D;;;;N;;;;; FC1E;ARABIC LIGATURE SEEN WITH KHAH ISOLATED FORM;Lo;0;AL; 0633 062E;;;;N;;;;; FC1F;ARABIC LIGATURE SEEN WITH MEEM ISOLATED FORM;Lo;0;AL; 0633 0645;;;;N;;;;; FC20;ARABIC LIGATURE SAD WITH HAH ISOLATED FORM;Lo;0;AL; 0635 062D;;;;N;;;;; FC21;ARABIC LIGATURE SAD WITH MEEM ISOLATED FORM;Lo;0;AL; 0635 0645;;;;N;;;;; FC22;ARABIC LIGATURE DAD WITH JEEM ISOLATED FORM;Lo;0;AL; 0636 062C;;;;N;;;;; FC23;ARABIC LIGATURE DAD WITH HAH ISOLATED FORM;Lo;0;AL; 0636 062D;;;;N;;;;; FC24;ARABIC LIGATURE DAD WITH KHAH ISOLATED FORM;Lo;0;AL; 0636 062E;;;;N;;;;; FC25;ARABIC LIGATURE DAD WITH MEEM ISOLATED FORM;Lo;0;AL; 0636 0645;;;;N;;;;; FC26;ARABIC LIGATURE TAH WITH HAH ISOLATED FORM;Lo;0;AL; 0637 062D;;;;N;;;;; FC27;ARABIC LIGATURE TAH WITH MEEM ISOLATED FORM;Lo;0;AL; 0637 0645;;;;N;;;;; FC28;ARABIC LIGATURE ZAH WITH MEEM ISOLATED FORM;Lo;0;AL; 0638 0645;;;;N;;;;; FC29;ARABIC LIGATURE AIN WITH JEEM ISOLATED FORM;Lo;0;AL; 0639 062C;;;;N;;;;; FC2A;ARABIC LIGATURE AIN WITH MEEM ISOLATED FORM;Lo;0;AL; 0639 0645;;;;N;;;;; FC2B;ARABIC LIGATURE GHAIN WITH JEEM ISOLATED FORM;Lo;0;AL; 063A 062C;;;;N;;;;; FC2C;ARABIC LIGATURE GHAIN WITH MEEM ISOLATED FORM;Lo;0;AL; 063A 0645;;;;N;;;;; FC2D;ARABIC LIGATURE FEH WITH JEEM ISOLATED FORM;Lo;0;AL; 0641 062C;;;;N;;;;; FC2E;ARABIC LIGATURE FEH WITH HAH ISOLATED FORM;Lo;0;AL; 0641 062D;;;;N;;;;; FC2F;ARABIC LIGATURE FEH WITH KHAH ISOLATED FORM;Lo;0;AL; 0641 062E;;;;N;;;;; FC30;ARABIC LIGATURE FEH WITH MEEM ISOLATED FORM;Lo;0;AL; 0641 0645;;;;N;;;;; FC31;ARABIC LIGATURE FEH WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL; 0641 0649;;;;N;;;;; FC32;ARABIC LIGATURE FEH WITH YEH ISOLATED FORM;Lo;0;AL; 0641 064A;;;;N;;;;; FC33;ARABIC LIGATURE QAF WITH HAH ISOLATED FORM;Lo;0;AL; 0642 062D;;;;N;;;;; FC34;ARABIC LIGATURE QAF WITH MEEM ISOLATED FORM;Lo;0;AL; 0642 0645;;;;N;;;;; FC35;ARABIC LIGATURE QAF WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL; 0642 0649;;;;N;;;;; FC36;ARABIC LIGATURE QAF WITH YEH ISOLATED FORM;Lo;0;AL; 0642 064A;;;;N;;;;; FC37;ARABIC LIGATURE KAF WITH ALEF ISOLATED FORM;Lo;0;AL; 0643 0627;;;;N;;;;; FC38;ARABIC LIGATURE KAF WITH JEEM ISOLATED FORM;Lo;0;AL; 0643 062C;;;;N;;;;; FC39;ARABIC LIGATURE KAF WITH HAH ISOLATED FORM;Lo;0;AL; 0643 062D;;;;N;;;;; FC3A;ARABIC LIGATURE KAF WITH KHAH ISOLATED FORM;Lo;0;AL; 0643 062E;;;;N;;;;; FC3B;ARABIC LIGATURE KAF WITH LAM ISOLATED FORM;Lo;0;AL; 0643 0644;;;;N;;;;; FC3C;ARABIC LIGATURE KAF WITH MEEM ISOLATED FORM;Lo;0;AL; 0643 0645;;;;N;;;;; FC3D;ARABIC LIGATURE KAF WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL; 0643 0649;;;;N;;;;; FC3E;ARABIC LIGATURE KAF WITH YEH ISOLATED FORM;Lo;0;AL; 0643 064A;;;;N;;;;; FC3F;ARABIC LIGATURE LAM WITH JEEM ISOLATED FORM;Lo;0;AL; 0644 062C;;;;N;;;;; FC40;ARABIC LIGATURE LAM WITH HAH ISOLATED FORM;Lo;0;AL; 0644 062D;;;;N;;;;; FC41;ARABIC LIGATURE LAM WITH KHAH ISOLATED FORM;Lo;0;AL; 0644 062E;;;;N;;;;; FC42;ARABIC LIGATURE LAM WITH MEEM ISOLATED FORM;Lo;0;AL; 0644 0645;;;;N;;;;; FC43;ARABIC LIGATURE LAM WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL; 0644 0649;;;;N;;;;; FC44;ARABIC LIGATURE LAM WITH YEH ISOLATED FORM;Lo;0;AL; 0644 064A;;;;N;;;;; FC45;ARABIC LIGATURE MEEM WITH JEEM ISOLATED FORM;Lo;0;AL; 0645 062C;;;;N;;;;; FC46;ARABIC LIGATURE MEEM WITH HAH ISOLATED FORM;Lo;0;AL; 0645 062D;;;;N;;;;; FC47;ARABIC LIGATURE MEEM WITH KHAH ISOLATED FORM;Lo;0;AL; 0645 062E;;;;N;;;;; FC48;ARABIC LIGATURE MEEM WITH MEEM ISOLATED FORM;Lo;0;AL; 0645 0645;;;;N;;;;; FC49;ARABIC LIGATURE MEEM WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL; 0645 0649;;;;N;;;;; FC4A;ARABIC LIGATURE MEEM WITH YEH ISOLATED FORM;Lo;0;AL; 0645 064A;;;;N;;;;; FC4B;ARABIC LIGATURE NOON WITH JEEM ISOLATED FORM;Lo;0;AL; 0646 062C;;;;N;;;;; FC4C;ARABIC LIGATURE NOON WITH HAH ISOLATED FORM;Lo;0;AL; 0646 062D;;;;N;;;;; FC4D;ARABIC LIGATURE NOON WITH KHAH ISOLATED FORM;Lo;0;AL; 0646 062E;;;;N;;;;; FC4E;ARABIC LIGATURE NOON WITH MEEM ISOLATED FORM;Lo;0;AL; 0646 0645;;;;N;;;;; FC4F;ARABIC LIGATURE NOON WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL; 0646 0649;;;;N;;;;; FC50;ARABIC LIGATURE NOON WITH YEH ISOLATED FORM;Lo;0;AL; 0646 064A;;;;N;;;;; FC51;ARABIC LIGATURE HEH WITH JEEM ISOLATED FORM;Lo;0;AL; 0647 062C;;;;N;;;;; FC52;ARABIC LIGATURE HEH WITH MEEM ISOLATED FORM;Lo;0;AL; 0647 0645;;;;N;;;;; FC53;ARABIC LIGATURE HEH WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL; 0647 0649;;;;N;;;;; FC54;ARABIC LIGATURE HEH WITH YEH ISOLATED FORM;Lo;0;AL; 0647 064A;;;;N;;;;; FC55;ARABIC LIGATURE YEH WITH JEEM ISOLATED FORM;Lo;0;AL; 064A 062C;;;;N;;;;; FC56;ARABIC LIGATURE YEH WITH HAH ISOLATED FORM;Lo;0;AL; 064A 062D;;;;N;;;;; FC57;ARABIC LIGATURE YEH WITH KHAH ISOLATED FORM;Lo;0;AL; 064A 062E;;;;N;;;;; FC58;ARABIC LIGATURE YEH WITH MEEM ISOLATED FORM;Lo;0;AL; 064A 0645;;;;N;;;;; FC59;ARABIC LIGATURE YEH WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL; 064A 0649;;;;N;;;;; FC5A;ARABIC LIGATURE YEH WITH YEH ISOLATED FORM;Lo;0;AL; 064A 064A;;;;N;;;;; FC5B;ARABIC LIGATURE THAL WITH SUPERSCRIPT ALEF ISOLATED FORM;Lo;0;AL; 0630 0670;;;;N;;;;; FC5C;ARABIC LIGATURE REH WITH SUPERSCRIPT ALEF ISOLATED FORM;Lo;0;AL; 0631 0670;;;;N;;;;; FC5D;ARABIC LIGATURE ALEF MAKSURA WITH SUPERSCRIPT ALEF ISOLATED FORM;Lo;0;AL; 0649 0670;;;;N;;;;; FC5E;ARABIC LIGATURE SHADDA WITH DAMMATAN ISOLATED FORM;Lo;0;AL; 0020 064C 0651;;;;N;;;;; FC5F;ARABIC LIGATURE SHADDA WITH KASRATAN ISOLATED FORM;Lo;0;AL; 0020 064D 0651;;;;N;;;;; FC60;ARABIC LIGATURE SHADDA WITH FATHA ISOLATED FORM;Lo;0;AL; 0020 064E 0651;;;;N;;;;; FC61;ARABIC LIGATURE SHADDA WITH DAMMA ISOLATED FORM;Lo;0;AL; 0020 064F 0651;;;;N;;;;; FC62;ARABIC LIGATURE SHADDA WITH KASRA ISOLATED FORM;Lo;0;AL; 0020 0650 0651;;;;N;;;;; FC63;ARABIC LIGATURE SHADDA WITH SUPERSCRIPT ALEF ISOLATED FORM;Lo;0;AL; 0020 0651 0670;;;;N;;;;; FC64;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH REH FINAL FORM;Lo;0;AL; 0626 0631;;;;N;;;;; FC65;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH ZAIN FINAL FORM;Lo;0;AL; 0626 0632;;;;N;;;;; FC66;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH MEEM FINAL FORM;Lo;0;AL; 0626 0645;;;;N;;;;; FC67;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH NOON FINAL FORM;Lo;0;AL; 0626 0646;;;;N;;;;; FC68;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH ALEF MAKSURA FINAL FORM;Lo;0;AL; 0626 0649;;;;N;;;;; FC69;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH YEH FINAL FORM;Lo;0;AL; 0626 064A;;;;N;;;;; FC6A;ARABIC LIGATURE BEH WITH REH FINAL FORM;Lo;0;AL; 0628 0631;;;;N;;;;; FC6B;ARABIC LIGATURE BEH WITH ZAIN FINAL FORM;Lo;0;AL; 0628 0632;;;;N;;;;; FC6C;ARABIC LIGATURE BEH WITH MEEM FINAL FORM;Lo;0;AL; 0628 0645;;;;N;;;;; FC6D;ARABIC LIGATURE BEH WITH NOON FINAL FORM;Lo;0;AL; 0628 0646;;;;N;;;;; FC6E;ARABIC LIGATURE BEH WITH ALEF MAKSURA FINAL FORM;Lo;0;AL; 0628 0649;;;;N;;;;; FC6F;ARABIC LIGATURE BEH WITH YEH FINAL FORM;Lo;0;AL; 0628 064A;;;;N;;;;; FC70;ARABIC LIGATURE TEH WITH REH FINAL FORM;Lo;0;AL; 062A 0631;;;;N;;;;; FC71;ARABIC LIGATURE TEH WITH ZAIN FINAL FORM;Lo;0;AL; 062A 0632;;;;N;;;;; FC72;ARABIC LIGATURE TEH WITH MEEM FINAL FORM;Lo;0;AL; 062A 0645;;;;N;;;;; FC73;ARABIC LIGATURE TEH WITH NOON FINAL FORM;Lo;0;AL; 062A 0646;;;;N;;;;; FC74;ARABIC LIGATURE TEH WITH ALEF MAKSURA FINAL FORM;Lo;0;AL; 062A 0649;;;;N;;;;; FC75;ARABIC LIGATURE TEH WITH YEH FINAL FORM;Lo;0;AL; 062A 064A;;;;N;;;;; FC76;ARABIC LIGATURE THEH WITH REH FINAL FORM;Lo;0;AL; 062B 0631;;;;N;;;;; FC77;ARABIC LIGATURE THEH WITH ZAIN FINAL FORM;Lo;0;AL; 062B 0632;;;;N;;;;; FC78;ARABIC LIGATURE THEH WITH MEEM FINAL FORM;Lo;0;AL; 062B 0645;;;;N;;;;; FC79;ARABIC LIGATURE THEH WITH NOON FINAL FORM;Lo;0;AL; 062B 0646;;;;N;;;;; FC7A;ARABIC LIGATURE THEH WITH ALEF MAKSURA FINAL FORM;Lo;0;AL; 062B 0649;;;;N;;;;; FC7B;ARABIC LIGATURE THEH WITH YEH FINAL FORM;Lo;0;AL; 062B 064A;;;;N;;;;; FC7C;ARABIC LIGATURE FEH WITH ALEF MAKSURA FINAL FORM;Lo;0;AL; 0641 0649;;;;N;;;;; FC7D;ARABIC LIGATURE FEH WITH YEH FINAL FORM;Lo;0;AL; 0641 064A;;;;N;;;;; FC7E;ARABIC LIGATURE QAF WITH ALEF MAKSURA FINAL FORM;Lo;0;AL; 0642 0649;;;;N;;;;; FC7F;ARABIC LIGATURE QAF WITH YEH FINAL FORM;Lo;0;AL; 0642 064A;;;;N;;;;; FC80;ARABIC LIGATURE KAF WITH ALEF FINAL FORM;Lo;0;AL; 0643 0627;;;;N;;;;; FC81;ARABIC LIGATURE KAF WITH LAM FINAL FORM;Lo;0;AL; 0643 0644;;;;N;;;;; FC82;ARABIC LIGATURE KAF WITH MEEM FINAL FORM;Lo;0;AL; 0643 0645;;;;N;;;;; FC83;ARABIC LIGATURE KAF WITH ALEF MAKSURA FINAL FORM;Lo;0;AL; 0643 0649;;;;N;;;;; FC84;ARABIC LIGATURE KAF WITH YEH FINAL FORM;Lo;0;AL; 0643 064A;;;;N;;;;; FC85;ARABIC LIGATURE LAM WITH MEEM FINAL FORM;Lo;0;AL; 0644 0645;;;;N;;;;; FC86;ARABIC LIGATURE LAM WITH ALEF MAKSURA FINAL FORM;Lo;0;AL; 0644 0649;;;;N;;;;; FC87;ARABIC LIGATURE LAM WITH YEH FINAL FORM;Lo;0;AL; 0644 064A;;;;N;;;;; FC88;ARABIC LIGATURE MEEM WITH ALEF FINAL FORM;Lo;0;AL; 0645 0627;;;;N;;;;; FC89;ARABIC LIGATURE MEEM WITH MEEM FINAL FORM;Lo;0;AL; 0645 0645;;;;N;;;;; FC8A;ARABIC LIGATURE NOON WITH REH FINAL FORM;Lo;0;AL; 0646 0631;;;;N;;;;; FC8B;ARABIC LIGATURE NOON WITH ZAIN FINAL FORM;Lo;0;AL; 0646 0632;;;;N;;;;; FC8C;ARABIC LIGATURE NOON WITH MEEM FINAL FORM;Lo;0;AL; 0646 0645;;;;N;;;;; FC8D;ARABIC LIGATURE NOON WITH NOON FINAL FORM;Lo;0;AL; 0646 0646;;;;N;;;;; FC8E;ARABIC LIGATURE NOON WITH ALEF MAKSURA FINAL FORM;Lo;0;AL; 0646 0649;;;;N;;;;; FC8F;ARABIC LIGATURE NOON WITH YEH FINAL FORM;Lo;0;AL; 0646 064A;;;;N;;;;; FC90;ARABIC LIGATURE ALEF MAKSURA WITH SUPERSCRIPT ALEF FINAL FORM;Lo;0;AL; 0649 0670;;;;N;;;;; FC91;ARABIC LIGATURE YEH WITH REH FINAL FORM;Lo;0;AL; 064A 0631;;;;N;;;;; FC92;ARABIC LIGATURE YEH WITH ZAIN FINAL FORM;Lo;0;AL; 064A 0632;;;;N;;;;; FC93;ARABIC LIGATURE YEH WITH MEEM FINAL FORM;Lo;0;AL; 064A 0645;;;;N;;;;; FC94;ARABIC LIGATURE YEH WITH NOON FINAL FORM;Lo;0;AL; 064A 0646;;;;N;;;;; FC95;ARABIC LIGATURE YEH WITH ALEF MAKSURA FINAL FORM;Lo;0;AL; 064A 0649;;;;N;;;;; FC96;ARABIC LIGATURE YEH WITH YEH FINAL FORM;Lo;0;AL; 064A 064A;;;;N;;;;; FC97;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH JEEM INITIAL FORM;Lo;0;AL; 0626 062C;;;;N;;;;; FC98;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH HAH INITIAL FORM;Lo;0;AL; 0626 062D;;;;N;;;;; FC99;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH KHAH INITIAL FORM;Lo;0;AL; 0626 062E;;;;N;;;;; FC9A;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH MEEM INITIAL FORM;Lo;0;AL; 0626 0645;;;;N;;;;; FC9B;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH HEH INITIAL FORM;Lo;0;AL; 0626 0647;;;;N;;;;; FC9C;ARABIC LIGATURE BEH WITH JEEM INITIAL FORM;Lo;0;AL; 0628 062C;;;;N;;;;; FC9D;ARABIC LIGATURE BEH WITH HAH INITIAL FORM;Lo;0;AL; 0628 062D;;;;N;;;;; FC9E;ARABIC LIGATURE BEH WITH KHAH INITIAL FORM;Lo;0;AL; 0628 062E;;;;N;;;;; FC9F;ARABIC LIGATURE BEH WITH MEEM INITIAL FORM;Lo;0;AL; 0628 0645;;;;N;;;;; FCA0;ARABIC LIGATURE BEH WITH HEH INITIAL FORM;Lo;0;AL; 0628 0647;;;;N;;;;; FCA1;ARABIC LIGATURE TEH WITH JEEM INITIAL FORM;Lo;0;AL; 062A 062C;;;;N;;;;; FCA2;ARABIC LIGATURE TEH WITH HAH INITIAL FORM;Lo;0;AL; 062A 062D;;;;N;;;;; FCA3;ARABIC LIGATURE TEH WITH KHAH INITIAL FORM;Lo;0;AL; 062A 062E;;;;N;;;;; FCA4;ARABIC LIGATURE TEH WITH MEEM INITIAL FORM;Lo;0;AL; 062A 0645;;;;N;;;;; FCA5;ARABIC LIGATURE TEH WITH HEH INITIAL FORM;Lo;0;AL; 062A 0647;;;;N;;;;; FCA6;ARABIC LIGATURE THEH WITH MEEM INITIAL FORM;Lo;0;AL; 062B 0645;;;;N;;;;; FCA7;ARABIC LIGATURE JEEM WITH HAH INITIAL FORM;Lo;0;AL; 062C 062D;;;;N;;;;; FCA8;ARABIC LIGATURE JEEM WITH MEEM INITIAL FORM;Lo;0;AL; 062C 0645;;;;N;;;;; FCA9;ARABIC LIGATURE HAH WITH JEEM INITIAL FORM;Lo;0;AL; 062D 062C;;;;N;;;;; FCAA;ARABIC LIGATURE HAH WITH MEEM INITIAL FORM;Lo;0;AL; 062D 0645;;;;N;;;;; FCAB;ARABIC LIGATURE KHAH WITH JEEM INITIAL FORM;Lo;0;AL; 062E 062C;;;;N;;;;; FCAC;ARABIC LIGATURE KHAH WITH MEEM INITIAL FORM;Lo;0;AL; 062E 0645;;;;N;;;;; FCAD;ARABIC LIGATURE SEEN WITH JEEM INITIAL FORM;Lo;0;AL; 0633 062C;;;;N;;;;; FCAE;ARABIC LIGATURE SEEN WITH HAH INITIAL FORM;Lo;0;AL; 0633 062D;;;;N;;;;; FCAF;ARABIC LIGATURE SEEN WITH KHAH INITIAL FORM;Lo;0;AL; 0633 062E;;;;N;;;;; FCB0;ARABIC LIGATURE SEEN WITH MEEM INITIAL FORM;Lo;0;AL; 0633 0645;;;;N;;;;; FCB1;ARABIC LIGATURE SAD WITH HAH INITIAL FORM;Lo;0;AL; 0635 062D;;;;N;;;;; FCB2;ARABIC LIGATURE SAD WITH KHAH INITIAL FORM;Lo;0;AL; 0635 062E;;;;N;;;;; FCB3;ARABIC LIGATURE SAD WITH MEEM INITIAL FORM;Lo;0;AL; 0635 0645;;;;N;;;;; FCB4;ARABIC LIGATURE DAD WITH JEEM INITIAL FORM;Lo;0;AL; 0636 062C;;;;N;;;;; FCB5;ARABIC LIGATURE DAD WITH HAH INITIAL FORM;Lo;0;AL; 0636 062D;;;;N;;;;; FCB6;ARABIC LIGATURE DAD WITH KHAH INITIAL FORM;Lo;0;AL; 0636 062E;;;;N;;;;; FCB7;ARABIC LIGATURE DAD WITH MEEM INITIAL FORM;Lo;0;AL; 0636 0645;;;;N;;;;; FCB8;ARABIC LIGATURE TAH WITH HAH INITIAL FORM;Lo;0;AL; 0637 062D;;;;N;;;;; FCB9;ARABIC LIGATURE ZAH WITH MEEM INITIAL FORM;Lo;0;AL; 0638 0645;;;;N;;;;; FCBA;ARABIC LIGATURE AIN WITH JEEM INITIAL FORM;Lo;0;AL; 0639 062C;;;;N;;;;; FCBB;ARABIC LIGATURE AIN WITH MEEM INITIAL FORM;Lo;0;AL; 0639 0645;;;;N;;;;; FCBC;ARABIC LIGATURE GHAIN WITH JEEM INITIAL FORM;Lo;0;AL; 063A 062C;;;;N;;;;; FCBD;ARABIC LIGATURE GHAIN WITH MEEM INITIAL FORM;Lo;0;AL; 063A 0645;;;;N;;;;; FCBE;ARABIC LIGATURE FEH WITH JEEM INITIAL FORM;Lo;0;AL; 0641 062C;;;;N;;;;; FCBF;ARABIC LIGATURE FEH WITH HAH INITIAL FORM;Lo;0;AL; 0641 062D;;;;N;;;;; FCC0;ARABIC LIGATURE FEH WITH KHAH INITIAL FORM;Lo;0;AL; 0641 062E;;;;N;;;;; FCC1;ARABIC LIGATURE FEH WITH MEEM INITIAL FORM;Lo;0;AL; 0641 0645;;;;N;;;;; FCC2;ARABIC LIGATURE QAF WITH HAH INITIAL FORM;Lo;0;AL; 0642 062D;;;;N;;;;; FCC3;ARABIC LIGATURE QAF WITH MEEM INITIAL FORM;Lo;0;AL; 0642 0645;;;;N;;;;; FCC4;ARABIC LIGATURE KAF WITH JEEM INITIAL FORM;Lo;0;AL; 0643 062C;;;;N;;;;; FCC5;ARABIC LIGATURE KAF WITH HAH INITIAL FORM;Lo;0;AL; 0643 062D;;;;N;;;;; FCC6;ARABIC LIGATURE KAF WITH KHAH INITIAL FORM;Lo;0;AL; 0643 062E;;;;N;;;;; FCC7;ARABIC LIGATURE KAF WITH LAM INITIAL FORM;Lo;0;AL; 0643 0644;;;;N;;;;; FCC8;ARABIC LIGATURE KAF WITH MEEM INITIAL FORM;Lo;0;AL; 0643 0645;;;;N;;;;; FCC9;ARABIC LIGATURE LAM WITH JEEM INITIAL FORM;Lo;0;AL; 0644 062C;;;;N;;;;; FCCA;ARABIC LIGATURE LAM WITH HAH INITIAL FORM;Lo;0;AL; 0644 062D;;;;N;;;;; FCCB;ARABIC LIGATURE LAM WITH KHAH INITIAL FORM;Lo;0;AL; 0644 062E;;;;N;;;;; FCCC;ARABIC LIGATURE LAM WITH MEEM INITIAL FORM;Lo;0;AL; 0644 0645;;;;N;;;;; FCCD;ARABIC LIGATURE LAM WITH HEH INITIAL FORM;Lo;0;AL; 0644 0647;;;;N;;;;; FCCE;ARABIC LIGATURE MEEM WITH JEEM INITIAL FORM;Lo;0;AL; 0645 062C;;;;N;;;;; FCCF;ARABIC LIGATURE MEEM WITH HAH INITIAL FORM;Lo;0;AL; 0645 062D;;;;N;;;;; FCD0;ARABIC LIGATURE MEEM WITH KHAH INITIAL FORM;Lo;0;AL; 0645 062E;;;;N;;;;; FCD1;ARABIC LIGATURE MEEM WITH MEEM INITIAL FORM;Lo;0;AL; 0645 0645;;;;N;;;;; FCD2;ARABIC LIGATURE NOON WITH JEEM INITIAL FORM;Lo;0;AL; 0646 062C;;;;N;;;;; FCD3;ARABIC LIGATURE NOON WITH HAH INITIAL FORM;Lo;0;AL; 0646 062D;;;;N;;;;; FCD4;ARABIC LIGATURE NOON WITH KHAH INITIAL FORM;Lo;0;AL; 0646 062E;;;;N;;;;; FCD5;ARABIC LIGATURE NOON WITH MEEM INITIAL FORM;Lo;0;AL; 0646 0645;;;;N;;;;; FCD6;ARABIC LIGATURE NOON WITH HEH INITIAL FORM;Lo;0;AL; 0646 0647;;;;N;;;;; FCD7;ARABIC LIGATURE HEH WITH JEEM INITIAL FORM;Lo;0;AL; 0647 062C;;;;N;;;;; FCD8;ARABIC LIGATURE HEH WITH MEEM INITIAL FORM;Lo;0;AL; 0647 0645;;;;N;;;;; FCD9;ARABIC LIGATURE HEH WITH SUPERSCRIPT ALEF INITIAL FORM;Lo;0;AL; 0647 0670;;;;N;;;;; FCDA;ARABIC LIGATURE YEH WITH JEEM INITIAL FORM;Lo;0;AL; 064A 062C;;;;N;;;;; FCDB;ARABIC LIGATURE YEH WITH HAH INITIAL FORM;Lo;0;AL; 064A 062D;;;;N;;;;; FCDC;ARABIC LIGATURE YEH WITH KHAH INITIAL FORM;Lo;0;AL; 064A 062E;;;;N;;;;; FCDD;ARABIC LIGATURE YEH WITH MEEM INITIAL FORM;Lo;0;AL; 064A 0645;;;;N;;;;; FCDE;ARABIC LIGATURE YEH WITH HEH INITIAL FORM;Lo;0;AL; 064A 0647;;;;N;;;;; FCDF;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH MEEM MEDIAL FORM;Lo;0;AL; 0626 0645;;;;N;;;;; FCE0;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH HEH MEDIAL FORM;Lo;0;AL; 0626 0647;;;;N;;;;; FCE1;ARABIC LIGATURE BEH WITH MEEM MEDIAL FORM;Lo;0;AL; 0628 0645;;;;N;;;;; FCE2;ARABIC LIGATURE BEH WITH HEH MEDIAL FORM;Lo;0;AL; 0628 0647;;;;N;;;;; FCE3;ARABIC LIGATURE TEH WITH MEEM MEDIAL FORM;Lo;0;AL; 062A 0645;;;;N;;;;; FCE4;ARABIC LIGATURE TEH WITH HEH MEDIAL FORM;Lo;0;AL; 062A 0647;;;;N;;;;; FCE5;ARABIC LIGATURE THEH WITH MEEM MEDIAL FORM;Lo;0;AL; 062B 0645;;;;N;;;;; FCE6;ARABIC LIGATURE THEH WITH HEH MEDIAL FORM;Lo;0;AL; 062B 0647;;;;N;;;;; FCE7;ARABIC LIGATURE SEEN WITH MEEM MEDIAL FORM;Lo;0;AL; 0633 0645;;;;N;;;;; FCE8;ARABIC LIGATURE SEEN WITH HEH MEDIAL FORM;Lo;0;AL; 0633 0647;;;;N;;;;; FCE9;ARABIC LIGATURE SHEEN WITH MEEM MEDIAL FORM;Lo;0;AL; 0634 0645;;;;N;;;;; FCEA;ARABIC LIGATURE SHEEN WITH HEH MEDIAL FORM;Lo;0;AL; 0634 0647;;;;N;;;;; FCEB;ARABIC LIGATURE KAF WITH LAM MEDIAL FORM;Lo;0;AL; 0643 0644;;;;N;;;;; FCEC;ARABIC LIGATURE KAF WITH MEEM MEDIAL FORM;Lo;0;AL; 0643 0645;;;;N;;;;; FCED;ARABIC LIGATURE LAM WITH MEEM MEDIAL FORM;Lo;0;AL; 0644 0645;;;;N;;;;; FCEE;ARABIC LIGATURE NOON WITH MEEM MEDIAL FORM;Lo;0;AL; 0646 0645;;;;N;;;;; FCEF;ARABIC LIGATURE NOON WITH HEH MEDIAL FORM;Lo;0;AL; 0646 0647;;;;N;;;;; FCF0;ARABIC LIGATURE YEH WITH MEEM MEDIAL FORM;Lo;0;AL; 064A 0645;;;;N;;;;; FCF1;ARABIC LIGATURE YEH WITH HEH MEDIAL FORM;Lo;0;AL; 064A 0647;;;;N;;;;; FCF2;ARABIC LIGATURE SHADDA WITH FATHA MEDIAL FORM;Lo;0;AL; 0640 064E 0651;;;;N;;;;; FCF3;ARABIC LIGATURE SHADDA WITH DAMMA MEDIAL FORM;Lo;0;AL; 0640 064F 0651;;;;N;;;;; FCF4;ARABIC LIGATURE SHADDA WITH KASRA MEDIAL FORM;Lo;0;AL; 0640 0650 0651;;;;N;;;;; FCF5;ARABIC LIGATURE TAH WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL; 0637 0649;;;;N;;;;; FCF6;ARABIC LIGATURE TAH WITH YEH ISOLATED FORM;Lo;0;AL; 0637 064A;;;;N;;;;; FCF7;ARABIC LIGATURE AIN WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL; 0639 0649;;;;N;;;;; FCF8;ARABIC LIGATURE AIN WITH YEH ISOLATED FORM;Lo;0;AL; 0639 064A;;;;N;;;;; FCF9;ARABIC LIGATURE GHAIN WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL; 063A 0649;;;;N;;;;; FCFA;ARABIC LIGATURE GHAIN WITH YEH ISOLATED FORM;Lo;0;AL; 063A 064A;;;;N;;;;; FCFB;ARABIC LIGATURE SEEN WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL; 0633 0649;;;;N;;;;; FCFC;ARABIC LIGATURE SEEN WITH YEH ISOLATED FORM;Lo;0;AL; 0633 064A;;;;N;;;;; FCFD;ARABIC LIGATURE SHEEN WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL; 0634 0649;;;;N;;;;; FCFE;ARABIC LIGATURE SHEEN WITH YEH ISOLATED FORM;Lo;0;AL; 0634 064A;;;;N;;;;; FCFF;ARABIC LIGATURE HAH WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL; 062D 0649;;;;N;;;;; FD00;ARABIC LIGATURE HAH WITH YEH ISOLATED FORM;Lo;0;AL; 062D 064A;;;;N;;;;; FD01;ARABIC LIGATURE JEEM WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL; 062C 0649;;;;N;;;;; FD02;ARABIC LIGATURE JEEM WITH YEH ISOLATED FORM;Lo;0;AL; 062C 064A;;;;N;;;;; FD03;ARABIC LIGATURE KHAH WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL; 062E 0649;;;;N;;;;; FD04;ARABIC LIGATURE KHAH WITH YEH ISOLATED FORM;Lo;0;AL; 062E 064A;;;;N;;;;; FD05;ARABIC LIGATURE SAD WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL; 0635 0649;;;;N;;;;; FD06;ARABIC LIGATURE SAD WITH YEH ISOLATED FORM;Lo;0;AL; 0635 064A;;;;N;;;;; FD07;ARABIC LIGATURE DAD WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL; 0636 0649;;;;N;;;;; FD08;ARABIC LIGATURE DAD WITH YEH ISOLATED FORM;Lo;0;AL; 0636 064A;;;;N;;;;; FD09;ARABIC LIGATURE SHEEN WITH JEEM ISOLATED FORM;Lo;0;AL; 0634 062C;;;;N;;;;; FD0A;ARABIC LIGATURE SHEEN WITH HAH ISOLATED FORM;Lo;0;AL; 0634 062D;;;;N;;;;; FD0B;ARABIC LIGATURE SHEEN WITH KHAH ISOLATED FORM;Lo;0;AL; 0634 062E;;;;N;;;;; FD0C;ARABIC LIGATURE SHEEN WITH MEEM ISOLATED FORM;Lo;0;AL; 0634 0645;;;;N;;;;; FD0D;ARABIC LIGATURE SHEEN WITH REH ISOLATED FORM;Lo;0;AL; 0634 0631;;;;N;;;;; FD0E;ARABIC LIGATURE SEEN WITH REH ISOLATED FORM;Lo;0;AL; 0633 0631;;;;N;;;;; FD0F;ARABIC LIGATURE SAD WITH REH ISOLATED FORM;Lo;0;AL; 0635 0631;;;;N;;;;; FD10;ARABIC LIGATURE DAD WITH REH ISOLATED FORM;Lo;0;AL; 0636 0631;;;;N;;;;; FD11;ARABIC LIGATURE TAH WITH ALEF MAKSURA FINAL FORM;Lo;0;AL; 0637 0649;;;;N;;;;; FD12;ARABIC LIGATURE TAH WITH YEH FINAL FORM;Lo;0;AL; 0637 064A;;;;N;;;;; FD13;ARABIC LIGATURE AIN WITH ALEF MAKSURA FINAL FORM;Lo;0;AL; 0639 0649;;;;N;;;;; FD14;ARABIC LIGATURE AIN WITH YEH FINAL FORM;Lo;0;AL; 0639 064A;;;;N;;;;; FD15;ARABIC LIGATURE GHAIN WITH ALEF MAKSURA FINAL FORM;Lo;0;AL; 063A 0649;;;;N;;;;; FD16;ARABIC LIGATURE GHAIN WITH YEH FINAL FORM;Lo;0;AL; 063A 064A;;;;N;;;;; FD17;ARABIC LIGATURE SEEN WITH ALEF MAKSURA FINAL FORM;Lo;0;AL; 0633 0649;;;;N;;;;; FD18;ARABIC LIGATURE SEEN WITH YEH FINAL FORM;Lo;0;AL; 0633 064A;;;;N;;;;; FD19;ARABIC LIGATURE SHEEN WITH ALEF MAKSURA FINAL FORM;Lo;0;AL; 0634 0649;;;;N;;;;; FD1A;ARABIC LIGATURE SHEEN WITH YEH FINAL FORM;Lo;0;AL; 0634 064A;;;;N;;;;; FD1B;ARABIC LIGATURE HAH WITH ALEF MAKSURA FINAL FORM;Lo;0;AL; 062D 0649;;;;N;;;;; FD1C;ARABIC LIGATURE HAH WITH YEH FINAL FORM;Lo;0;AL; 062D 064A;;;;N;;;;; FD1D;ARABIC LIGATURE JEEM WITH ALEF MAKSURA FINAL FORM;Lo;0;AL; 062C 0649;;;;N;;;;; FD1E;ARABIC LIGATURE JEEM WITH YEH FINAL FORM;Lo;0;AL; 062C 064A;;;;N;;;;; FD1F;ARABIC LIGATURE KHAH WITH ALEF MAKSURA FINAL FORM;Lo;0;AL; 062E 0649;;;;N;;;;; FD20;ARABIC LIGATURE KHAH WITH YEH FINAL FORM;Lo;0;AL; 062E 064A;;;;N;;;;; FD21;ARABIC LIGATURE SAD WITH ALEF MAKSURA FINAL FORM;Lo;0;AL; 0635 0649;;;;N;;;;; FD22;ARABIC LIGATURE SAD WITH YEH FINAL FORM;Lo;0;AL; 0635 064A;;;;N;;;;; FD23;ARABIC LIGATURE DAD WITH ALEF MAKSURA FINAL FORM;Lo;0;AL; 0636 0649;;;;N;;;;; FD24;ARABIC LIGATURE DAD WITH YEH FINAL FORM;Lo;0;AL; 0636 064A;;;;N;;;;; FD25;ARABIC LIGATURE SHEEN WITH JEEM FINAL FORM;Lo;0;AL; 0634 062C;;;;N;;;;; FD26;ARABIC LIGATURE SHEEN WITH HAH FINAL FORM;Lo;0;AL; 0634 062D;;;;N;;;;; FD27;ARABIC LIGATURE SHEEN WITH KHAH FINAL FORM;Lo;0;AL; 0634 062E;;;;N;;;;; FD28;ARABIC LIGATURE SHEEN WITH MEEM FINAL FORM;Lo;0;AL; 0634 0645;;;;N;;;;; FD29;ARABIC LIGATURE SHEEN WITH REH FINAL FORM;Lo;0;AL; 0634 0631;;;;N;;;;; FD2A;ARABIC LIGATURE SEEN WITH REH FINAL FORM;Lo;0;AL; 0633 0631;;;;N;;;;; FD2B;ARABIC LIGATURE SAD WITH REH FINAL FORM;Lo;0;AL; 0635 0631;;;;N;;;;; FD2C;ARABIC LIGATURE DAD WITH REH FINAL FORM;Lo;0;AL; 0636 0631;;;;N;;;;; FD2D;ARABIC LIGATURE SHEEN WITH JEEM INITIAL FORM;Lo;0;AL; 0634 062C;;;;N;;;;; FD2E;ARABIC LIGATURE SHEEN WITH HAH INITIAL FORM;Lo;0;AL; 0634 062D;;;;N;;;;; FD2F;ARABIC LIGATURE SHEEN WITH KHAH INITIAL FORM;Lo;0;AL; 0634 062E;;;;N;;;;; FD30;ARABIC LIGATURE SHEEN WITH MEEM INITIAL FORM;Lo;0;AL; 0634 0645;;;;N;;;;; FD31;ARABIC LIGATURE SEEN WITH HEH INITIAL FORM;Lo;0;AL; 0633 0647;;;;N;;;;; FD32;ARABIC LIGATURE SHEEN WITH HEH INITIAL FORM;Lo;0;AL; 0634 0647;;;;N;;;;; FD33;ARABIC LIGATURE TAH WITH MEEM INITIAL FORM;Lo;0;AL; 0637 0645;;;;N;;;;; FD34;ARABIC LIGATURE SEEN WITH JEEM MEDIAL FORM;Lo;0;AL; 0633 062C;;;;N;;;;; FD35;ARABIC LIGATURE SEEN WITH HAH MEDIAL FORM;Lo;0;AL; 0633 062D;;;;N;;;;; FD36;ARABIC LIGATURE SEEN WITH KHAH MEDIAL FORM;Lo;0;AL; 0633 062E;;;;N;;;;; FD37;ARABIC LIGATURE SHEEN WITH JEEM MEDIAL FORM;Lo;0;AL; 0634 062C;;;;N;;;;; FD38;ARABIC LIGATURE SHEEN WITH HAH MEDIAL FORM;Lo;0;AL; 0634 062D;;;;N;;;;; FD39;ARABIC LIGATURE SHEEN WITH KHAH MEDIAL FORM;Lo;0;AL; 0634 062E;;;;N;;;;; FD3A;ARABIC LIGATURE TAH WITH MEEM MEDIAL FORM;Lo;0;AL; 0637 0645;;;;N;;;;; FD3B;ARABIC LIGATURE ZAH WITH MEEM MEDIAL FORM;Lo;0;AL; 0638 0645;;;;N;;;;; FD3C;ARABIC LIGATURE ALEF WITH FATHATAN FINAL FORM;Lo;0;AL; 0627 064B;;;;N;;;;; FD3D;ARABIC LIGATURE ALEF WITH FATHATAN ISOLATED FORM;Lo;0;AL; 0627 064B;;;;N;;;;; FD3E;ORNATE LEFT PARENTHESIS;Ps;0;ON;;;;;N;;;;; FD3F;ORNATE RIGHT PARENTHESIS;Pe;0;ON;;;;;N;;;;; FD50;ARABIC LIGATURE TEH WITH JEEM WITH MEEM INITIAL FORM;Lo;0;AL; 062A 062C 0645;;;;N;;;;; FD51;ARABIC LIGATURE TEH WITH HAH WITH JEEM FINAL FORM;Lo;0;AL; 062A 062D 062C;;;;N;;;;; FD52;ARABIC LIGATURE TEH WITH HAH WITH JEEM INITIAL FORM;Lo;0;AL; 062A 062D 062C;;;;N;;;;; FD53;ARABIC LIGATURE TEH WITH HAH WITH MEEM INITIAL FORM;Lo;0;AL; 062A 062D 0645;;;;N;;;;; FD54;ARABIC LIGATURE TEH WITH KHAH WITH MEEM INITIAL FORM;Lo;0;AL; 062A 062E 0645;;;;N;;;;; FD55;ARABIC LIGATURE TEH WITH MEEM WITH JEEM INITIAL FORM;Lo;0;AL; 062A 0645 062C;;;;N;;;;; FD56;ARABIC LIGATURE TEH WITH MEEM WITH HAH INITIAL FORM;Lo;0;AL; 062A 0645 062D;;;;N;;;;; FD57;ARABIC LIGATURE TEH WITH MEEM WITH KHAH INITIAL FORM;Lo;0;AL; 062A 0645 062E;;;;N;;;;; FD58;ARABIC LIGATURE JEEM WITH MEEM WITH HAH FINAL FORM;Lo;0;AL; 062C 0645 062D;;;;N;;;;; FD59;ARABIC LIGATURE JEEM WITH MEEM WITH HAH INITIAL FORM;Lo;0;AL; 062C 0645 062D;;;;N;;;;; FD5A;ARABIC LIGATURE HAH WITH MEEM WITH YEH FINAL FORM;Lo;0;AL; 062D 0645 064A;;;;N;;;;; FD5B;ARABIC LIGATURE HAH WITH MEEM WITH ALEF MAKSURA FINAL FORM;Lo;0;AL; 062D 0645 0649;;;;N;;;;; FD5C;ARABIC LIGATURE SEEN WITH HAH WITH JEEM INITIAL FORM;Lo;0;AL; 0633 062D 062C;;;;N;;;;; FD5D;ARABIC LIGATURE SEEN WITH JEEM WITH HAH INITIAL FORM;Lo;0;AL; 0633 062C 062D;;;;N;;;;; FD5E;ARABIC LIGATURE SEEN WITH JEEM WITH ALEF MAKSURA FINAL FORM;Lo;0;AL; 0633 062C 0649;;;;N;;;;; FD5F;ARABIC LIGATURE SEEN WITH MEEM WITH HAH FINAL FORM;Lo;0;AL; 0633 0645 062D;;;;N;;;;; FD60;ARABIC LIGATURE SEEN WITH MEEM WITH HAH INITIAL FORM;Lo;0;AL; 0633 0645 062D;;;;N;;;;; FD61;ARABIC LIGATURE SEEN WITH MEEM WITH JEEM INITIAL FORM;Lo;0;AL; 0633 0645 062C;;;;N;;;;; FD62;ARABIC LIGATURE SEEN WITH MEEM WITH MEEM FINAL FORM;Lo;0;AL; 0633 0645 0645;;;;N;;;;; FD63;ARABIC LIGATURE SEEN WITH MEEM WITH MEEM INITIAL FORM;Lo;0;AL; 0633 0645 0645;;;;N;;;;; FD64;ARABIC LIGATURE SAD WITH HAH WITH HAH FINAL FORM;Lo;0;AL; 0635 062D 062D;;;;N;;;;; FD65;ARABIC LIGATURE SAD WITH HAH WITH HAH INITIAL FORM;Lo;0;AL; 0635 062D 062D;;;;N;;;;; FD66;ARABIC LIGATURE SAD WITH MEEM WITH MEEM FINAL FORM;Lo;0;AL; 0635 0645 0645;;;;N;;;;; FD67;ARABIC LIGATURE SHEEN WITH HAH WITH MEEM FINAL FORM;Lo;0;AL; 0634 062D 0645;;;;N;;;;; FD68;ARABIC LIGATURE SHEEN WITH HAH WITH MEEM INITIAL FORM;Lo;0;AL; 0634 062D 0645;;;;N;;;;; FD69;ARABIC LIGATURE SHEEN WITH JEEM WITH YEH FINAL FORM;Lo;0;AL; 0634 062C 064A;;;;N;;;;; FD6A;ARABIC LIGATURE SHEEN WITH MEEM WITH KHAH FINAL FORM;Lo;0;AL; 0634 0645 062E;;;;N;;;;; FD6B;ARABIC LIGATURE SHEEN WITH MEEM WITH KHAH INITIAL FORM;Lo;0;AL; 0634 0645 062E;;;;N;;;;; FD6C;ARABIC LIGATURE SHEEN WITH MEEM WITH MEEM FINAL FORM;Lo;0;AL; 0634 0645 0645;;;;N;;;;; FD6D;ARABIC LIGATURE SHEEN WITH MEEM WITH MEEM INITIAL FORM;Lo;0;AL; 0634 0645 0645;;;;N;;;;; FD6E;ARABIC LIGATURE DAD WITH HAH WITH ALEF MAKSURA FINAL FORM;Lo;0;AL; 0636 062D 0649;;;;N;;;;; FD6F;ARABIC LIGATURE DAD WITH KHAH WITH MEEM FINAL FORM;Lo;0;AL; 0636 062E 0645;;;;N;;;;; FD70;ARABIC LIGATURE DAD WITH KHAH WITH MEEM INITIAL FORM;Lo;0;AL; 0636 062E 0645;;;;N;;;;; FD71;ARABIC LIGATURE TAH WITH MEEM WITH HAH FINAL FORM;Lo;0;AL; 0637 0645 062D;;;;N;;;;; FD72;ARABIC LIGATURE TAH WITH MEEM WITH HAH INITIAL FORM;Lo;0;AL; 0637 0645 062D;;;;N;;;;; FD73;ARABIC LIGATURE TAH WITH MEEM WITH MEEM INITIAL FORM;Lo;0;AL; 0637 0645 0645;;;;N;;;;; FD74;ARABIC LIGATURE TAH WITH MEEM WITH YEH FINAL FORM;Lo;0;AL; 0637 0645 064A;;;;N;;;;; FD75;ARABIC LIGATURE AIN WITH JEEM WITH MEEM FINAL FORM;Lo;0;AL; 0639 062C 0645;;;;N;;;;; FD76;ARABIC LIGATURE AIN WITH MEEM WITH MEEM FINAL FORM;Lo;0;AL; 0639 0645 0645;;;;N;;;;; FD77;ARABIC LIGATURE AIN WITH MEEM WITH MEEM INITIAL FORM;Lo;0;AL; 0639 0645 0645;;;;N;;;;; FD78;ARABIC LIGATURE AIN WITH MEEM WITH ALEF MAKSURA FINAL FORM;Lo;0;AL; 0639 0645 0649;;;;N;;;;; FD79;ARABIC LIGATURE GHAIN WITH MEEM WITH MEEM FINAL FORM;Lo;0;AL; 063A 0645 0645;;;;N;;;;; FD7A;ARABIC LIGATURE GHAIN WITH MEEM WITH YEH FINAL FORM;Lo;0;AL; 063A 0645 064A;;;;N;;;;; FD7B;ARABIC LIGATURE GHAIN WITH MEEM WITH ALEF MAKSURA FINAL FORM;Lo;0;AL; 063A 0645 0649;;;;N;;;;; FD7C;ARABIC LIGATURE FEH WITH KHAH WITH MEEM FINAL FORM;Lo;0;AL; 0641 062E 0645;;;;N;;;;; FD7D;ARABIC LIGATURE FEH WITH KHAH WITH MEEM INITIAL FORM;Lo;0;AL; 0641 062E 0645;;;;N;;;;; FD7E;ARABIC LIGATURE QAF WITH MEEM WITH HAH FINAL FORM;Lo;0;AL; 0642 0645 062D;;;;N;;;;; FD7F;ARABIC LIGATURE QAF WITH MEEM WITH MEEM FINAL FORM;Lo;0;AL; 0642 0645 0645;;;;N;;;;; FD80;ARABIC LIGATURE LAM WITH HAH WITH MEEM FINAL FORM;Lo;0;AL; 0644 062D 0645;;;;N;;;;; FD81;ARABIC LIGATURE LAM WITH HAH WITH YEH FINAL FORM;Lo;0;AL; 0644 062D 064A;;;;N;;;;; FD82;ARABIC LIGATURE LAM WITH HAH WITH ALEF MAKSURA FINAL FORM;Lo;0;AL; 0644 062D 0649;;;;N;;;;; FD83;ARABIC LIGATURE LAM WITH JEEM WITH JEEM INITIAL FORM;Lo;0;AL; 0644 062C 062C;;;;N;;;;; FD84;ARABIC LIGATURE LAM WITH JEEM WITH JEEM FINAL FORM;Lo;0;AL; 0644 062C 062C;;;;N;;;;; FD85;ARABIC LIGATURE LAM WITH KHAH WITH MEEM FINAL FORM;Lo;0;AL; 0644 062E 0645;;;;N;;;;; FD86;ARABIC LIGATURE LAM WITH KHAH WITH MEEM INITIAL FORM;Lo;0;AL; 0644 062E 0645;;;;N;;;;; FD87;ARABIC LIGATURE LAM WITH MEEM WITH HAH FINAL FORM;Lo;0;AL; 0644 0645 062D;;;;N;;;;; FD88;ARABIC LIGATURE LAM WITH MEEM WITH HAH INITIAL FORM;Lo;0;AL; 0644 0645 062D;;;;N;;;;; FD89;ARABIC LIGATURE MEEM WITH HAH WITH JEEM INITIAL FORM;Lo;0;AL; 0645 062D 062C;;;;N;;;;; FD8A;ARABIC LIGATURE MEEM WITH HAH WITH MEEM INITIAL FORM;Lo;0;AL; 0645 062D 0645;;;;N;;;;; FD8B;ARABIC LIGATURE MEEM WITH HAH WITH YEH FINAL FORM;Lo;0;AL; 0645 062D 064A;;;;N;;;;; FD8C;ARABIC LIGATURE MEEM WITH JEEM WITH HAH INITIAL FORM;Lo;0;AL; 0645 062C 062D;;;;N;;;;; FD8D;ARABIC LIGATURE MEEM WITH JEEM WITH MEEM INITIAL FORM;Lo;0;AL; 0645 062C 0645;;;;N;;;;; FD8E;ARABIC LIGATURE MEEM WITH KHAH WITH JEEM INITIAL FORM;Lo;0;AL; 0645 062E 062C;;;;N;;;;; FD8F;ARABIC LIGATURE MEEM WITH KHAH WITH MEEM INITIAL FORM;Lo;0;AL; 0645 062E 0645;;;;N;;;;; FD92;ARABIC LIGATURE MEEM WITH JEEM WITH KHAH INITIAL FORM;Lo;0;AL; 0645 062C 062E;;;;N;;;;; FD93;ARABIC LIGATURE HEH WITH MEEM WITH JEEM INITIAL FORM;Lo;0;AL; 0647 0645 062C;;;;N;;;;; FD94;ARABIC LIGATURE HEH WITH MEEM WITH MEEM INITIAL FORM;Lo;0;AL; 0647 0645 0645;;;;N;;;;; FD95;ARABIC LIGATURE NOON WITH HAH WITH MEEM INITIAL FORM;Lo;0;AL; 0646 062D 0645;;;;N;;;;; FD96;ARABIC LIGATURE NOON WITH HAH WITH ALEF MAKSURA FINAL FORM;Lo;0;AL; 0646 062D 0649;;;;N;;;;; FD97;ARABIC LIGATURE NOON WITH JEEM WITH MEEM FINAL FORM;Lo;0;AL; 0646 062C 0645;;;;N;;;;; FD98;ARABIC LIGATURE NOON WITH JEEM WITH MEEM INITIAL FORM;Lo;0;AL; 0646 062C 0645;;;;N;;;;; FD99;ARABIC LIGATURE NOON WITH JEEM WITH ALEF MAKSURA FINAL FORM;Lo;0;AL; 0646 062C 0649;;;;N;;;;; FD9A;ARABIC LIGATURE NOON WITH MEEM WITH YEH FINAL FORM;Lo;0;AL; 0646 0645 064A;;;;N;;;;; FD9B;ARABIC LIGATURE NOON WITH MEEM WITH ALEF MAKSURA FINAL FORM;Lo;0;AL; 0646 0645 0649;;;;N;;;;; FD9C;ARABIC LIGATURE YEH WITH MEEM WITH MEEM FINAL FORM;Lo;0;AL; 064A 0645 0645;;;;N;;;;; FD9D;ARABIC LIGATURE YEH WITH MEEM WITH MEEM INITIAL FORM;Lo;0;AL; 064A 0645 0645;;;;N;;;;; FD9E;ARABIC LIGATURE BEH WITH KHAH WITH YEH FINAL FORM;Lo;0;AL; 0628 062E 064A;;;;N;;;;; FD9F;ARABIC LIGATURE TEH WITH JEEM WITH YEH FINAL FORM;Lo;0;AL; 062A 062C 064A;;;;N;;;;; FDA0;ARABIC LIGATURE TEH WITH JEEM WITH ALEF MAKSURA FINAL FORM;Lo;0;AL; 062A 062C 0649;;;;N;;;;; FDA1;ARABIC LIGATURE TEH WITH KHAH WITH YEH FINAL FORM;Lo;0;AL; 062A 062E 064A;;;;N;;;;; FDA2;ARABIC LIGATURE TEH WITH KHAH WITH ALEF MAKSURA FINAL FORM;Lo;0;AL; 062A 062E 0649;;;;N;;;;; FDA3;ARABIC LIGATURE TEH WITH MEEM WITH YEH FINAL FORM;Lo;0;AL; 062A 0645 064A;;;;N;;;;; FDA4;ARABIC LIGATURE TEH WITH MEEM WITH ALEF MAKSURA FINAL FORM;Lo;0;AL; 062A 0645 0649;;;;N;;;;; FDA5;ARABIC LIGATURE JEEM WITH MEEM WITH YEH FINAL FORM;Lo;0;AL; 062C 0645 064A;;;;N;;;;; FDA6;ARABIC LIGATURE JEEM WITH HAH WITH ALEF MAKSURA FINAL FORM;Lo;0;AL; 062C 062D 0649;;;;N;;;;; FDA7;ARABIC LIGATURE JEEM WITH MEEM WITH ALEF MAKSURA FINAL FORM;Lo;0;AL; 062C 0645 0649;;;;N;;;;; FDA8;ARABIC LIGATURE SEEN WITH KHAH WITH ALEF MAKSURA FINAL FORM;Lo;0;AL; 0633 062E 0649;;;;N;;;;; FDA9;ARABIC LIGATURE SAD WITH HAH WITH YEH FINAL FORM;Lo;0;AL; 0635 062D 064A;;;;N;;;;; FDAA;ARABIC LIGATURE SHEEN WITH HAH WITH YEH FINAL FORM;Lo;0;AL; 0634 062D 064A;;;;N;;;;; FDAB;ARABIC LIGATURE DAD WITH HAH WITH YEH FINAL FORM;Lo;0;AL; 0636 062D 064A;;;;N;;;;; FDAC;ARABIC LIGATURE LAM WITH JEEM WITH YEH FINAL FORM;Lo;0;AL; 0644 062C 064A;;;;N;;;;; FDAD;ARABIC LIGATURE LAM WITH MEEM WITH YEH FINAL FORM;Lo;0;AL; 0644 0645 064A;;;;N;;;;; FDAE;ARABIC LIGATURE YEH WITH HAH WITH YEH FINAL FORM;Lo;0;AL; 064A 062D 064A;;;;N;;;;; FDAF;ARABIC LIGATURE YEH WITH JEEM WITH YEH FINAL FORM;Lo;0;AL; 064A 062C 064A;;;;N;;;;; FDB0;ARABIC LIGATURE YEH WITH MEEM WITH YEH FINAL FORM;Lo;0;AL; 064A 0645 064A;;;;N;;;;; FDB1;ARABIC LIGATURE MEEM WITH MEEM WITH YEH FINAL FORM;Lo;0;AL; 0645 0645 064A;;;;N;;;;; FDB2;ARABIC LIGATURE QAF WITH MEEM WITH YEH FINAL FORM;Lo;0;AL; 0642 0645 064A;;;;N;;;;; FDB3;ARABIC LIGATURE NOON WITH HAH WITH YEH FINAL FORM;Lo;0;AL; 0646 062D 064A;;;;N;;;;; FDB4;ARABIC LIGATURE QAF WITH MEEM WITH HAH INITIAL FORM;Lo;0;AL; 0642 0645 062D;;;;N;;;;; FDB5;ARABIC LIGATURE LAM WITH HAH WITH MEEM INITIAL FORM;Lo;0;AL; 0644 062D 0645;;;;N;;;;; FDB6;ARABIC LIGATURE AIN WITH MEEM WITH YEH FINAL FORM;Lo;0;AL; 0639 0645 064A;;;;N;;;;; FDB7;ARABIC LIGATURE KAF WITH MEEM WITH YEH FINAL FORM;Lo;0;AL; 0643 0645 064A;;;;N;;;;; FDB8;ARABIC LIGATURE NOON WITH JEEM WITH HAH INITIAL FORM;Lo;0;AL; 0646 062C 062D;;;;N;;;;; FDB9;ARABIC LIGATURE MEEM WITH KHAH WITH YEH FINAL FORM;Lo;0;AL; 0645 062E 064A;;;;N;;;;; FDBA;ARABIC LIGATURE LAM WITH JEEM WITH MEEM INITIAL FORM;Lo;0;AL; 0644 062C 0645;;;;N;;;;; FDBB;ARABIC LIGATURE KAF WITH MEEM WITH MEEM FINAL FORM;Lo;0;AL; 0643 0645 0645;;;;N;;;;; FDBC;ARABIC LIGATURE LAM WITH JEEM WITH MEEM FINAL FORM;Lo;0;AL; 0644 062C 0645;;;;N;;;;; FDBD;ARABIC LIGATURE NOON WITH JEEM WITH HAH FINAL FORM;Lo;0;AL; 0646 062C 062D;;;;N;;;;; FDBE;ARABIC LIGATURE JEEM WITH HAH WITH YEH FINAL FORM;Lo;0;AL; 062C 062D 064A;;;;N;;;;; FDBF;ARABIC LIGATURE HAH WITH JEEM WITH YEH FINAL FORM;Lo;0;AL; 062D 062C 064A;;;;N;;;;; FDC0;ARABIC LIGATURE MEEM WITH JEEM WITH YEH FINAL FORM;Lo;0;AL; 0645 062C 064A;;;;N;;;;; FDC1;ARABIC LIGATURE FEH WITH MEEM WITH YEH FINAL FORM;Lo;0;AL; 0641 0645 064A;;;;N;;;;; FDC2;ARABIC LIGATURE BEH WITH HAH WITH YEH FINAL FORM;Lo;0;AL; 0628 062D 064A;;;;N;;;;; FDC3;ARABIC LIGATURE KAF WITH MEEM WITH MEEM INITIAL FORM;Lo;0;AL; 0643 0645 0645;;;;N;;;;; FDC4;ARABIC LIGATURE AIN WITH JEEM WITH MEEM INITIAL FORM;Lo;0;AL; 0639 062C 0645;;;;N;;;;; FDC5;ARABIC LIGATURE SAD WITH MEEM WITH MEEM INITIAL FORM;Lo;0;AL; 0635 0645 0645;;;;N;;;;; FDC6;ARABIC LIGATURE SEEN WITH KHAH WITH YEH FINAL FORM;Lo;0;AL; 0633 062E 064A;;;;N;;;;; FDC7;ARABIC LIGATURE NOON WITH JEEM WITH YEH FINAL FORM;Lo;0;AL; 0646 062C 064A;;;;N;;;;; FDF0;ARABIC LIGATURE SALLA USED AS KORANIC STOP SIGN ISOLATED FORM;Lo;0;AL; 0635 0644 06D2;;;;N;;;;; FDF1;ARABIC LIGATURE QALA USED AS KORANIC STOP SIGN ISOLATED FORM;Lo;0;AL; 0642 0644 06D2;;;;N;;;;; FDF2;ARABIC LIGATURE ALLAH ISOLATED FORM;Lo;0;AL; 0627 0644 0644 0647;;;;N;;;;; FDF3;ARABIC LIGATURE AKBAR ISOLATED FORM;Lo;0;AL; 0627 0643 0628 0631;;;;N;;;;; FDF4;ARABIC LIGATURE MOHAMMAD ISOLATED FORM;Lo;0;AL; 0645 062D 0645 062F;;;;N;;;;; FDF5;ARABIC LIGATURE SALAM ISOLATED FORM;Lo;0;AL; 0635 0644 0639 0645;;;;N;;;;; FDF6;ARABIC LIGATURE RASOUL ISOLATED FORM;Lo;0;AL; 0631 0633 0648 0644;;;;N;;;;; FDF7;ARABIC LIGATURE ALAYHE ISOLATED FORM;Lo;0;AL; 0639 0644 064A 0647;;;;N;;;;; FDF8;ARABIC LIGATURE WASALLAM ISOLATED FORM;Lo;0;AL; 0648 0633 0644 0645;;;;N;;;;; FDF9;ARABIC LIGATURE SALLA ISOLATED FORM;Lo;0;AL; 0635 0644 0649;;;;N;;;;; FDFA;ARABIC LIGATURE SALLALLAHOU ALAYHE WASALLAM;Lo;0;AL; 0635 0644 0649 0020 0627 0644 0644 0647 0020 0639 0644 064A 0647 0020 0648 0633 0644 0645;;;;N;ARABIC LETTER SALLALLAHOU ALAYHE WASALLAM;;;; FDFB;ARABIC LIGATURE JALLAJALALOUHOU;Lo;0;AL; 062C 0644 0020 062C 0644 0627 0644 0647;;;;N;ARABIC LETTER JALLAJALALOUHOU;;;; FE20;COMBINING LIGATURE LEFT HALF;Mn;230;NSM;;;;;N;;;;; FE21;COMBINING LIGATURE RIGHT HALF;Mn;230;NSM;;;;;N;;;;; FE22;COMBINING DOUBLE TILDE LEFT HALF;Mn;230;NSM;;;;;N;;;;; FE23;COMBINING DOUBLE TILDE RIGHT HALF;Mn;230;NSM;;;;;N;;;;; FE30;PRESENTATION FORM FOR VERTICAL TWO DOT LEADER;Po;0;ON; 2025;;;;N;GLYPH FOR VERTICAL TWO DOT LEADER;;;; FE31;PRESENTATION FORM FOR VERTICAL EM DASH;Pd;0;ON; 2014;;;;N;GLYPH FOR VERTICAL EM DASH;;;; FE32;PRESENTATION FORM FOR VERTICAL EN DASH;Pd;0;ON; 2013;;;;N;GLYPH FOR VERTICAL EN DASH;;;; FE33;PRESENTATION FORM FOR VERTICAL LOW LINE;Pc;0;ON; 005F;;;;N;GLYPH FOR VERTICAL SPACING UNDERSCORE;;;; FE34;PRESENTATION FORM FOR VERTICAL WAVY LOW LINE;Pc;0;ON; 005F;;;;N;GLYPH FOR VERTICAL SPACING WAVY UNDERSCORE;;;; FE35;PRESENTATION FORM FOR VERTICAL LEFT PARENTHESIS;Ps;0;ON; 0028;;;;N;GLYPH FOR VERTICAL OPENING PARENTHESIS;;;; FE36;PRESENTATION FORM FOR VERTICAL RIGHT PARENTHESIS;Pe;0;ON; 0029;;;;N;GLYPH FOR VERTICAL CLOSING PARENTHESIS;;;; FE37;PRESENTATION FORM FOR VERTICAL LEFT CURLY BRACKET;Ps;0;ON; 007B;;;;N;GLYPH FOR VERTICAL OPENING CURLY BRACKET;;;; FE38;PRESENTATION FORM FOR VERTICAL RIGHT CURLY BRACKET;Pe;0;ON; 007D;;;;N;GLYPH FOR VERTICAL CLOSING CURLY BRACKET;;;; FE39;PRESENTATION FORM FOR VERTICAL LEFT TORTOISE SHELL BRACKET;Ps;0;ON; 3014;;;;N;GLYPH FOR VERTICAL OPENING TORTOISE SHELL BRACKET;;;; FE3A;PRESENTATION FORM FOR VERTICAL RIGHT TORTOISE SHELL BRACKET;Pe;0;ON; 3015;;;;N;GLYPH FOR VERTICAL CLOSING TORTOISE SHELL BRACKET;;;; FE3B;PRESENTATION FORM FOR VERTICAL LEFT BLACK LENTICULAR BRACKET;Ps;0;ON; 3010;;;;N;GLYPH FOR VERTICAL OPENING BLACK LENTICULAR BRACKET;;;; FE3C;PRESENTATION FORM FOR VERTICAL RIGHT BLACK LENTICULAR BRACKET;Pe;0;ON; 3011;;;;N;GLYPH FOR VERTICAL CLOSING BLACK LENTICULAR BRACKET;;;; FE3D;PRESENTATION FORM FOR VERTICAL LEFT DOUBLE ANGLE BRACKET;Ps;0;ON; 300A;;;;N;GLYPH FOR VERTICAL OPENING DOUBLE ANGLE BRACKET;;;; FE3E;PRESENTATION FORM FOR VERTICAL RIGHT DOUBLE ANGLE BRACKET;Pe;0;ON; 300B;;;;N;GLYPH FOR VERTICAL CLOSING DOUBLE ANGLE BRACKET;;;; FE3F;PRESENTATION FORM FOR VERTICAL LEFT ANGLE BRACKET;Ps;0;ON; 3008;;;;N;GLYPH FOR VERTICAL OPENING ANGLE BRACKET;;;; FE40;PRESENTATION FORM FOR VERTICAL RIGHT ANGLE BRACKET;Pe;0;ON; 3009;;;;N;GLYPH FOR VERTICAL CLOSING ANGLE BRACKET;;;; FE41;PRESENTATION FORM FOR VERTICAL LEFT CORNER BRACKET;Ps;0;ON; 300C;;;;N;GLYPH FOR VERTICAL OPENING CORNER BRACKET;;;; FE42;PRESENTATION FORM FOR VERTICAL RIGHT CORNER BRACKET;Pe;0;ON; 300D;;;;N;GLYPH FOR VERTICAL CLOSING CORNER BRACKET;;;; FE43;PRESENTATION FORM FOR VERTICAL LEFT WHITE CORNER BRACKET;Ps;0;ON; 300E;;;;N;GLYPH FOR VERTICAL OPENING WHITE CORNER BRACKET;;;; FE44;PRESENTATION FORM FOR VERTICAL RIGHT WHITE CORNER BRACKET;Pe;0;ON; 300F;;;;N;GLYPH FOR VERTICAL CLOSING WHITE CORNER BRACKET;;;; FE49;DASHED OVERLINE;Po;0;ON; 203E;;;;N;SPACING DASHED OVERSCORE;;;; FE4A;CENTRELINE OVERLINE;Po;0;ON; 203E;;;;N;SPACING CENTERLINE OVERSCORE;;;; FE4B;WAVY OVERLINE;Po;0;ON; 203E;;;;N;SPACING WAVY OVERSCORE;;;; FE4C;DOUBLE WAVY OVERLINE;Po;0;ON; 203E;;;;N;SPACING DOUBLE WAVY OVERSCORE;;;; FE4D;DASHED LOW LINE;Pc;0;ON; 005F;;;;N;SPACING DASHED UNDERSCORE;;;; FE4E;CENTRELINE LOW LINE;Pc;0;ON; 005F;;;;N;SPACING CENTERLINE UNDERSCORE;;;; FE4F;WAVY LOW LINE;Pc;0;ON; 005F;;;;N;SPACING WAVY UNDERSCORE;;;; FE50;SMALL COMMA;Po;0;CS; 002C;;;;N;;;;; FE51;SMALL IDEOGRAPHIC COMMA;Po;0;ON; 3001;;;;N;;;;; FE52;SMALL FULL STOP;Po;0;CS; 002E;;;;N;SMALL PERIOD;;;; FE54;SMALL SEMICOLON;Po;0;ON; 003B;;;;N;;;;; FE55;SMALL COLON;Po;0;CS; 003A;;;;N;;;;; FE56;SMALL QUESTION MARK;Po;0;ON; 003F;;;;N;;;;; FE57;SMALL EXCLAMATION MARK;Po;0;ON; 0021;;;;N;;;;; FE58;SMALL EM DASH;Pd;0;ON; 2014;;;;N;;;;; FE59;SMALL LEFT PARENTHESIS;Ps;0;ON; 0028;;;;N;SMALL OPENING PARENTHESIS;;;; FE5A;SMALL RIGHT PARENTHESIS;Pe;0;ON; 0029;;;;N;SMALL CLOSING PARENTHESIS;;;; FE5B;SMALL LEFT CURLY BRACKET;Ps;0;ON; 007B;;;;N;SMALL OPENING CURLY BRACKET;;;; FE5C;SMALL RIGHT CURLY BRACKET;Pe;0;ON; 007D;;;;N;SMALL CLOSING CURLY BRACKET;;;; FE5D;SMALL LEFT TORTOISE SHELL BRACKET;Ps;0;ON; 3014;;;;N;SMALL OPENING TORTOISE SHELL BRACKET;;;; FE5E;SMALL RIGHT TORTOISE SHELL BRACKET;Pe;0;ON; 3015;;;;N;SMALL CLOSING TORTOISE SHELL BRACKET;;;; FE5F;SMALL NUMBER SIGN;Po;0;ET; 0023;;;;N;;;;; FE60;SMALL AMPERSAND;Po;0;ON; 0026;;;;N;;;;; FE61;SMALL ASTERISK;Po;0;ON; 002A;;;;N;;;;; FE62;SMALL PLUS SIGN;Sm;0;ET; 002B;;;;N;;;;; FE63;SMALL HYPHEN-MINUS;Pd;0;ET; 002D;;;;N;;;;; FE64;SMALL LESS-THAN SIGN;Sm;0;ON; 003C;;;;N;;;;; FE65;SMALL GREATER-THAN SIGN;Sm;0;ON; 003E;;;;N;;;;; FE66;SMALL EQUALS SIGN;Sm;0;ON; 003D;;;;N;;;;; FE68;SMALL REVERSE SOLIDUS;Po;0;ON; 005C;;;;N;SMALL BACKSLASH;;;; FE69;SMALL DOLLAR SIGN;Sc;0;ET; 0024;;;;N;;;;; FE6A;SMALL PERCENT SIGN;Po;0;ET; 0025;;;;N;;;;; FE6B;SMALL COMMERCIAL AT;Po;0;ON; 0040;;;;N;;;;; FE70;ARABIC FATHATAN ISOLATED FORM;Lo;0;AL; 0020 064B;;;;N;ARABIC SPACING FATHATAN;;;; FE71;ARABIC TATWEEL WITH FATHATAN ABOVE;Lo;0;AL; 0640 064B;;;;N;ARABIC FATHATAN ON TATWEEL;;;; FE72;ARABIC DAMMATAN ISOLATED FORM;Lo;0;AL; 0020 064C;;;;N;ARABIC SPACING DAMMATAN;;;; FE74;ARABIC KASRATAN ISOLATED FORM;Lo;0;AL; 0020 064D;;;;N;ARABIC SPACING KASRATAN;;;; FE76;ARABIC FATHA ISOLATED FORM;Lo;0;AL; 0020 064E;;;;N;ARABIC SPACING FATHAH;;;; FE77;ARABIC FATHA MEDIAL FORM;Lo;0;AL; 0640 064E;;;;N;ARABIC FATHAH ON TATWEEL;;;; FE78;ARABIC DAMMA ISOLATED FORM;Lo;0;AL; 0020 064F;;;;N;ARABIC SPACING DAMMAH;;;; FE79;ARABIC DAMMA MEDIAL FORM;Lo;0;AL; 0640 064F;;;;N;ARABIC DAMMAH ON TATWEEL;;;; FE7A;ARABIC KASRA ISOLATED FORM;Lo;0;AL; 0020 0650;;;;N;ARABIC SPACING KASRAH;;;; FE7B;ARABIC KASRA MEDIAL FORM;Lo;0;AL; 0640 0650;;;;N;ARABIC KASRAH ON TATWEEL;;;; FE7C;ARABIC SHADDA ISOLATED FORM;Lo;0;AL; 0020 0651;;;;N;ARABIC SPACING SHADDAH;;;; FE7D;ARABIC SHADDA MEDIAL FORM;Lo;0;AL; 0640 0651;;;;N;ARABIC SHADDAH ON TATWEEL;;;; FE7E;ARABIC SUKUN ISOLATED FORM;Lo;0;AL; 0020 0652;;;;N;ARABIC SPACING SUKUN;;;; FE7F;ARABIC SUKUN MEDIAL FORM;Lo;0;AL; 0640 0652;;;;N;ARABIC SUKUN ON TATWEEL;;;; FE80;ARABIC LETTER HAMZA ISOLATED FORM;Lo;0;AL; 0621;;;;N;GLYPH FOR ISOLATE ARABIC HAMZAH;;;; FE81;ARABIC LETTER ALEF WITH MADDA ABOVE ISOLATED FORM;Lo;0;AL; 0622;;;;N;GLYPH FOR ISOLATE ARABIC MADDAH ON ALEF;;;; FE82;ARABIC LETTER ALEF WITH MADDA ABOVE FINAL FORM;Lo;0;AL; 0622;;;;N;GLYPH FOR FINAL ARABIC MADDAH ON ALEF;;;; FE83;ARABIC LETTER ALEF WITH HAMZA ABOVE ISOLATED FORM;Lo;0;AL; 0623;;;;N;GLYPH FOR ISOLATE ARABIC HAMZAH ON ALEF;;;; FE84;ARABIC LETTER ALEF WITH HAMZA ABOVE FINAL FORM;Lo;0;AL; 0623;;;;N;GLYPH FOR FINAL ARABIC HAMZAH ON ALEF;;;; FE85;ARABIC LETTER WAW WITH HAMZA ABOVE ISOLATED FORM;Lo;0;AL; 0624;;;;N;GLYPH FOR ISOLATE ARABIC HAMZAH ON WAW;;;; FE86;ARABIC LETTER WAW WITH HAMZA ABOVE FINAL FORM;Lo;0;AL; 0624;;;;N;GLYPH FOR FINAL ARABIC HAMZAH ON WAW;;;; FE87;ARABIC LETTER ALEF WITH HAMZA BELOW ISOLATED FORM;Lo;0;AL; 0625;;;;N;GLYPH FOR ISOLATE ARABIC HAMZAH UNDER ALEF;;;; FE88;ARABIC LETTER ALEF WITH HAMZA BELOW FINAL FORM;Lo;0;AL; 0625;;;;N;GLYPH FOR FINAL ARABIC HAMZAH UNDER ALEF;;;; FE89;ARABIC LETTER YEH WITH HAMZA ABOVE ISOLATED FORM;Lo;0;AL; 0626;;;;N;GLYPH FOR ISOLATE ARABIC HAMZAH ON YA;;;; FE8A;ARABIC LETTER YEH WITH HAMZA ABOVE FINAL FORM;Lo;0;AL; 0626;;;;N;GLYPH FOR FINAL ARABIC HAMZAH ON YA;;;; FE8B;ARABIC LETTER YEH WITH HAMZA ABOVE INITIAL FORM;Lo;0;AL; 0626;;;;N;GLYPH FOR INITIAL ARABIC HAMZAH ON YA;;;; FE8C;ARABIC LETTER YEH WITH HAMZA ABOVE MEDIAL FORM;Lo;0;AL; 0626;;;;N;GLYPH FOR MEDIAL ARABIC HAMZAH ON YA;;;; FE8D;ARABIC LETTER ALEF ISOLATED FORM;Lo;0;AL; 0627;;;;N;GLYPH FOR ISOLATE ARABIC ALEF;;;; FE8E;ARABIC LETTER ALEF FINAL FORM;Lo;0;AL; 0627;;;;N;GLYPH FOR FINAL ARABIC ALEF;;;; FE8F;ARABIC LETTER BEH ISOLATED FORM;Lo;0;AL; 0628;;;;N;GLYPH FOR ISOLATE ARABIC BAA;;;; FE90;ARABIC LETTER BEH FINAL FORM;Lo;0;AL; 0628;;;;N;GLYPH FOR FINAL ARABIC BAA;;;; FE91;ARABIC LETTER BEH INITIAL FORM;Lo;0;AL; 0628;;;;N;GLYPH FOR INITIAL ARABIC BAA;;;; FE92;ARABIC LETTER BEH MEDIAL FORM;Lo;0;AL; 0628;;;;N;GLYPH FOR MEDIAL ARABIC BAA;;;; FE93;ARABIC LETTER TEH MARBUTA ISOLATED FORM;Lo;0;AL; 0629;;;;N;GLYPH FOR ISOLATE ARABIC TAA MARBUTAH;;;; FE94;ARABIC LETTER TEH MARBUTA FINAL FORM;Lo;0;AL; 0629;;;;N;GLYPH FOR FINAL ARABIC TAA MARBUTAH;;;; FE95;ARABIC LETTER TEH ISOLATED FORM;Lo;0;AL; 062A;;;;N;GLYPH FOR ISOLATE ARABIC TAA;;;; FE96;ARABIC LETTER TEH FINAL FORM;Lo;0;AL; 062A;;;;N;GLYPH FOR FINAL ARABIC TAA;;;; FE97;ARABIC LETTER TEH INITIAL FORM;Lo;0;AL; 062A;;;;N;GLYPH FOR INITIAL ARABIC TAA;;;; FE98;ARABIC LETTER TEH MEDIAL FORM;Lo;0;AL; 062A;;;;N;GLYPH FOR MEDIAL ARABIC TAA;;;; FE99;ARABIC LETTER THEH ISOLATED FORM;Lo;0;AL; 062B;;;;N;GLYPH FOR ISOLATE ARABIC THAA;;;; FE9A;ARABIC LETTER THEH FINAL FORM;Lo;0;AL; 062B;;;;N;GLYPH FOR FINAL ARABIC THAA;;;; FE9B;ARABIC LETTER THEH INITIAL FORM;Lo;0;AL; 062B;;;;N;GLYPH FOR INITIAL ARABIC THAA;;;; FE9C;ARABIC LETTER THEH MEDIAL FORM;Lo;0;AL; 062B;;;;N;GLYPH FOR MEDIAL ARABIC THAA;;;; FE9D;ARABIC LETTER JEEM ISOLATED FORM;Lo;0;AL; 062C;;;;N;GLYPH FOR ISOLATE ARABIC JEEM;;;; FE9E;ARABIC LETTER JEEM FINAL FORM;Lo;0;AL; 062C;;;;N;GLYPH FOR FINAL ARABIC JEEM;;;; FE9F;ARABIC LETTER JEEM INITIAL FORM;Lo;0;AL; 062C;;;;N;GLYPH FOR INITIAL ARABIC JEEM;;;; FEA0;ARABIC LETTER JEEM MEDIAL FORM;Lo;0;AL; 062C;;;;N;GLYPH FOR MEDIAL ARABIC JEEM;;;; FEA1;ARABIC LETTER HAH ISOLATED FORM;Lo;0;AL; 062D;;;;N;GLYPH FOR ISOLATE ARABIC HAA;;;; FEA2;ARABIC LETTER HAH FINAL FORM;Lo;0;AL; 062D;;;;N;GLYPH FOR FINAL ARABIC HAA;;;; FEA3;ARABIC LETTER HAH INITIAL FORM;Lo;0;AL; 062D;;;;N;GLYPH FOR INITIAL ARABIC HAA;;;; FEA4;ARABIC LETTER HAH MEDIAL FORM;Lo;0;AL; 062D;;;;N;GLYPH FOR MEDIAL ARABIC HAA;;;; FEA5;ARABIC LETTER KHAH ISOLATED FORM;Lo;0;AL; 062E;;;;N;GLYPH FOR ISOLATE ARABIC KHAA;;;; FEA6;ARABIC LETTER KHAH FINAL FORM;Lo;0;AL; 062E;;;;N;GLYPH FOR FINAL ARABIC KHAA;;;; FEA7;ARABIC LETTER KHAH INITIAL FORM;Lo;0;AL; 062E;;;;N;GLYPH FOR INITIAL ARABIC KHAA;;;; FEA8;ARABIC LETTER KHAH MEDIAL FORM;Lo;0;AL; 062E;;;;N;GLYPH FOR MEDIAL ARABIC KHAA;;;; FEA9;ARABIC LETTER DAL ISOLATED FORM;Lo;0;AL; 062F;;;;N;GLYPH FOR ISOLATE ARABIC DAL;;;; FEAA;ARABIC LETTER DAL FINAL FORM;Lo;0;AL; 062F;;;;N;GLYPH FOR FINAL ARABIC DAL;;;; FEAB;ARABIC LETTER THAL ISOLATED FORM;Lo;0;AL; 0630;;;;N;GLYPH FOR ISOLATE ARABIC THAL;;;; FEAC;ARABIC LETTER THAL FINAL FORM;Lo;0;AL; 0630;;;;N;GLYPH FOR FINAL ARABIC THAL;;;; FEAD;ARABIC LETTER REH ISOLATED FORM;Lo;0;AL; 0631;;;;N;GLYPH FOR ISOLATE ARABIC RA;;;; FEAE;ARABIC LETTER REH FINAL FORM;Lo;0;AL; 0631;;;;N;GLYPH FOR FINAL ARABIC RA;;;; FEAF;ARABIC LETTER ZAIN ISOLATED FORM;Lo;0;AL; 0632;;;;N;GLYPH FOR ISOLATE ARABIC ZAIN;;;; FEB0;ARABIC LETTER ZAIN FINAL FORM;Lo;0;AL; 0632;;;;N;GLYPH FOR FINAL ARABIC ZAIN;;;; FEB1;ARABIC LETTER SEEN ISOLATED FORM;Lo;0;AL; 0633;;;;N;GLYPH FOR ISOLATE ARABIC SEEN;;;; FEB2;ARABIC LETTER SEEN FINAL FORM;Lo;0;AL; 0633;;;;N;GLYPH FOR FINAL ARABIC SEEN;;;; FEB3;ARABIC LETTER SEEN INITIAL FORM;Lo;0;AL; 0633;;;;N;GLYPH FOR INITIAL ARABIC SEEN;;;; FEB4;ARABIC LETTER SEEN MEDIAL FORM;Lo;0;AL; 0633;;;;N;GLYPH FOR MEDIAL ARABIC SEEN;;;; FEB5;ARABIC LETTER SHEEN ISOLATED FORM;Lo;0;AL; 0634;;;;N;GLYPH FOR ISOLATE ARABIC SHEEN;;;; FEB6;ARABIC LETTER SHEEN FINAL FORM;Lo;0;AL; 0634;;;;N;GLYPH FOR FINAL ARABIC SHEEN;;;; FEB7;ARABIC LETTER SHEEN INITIAL FORM;Lo;0;AL; 0634;;;;N;GLYPH FOR INITIAL ARABIC SHEEN;;;; FEB8;ARABIC LETTER SHEEN MEDIAL FORM;Lo;0;AL; 0634;;;;N;GLYPH FOR MEDIAL ARABIC SHEEN;;;; FEB9;ARABIC LETTER SAD ISOLATED FORM;Lo;0;AL; 0635;;;;N;GLYPH FOR ISOLATE ARABIC SAD;;;; FEBA;ARABIC LETTER SAD FINAL FORM;Lo;0;AL; 0635;;;;N;GLYPH FOR FINAL ARABIC SAD;;;; FEBB;ARABIC LETTER SAD INITIAL FORM;Lo;0;AL; 0635;;;;N;GLYPH FOR INITIAL ARABIC SAD;;;; FEBC;ARABIC LETTER SAD MEDIAL FORM;Lo;0;AL; 0635;;;;N;GLYPH FOR MEDIAL ARABIC SAD;;;; FEBD;ARABIC LETTER DAD ISOLATED FORM;Lo;0;AL; 0636;;;;N;GLYPH FOR ISOLATE ARABIC DAD;;;; FEBE;ARABIC LETTER DAD FINAL FORM;Lo;0;AL; 0636;;;;N;GLYPH FOR FINAL ARABIC DAD;;;; FEBF;ARABIC LETTER DAD INITIAL FORM;Lo;0;AL; 0636;;;;N;GLYPH FOR INITIAL ARABIC DAD;;;; FEC0;ARABIC LETTER DAD MEDIAL FORM;Lo;0;AL; 0636;;;;N;GLYPH FOR MEDIAL ARABIC DAD;;;; FEC1;ARABIC LETTER TAH ISOLATED FORM;Lo;0;AL; 0637;;;;N;GLYPH FOR ISOLATE ARABIC TAH;;;; FEC2;ARABIC LETTER TAH FINAL FORM;Lo;0;AL; 0637;;;;N;GLYPH FOR FINAL ARABIC TAH;;;; FEC3;ARABIC LETTER TAH INITIAL FORM;Lo;0;AL; 0637;;;;N;GLYPH FOR INITIAL ARABIC TAH;;;; FEC4;ARABIC LETTER TAH MEDIAL FORM;Lo;0;AL; 0637;;;;N;GLYPH FOR MEDIAL ARABIC TAH;;;; FEC5;ARABIC LETTER ZAH ISOLATED FORM;Lo;0;AL; 0638;;;;N;GLYPH FOR ISOLATE ARABIC DHAH;;;; FEC6;ARABIC LETTER ZAH FINAL FORM;Lo;0;AL; 0638;;;;N;GLYPH FOR FINAL ARABIC DHAH;;;; FEC7;ARABIC LETTER ZAH INITIAL FORM;Lo;0;AL; 0638;;;;N;GLYPH FOR INITIAL ARABIC DHAH;;;; FEC8;ARABIC LETTER ZAH MEDIAL FORM;Lo;0;AL; 0638;;;;N;GLYPH FOR MEDIAL ARABIC DHAH;;;; FEC9;ARABIC LETTER AIN ISOLATED FORM;Lo;0;AL; 0639;;;;N;GLYPH FOR ISOLATE ARABIC AIN;;;; FECA;ARABIC LETTER AIN FINAL FORM;Lo;0;AL; 0639;;;;N;GLYPH FOR FINAL ARABIC AIN;;;; FECB;ARABIC LETTER AIN INITIAL FORM;Lo;0;AL; 0639;;;;N;GLYPH FOR INITIAL ARABIC AIN;;;; FECC;ARABIC LETTER AIN MEDIAL FORM;Lo;0;AL; 0639;;;;N;GLYPH FOR MEDIAL ARABIC AIN;;;; FECD;ARABIC LETTER GHAIN ISOLATED FORM;Lo;0;AL; 063A;;;;N;GLYPH FOR ISOLATE ARABIC GHAIN;;;; FECE;ARABIC LETTER GHAIN FINAL FORM;Lo;0;AL; 063A;;;;N;GLYPH FOR FINAL ARABIC GHAIN;;;; FECF;ARABIC LETTER GHAIN INITIAL FORM;Lo;0;AL; 063A;;;;N;GLYPH FOR INITIAL ARABIC GHAIN;;;; FED0;ARABIC LETTER GHAIN MEDIAL FORM;Lo;0;AL; 063A;;;;N;GLYPH FOR MEDIAL ARABIC GHAIN;;;; FED1;ARABIC LETTER FEH ISOLATED FORM;Lo;0;AL; 0641;;;;N;GLYPH FOR ISOLATE ARABIC FA;;;; FED2;ARABIC LETTER FEH FINAL FORM;Lo;0;AL; 0641;;;;N;GLYPH FOR FINAL ARABIC FA;;;; FED3;ARABIC LETTER FEH INITIAL FORM;Lo;0;AL; 0641;;;;N;GLYPH FOR INITIAL ARABIC FA;;;; FED4;ARABIC LETTER FEH MEDIAL FORM;Lo;0;AL; 0641;;;;N;GLYPH FOR MEDIAL ARABIC FA;;;; FED5;ARABIC LETTER QAF ISOLATED FORM;Lo;0;AL; 0642;;;;N;GLYPH FOR ISOLATE ARABIC QAF;;;; FED6;ARABIC LETTER QAF FINAL FORM;Lo;0;AL; 0642;;;;N;GLYPH FOR FINAL ARABIC QAF;;;; FED7;ARABIC LETTER QAF INITIAL FORM;Lo;0;AL; 0642;;;;N;GLYPH FOR INITIAL ARABIC QAF;;;; FED8;ARABIC LETTER QAF MEDIAL FORM;Lo;0;AL; 0642;;;;N;GLYPH FOR MEDIAL ARABIC QAF;;;; FED9;ARABIC LETTER KAF ISOLATED FORM;Lo;0;AL; 0643;;;;N;GLYPH FOR ISOLATE ARABIC CAF;;;; FEDA;ARABIC LETTER KAF FINAL FORM;Lo;0;AL; 0643;;;;N;GLYPH FOR FINAL ARABIC CAF;;;; FEDB;ARABIC LETTER KAF INITIAL FORM;Lo;0;AL; 0643;;;;N;GLYPH FOR INITIAL ARABIC CAF;;;; FEDC;ARABIC LETTER KAF MEDIAL FORM;Lo;0;AL; 0643;;;;N;GLYPH FOR MEDIAL ARABIC CAF;;;; FEDD;ARABIC LETTER LAM ISOLATED FORM;Lo;0;AL; 0644;;;;N;GLYPH FOR ISOLATE ARABIC LAM;;;; FEDE;ARABIC LETTER LAM FINAL FORM;Lo;0;AL; 0644;;;;N;GLYPH FOR FINAL ARABIC LAM;;;; FEDF;ARABIC LETTER LAM INITIAL FORM;Lo;0;AL; 0644;;;;N;GLYPH FOR INITIAL ARABIC LAM;;;; FEE0;ARABIC LETTER LAM MEDIAL FORM;Lo;0;AL; 0644;;;;N;GLYPH FOR MEDIAL ARABIC LAM;;;; FEE1;ARABIC LETTER MEEM ISOLATED FORM;Lo;0;AL; 0645;;;;N;GLYPH FOR ISOLATE ARABIC MEEM;;;; FEE2;ARABIC LETTER MEEM FINAL FORM;Lo;0;AL; 0645;;;;N;GLYPH FOR FINAL ARABIC MEEM;;;; FEE3;ARABIC LETTER MEEM INITIAL FORM;Lo;0;AL; 0645;;;;N;GLYPH FOR INITIAL ARABIC MEEM;;;; FEE4;ARABIC LETTER MEEM MEDIAL FORM;Lo;0;AL; 0645;;;;N;GLYPH FOR MEDIAL ARABIC MEEM;;;; FEE5;ARABIC LETTER NOON ISOLATED FORM;Lo;0;AL; 0646;;;;N;GLYPH FOR ISOLATE ARABIC NOON;;;; FEE6;ARABIC LETTER NOON FINAL FORM;Lo;0;AL; 0646;;;;N;GLYPH FOR FINAL ARABIC NOON;;;; FEE7;ARABIC LETTER NOON INITIAL FORM;Lo;0;AL; 0646;;;;N;GLYPH FOR INITIAL ARABIC NOON;;;; FEE8;ARABIC LETTER NOON MEDIAL FORM;Lo;0;AL; 0646;;;;N;GLYPH FOR MEDIAL ARABIC NOON;;;; FEE9;ARABIC LETTER HEH ISOLATED FORM;Lo;0;AL; 0647;;;;N;GLYPH FOR ISOLATE ARABIC HA;;;; FEEA;ARABIC LETTER HEH FINAL FORM;Lo;0;AL; 0647;;;;N;GLYPH FOR FINAL ARABIC HA;;;; FEEB;ARABIC LETTER HEH INITIAL FORM;Lo;0;AL; 0647;;;;N;GLYPH FOR INITIAL ARABIC HA;;;; FEEC;ARABIC LETTER HEH MEDIAL FORM;Lo;0;AL; 0647;;;;N;GLYPH FOR MEDIAL ARABIC HA;;;; FEED;ARABIC LETTER WAW ISOLATED FORM;Lo;0;AL; 0648;;;;N;GLYPH FOR ISOLATE ARABIC WAW;;;; FEEE;ARABIC LETTER WAW FINAL FORM;Lo;0;AL; 0648;;;;N;GLYPH FOR FINAL ARABIC WAW;;;; FEEF;ARABIC LETTER ALEF MAKSURA ISOLATED FORM;Lo;0;AL; 0649;;;;N;GLYPH FOR ISOLATE ARABIC ALEF MAQSURAH;;;; FEF0;ARABIC LETTER ALEF MAKSURA FINAL FORM;Lo;0;AL; 0649;;;;N;GLYPH FOR FINAL ARABIC ALEF MAQSURAH;;;; FEF1;ARABIC LETTER YEH ISOLATED FORM;Lo;0;AL; 064A;;;;N;GLYPH FOR ISOLATE ARABIC YA;;;; FEF2;ARABIC LETTER YEH FINAL FORM;Lo;0;AL; 064A;;;;N;GLYPH FOR FINAL ARABIC YA;;;; FEF3;ARABIC LETTER YEH INITIAL FORM;Lo;0;AL; 064A;;;;N;GLYPH FOR INITIAL ARABIC YA;;;; FEF4;ARABIC LETTER YEH MEDIAL FORM;Lo;0;AL; 064A;;;;N;GLYPH FOR MEDIAL ARABIC YA;;;; FEF5;ARABIC LIGATURE LAM WITH ALEF WITH MADDA ABOVE ISOLATED FORM;Lo;0;AL; 0644 0622;;;;N;GLYPH FOR ISOLATE ARABIC MADDAH ON LIGATURE LAM ALEF;;;; FEF6;ARABIC LIGATURE LAM WITH ALEF WITH MADDA ABOVE FINAL FORM;Lo;0;AL; 0644 0622;;;;N;GLYPH FOR FINAL ARABIC MADDAH ON LIGATURE LAM ALEF;;;; FEF7;ARABIC LIGATURE LAM WITH ALEF WITH HAMZA ABOVE ISOLATED FORM;Lo;0;AL; 0644 0623;;;;N;GLYPH FOR ISOLATE ARABIC HAMZAH ON LIGATURE LAM ALEF;;;; FEF8;ARABIC LIGATURE LAM WITH ALEF WITH HAMZA ABOVE FINAL FORM;Lo;0;AL; 0644 0623;;;;N;GLYPH FOR FINAL ARABIC HAMZAH ON LIGATURE LAM ALEF;;;; FEF9;ARABIC LIGATURE LAM WITH ALEF WITH HAMZA BELOW ISOLATED FORM;Lo;0;AL; 0644 0625;;;;N;GLYPH FOR ISOLATE ARABIC HAMZAH UNDER LIGATURE LAM ALEF;;;; FEFA;ARABIC LIGATURE LAM WITH ALEF WITH HAMZA BELOW FINAL FORM;Lo;0;AL; 0644 0625;;;;N;GLYPH FOR FINAL ARABIC HAMZAH UNDER LIGATURE LAM ALEF;;;; FEFB;ARABIC LIGATURE LAM WITH ALEF ISOLATED FORM;Lo;0;AL; 0644 0627;;;;N;GLYPH FOR ISOLATE ARABIC LIGATURE LAM ALEF;;;; FEFC;ARABIC LIGATURE LAM WITH ALEF FINAL FORM;Lo;0;AL; 0644 0627;;;;N;GLYPH FOR FINAL ARABIC LIGATURE LAM ALEF;;;; FEFF;ZERO WIDTH NO-BREAK SPACE;Cf;0;BN;;;;;N;BYTE ORDER MARK;;;; FF01;FULLWIDTH EXCLAMATION MARK;Po;0;ON; 0021;;;;N;;;;; FF02;FULLWIDTH QUOTATION MARK;Po;0;ON; 0022;;;;N;;;;; FF03;FULLWIDTH NUMBER SIGN;Po;0;ET; 0023;;;;N;;;;; FF04;FULLWIDTH DOLLAR SIGN;Sc;0;ET; 0024;;;;N;;;;; FF05;FULLWIDTH PERCENT SIGN;Po;0;ET; 0025;;;;N;;;;; FF06;FULLWIDTH AMPERSAND;Po;0;ON; 0026;;;;N;;;;; FF07;FULLWIDTH APOSTROPHE;Po;0;ON; 0027;;;;N;;;;; FF08;FULLWIDTH LEFT PARENTHESIS;Ps;0;ON; 0028;;;;N;FULLWIDTH OPENING PARENTHESIS;;;; FF09;FULLWIDTH RIGHT PARENTHESIS;Pe;0;ON; 0029;;;;N;FULLWIDTH CLOSING PARENTHESIS;;;; FF0A;FULLWIDTH ASTERISK;Po;0;ON; 002A;;;;N;;;;; FF0B;FULLWIDTH PLUS SIGN;Sm;0;ET; 002B;;;;N;;;;; FF0C;FULLWIDTH COMMA;Po;0;CS; 002C;;;;N;;;;; FF0D;FULLWIDTH HYPHEN-MINUS;Pd;0;ET; 002D;;;;N;;;;; FF0E;FULLWIDTH FULL STOP;Po;0;CS; 002E;;;;N;FULLWIDTH PERIOD;;;; FF0F;FULLWIDTH SOLIDUS;Po;0;ES; 002F;;;;N;FULLWIDTH SLASH;;;; FF10;FULLWIDTH DIGIT ZERO;Nd;0;EN; 0030;0;0;0;N;;;;; FF11;FULLWIDTH DIGIT ONE;Nd;0;EN; 0031;1;1;1;N;;;;; FF12;FULLWIDTH DIGIT TWO;Nd;0;EN; 0032;2;2;2;N;;;;; FF13;FULLWIDTH DIGIT THREE;Nd;0;EN; 0033;3;3;3;N;;;;; FF14;FULLWIDTH DIGIT FOUR;Nd;0;EN; 0034;4;4;4;N;;;;; FF15;FULLWIDTH DIGIT FIVE;Nd;0;EN; 0035;5;5;5;N;;;;; FF16;FULLWIDTH DIGIT SIX;Nd;0;EN; 0036;6;6;6;N;;;;; FF17;FULLWIDTH DIGIT SEVEN;Nd;0;EN; 0037;7;7;7;N;;;;; FF18;FULLWIDTH DIGIT EIGHT;Nd;0;EN; 0038;8;8;8;N;;;;; FF19;FULLWIDTH DIGIT NINE;Nd;0;EN; 0039;9;9;9;N;;;;; FF1A;FULLWIDTH COLON;Po;0;CS; 003A;;;;N;;;;; FF1B;FULLWIDTH SEMICOLON;Po;0;ON; 003B;;;;N;;;;; FF1C;FULLWIDTH LESS-THAN SIGN;Sm;0;ON; 003C;;;;N;;;;; FF1D;FULLWIDTH EQUALS SIGN;Sm;0;ON; 003D;;;;N;;;;; FF1E;FULLWIDTH GREATER-THAN SIGN;Sm;0;ON; 003E;;;;N;;;;; FF1F;FULLWIDTH QUESTION MARK;Po;0;ON; 003F;;;;N;;;;; FF20;FULLWIDTH COMMERCIAL AT;Po;0;ON; 0040;;;;N;;;;; FF21;FULLWIDTH LATIN CAPITAL LETTER A;Lu;0;L; 0041;;;;N;;;;FF41; FF22;FULLWIDTH LATIN CAPITAL LETTER B;Lu;0;L; 0042;;;;N;;;;FF42; FF23;FULLWIDTH LATIN CAPITAL LETTER C;Lu;0;L; 0043;;;;N;;;;FF43; FF24;FULLWIDTH LATIN CAPITAL LETTER D;Lu;0;L; 0044;;;;N;;;;FF44; FF25;FULLWIDTH LATIN CAPITAL LETTER E;Lu;0;L; 0045;;;;N;;;;FF45; FF26;FULLWIDTH LATIN CAPITAL LETTER F;Lu;0;L; 0046;;;;N;;;;FF46; FF27;FULLWIDTH LATIN CAPITAL LETTER G;Lu;0;L; 0047;;;;N;;;;FF47; FF28;FULLWIDTH LATIN CAPITAL LETTER H;Lu;0;L; 0048;;;;N;;;;FF48; FF29;FULLWIDTH LATIN CAPITAL LETTER I;Lu;0;L; 0049;;;;N;;;;FF49; FF2A;FULLWIDTH LATIN CAPITAL LETTER J;Lu;0;L; 004A;;;;N;;;;FF4A; FF2B;FULLWIDTH LATIN CAPITAL LETTER K;Lu;0;L; 004B;;;;N;;;;FF4B; FF2C;FULLWIDTH LATIN CAPITAL LETTER L;Lu;0;L; 004C;;;;N;;;;FF4C; FF2D;FULLWIDTH LATIN CAPITAL LETTER M;Lu;0;L; 004D;;;;N;;;;FF4D; FF2E;FULLWIDTH LATIN CAPITAL LETTER N;Lu;0;L; 004E;;;;N;;;;FF4E; FF2F;FULLWIDTH LATIN CAPITAL LETTER O;Lu;0;L; 004F;;;;N;;;;FF4F; FF30;FULLWIDTH LATIN CAPITAL LETTER P;Lu;0;L; 0050;;;;N;;;;FF50; FF31;FULLWIDTH LATIN CAPITAL LETTER Q;Lu;0;L; 0051;;;;N;;;;FF51; FF32;FULLWIDTH LATIN CAPITAL LETTER R;Lu;0;L; 0052;;;;N;;;;FF52; FF33;FULLWIDTH LATIN CAPITAL LETTER S;Lu;0;L; 0053;;;;N;;;;FF53; FF34;FULLWIDTH LATIN CAPITAL LETTER T;Lu;0;L; 0054;;;;N;;;;FF54; FF35;FULLWIDTH LATIN CAPITAL LETTER U;Lu;0;L; 0055;;;;N;;;;FF55; FF36;FULLWIDTH LATIN CAPITAL LETTER V;Lu;0;L; 0056;;;;N;;;;FF56; FF37;FULLWIDTH LATIN CAPITAL LETTER W;Lu;0;L; 0057;;;;N;;;;FF57; FF38;FULLWIDTH LATIN CAPITAL LETTER X;Lu;0;L; 0058;;;;N;;;;FF58; FF39;FULLWIDTH LATIN CAPITAL LETTER Y;Lu;0;L; 0059;;;;N;;;;FF59; FF3A;FULLWIDTH LATIN CAPITAL LETTER Z;Lu;0;L; 005A;;;;N;;;;FF5A; FF3B;FULLWIDTH LEFT SQUARE BRACKET;Ps;0;ON; 005B;;;;N;FULLWIDTH OPENING SQUARE BRACKET;;;; FF3C;FULLWIDTH REVERSE SOLIDUS;Po;0;ON; 005C;;;;N;FULLWIDTH BACKSLASH;;;; FF3D;FULLWIDTH RIGHT SQUARE BRACKET;Pe;0;ON; 005D;;;;N;FULLWIDTH CLOSING SQUARE BRACKET;;;; FF3E;FULLWIDTH CIRCUMFLEX ACCENT;Sk;0;ON; 005E;;;;N;FULLWIDTH SPACING CIRCUMFLEX;;;; FF3F;FULLWIDTH LOW LINE;Pc;0;ON; 005F;;;;N;FULLWIDTH SPACING UNDERSCORE;;;; FF40;FULLWIDTH GRAVE ACCENT;Sk;0;ON; 0060;;;;N;FULLWIDTH SPACING GRAVE;;;; FF41;FULLWIDTH LATIN SMALL LETTER A;Ll;0;L; 0061;;;;N;;;FF21;;FF21 FF42;FULLWIDTH LATIN SMALL LETTER B;Ll;0;L; 0062;;;;N;;;FF22;;FF22 FF43;FULLWIDTH LATIN SMALL LETTER C;Ll;0;L; 0063;;;;N;;;FF23;;FF23 FF44;FULLWIDTH LATIN SMALL LETTER D;Ll;0;L; 0064;;;;N;;;FF24;;FF24 FF45;FULLWIDTH LATIN SMALL LETTER E;Ll;0;L; 0065;;;;N;;;FF25;;FF25 FF46;FULLWIDTH LATIN SMALL LETTER F;Ll;0;L; 0066;;;;N;;;FF26;;FF26 FF47;FULLWIDTH LATIN SMALL LETTER G;Ll;0;L; 0067;;;;N;;;FF27;;FF27 FF48;FULLWIDTH LATIN SMALL LETTER H;Ll;0;L; 0068;;;;N;;;FF28;;FF28 FF49;FULLWIDTH LATIN SMALL LETTER I;Ll;0;L; 0069;;;;N;;;FF29;;FF29 FF4A;FULLWIDTH LATIN SMALL LETTER J;Ll;0;L; 006A;;;;N;;;FF2A;;FF2A FF4B;FULLWIDTH LATIN SMALL LETTER K;Ll;0;L; 006B;;;;N;;;FF2B;;FF2B FF4C;FULLWIDTH LATIN SMALL LETTER L;Ll;0;L; 006C;;;;N;;;FF2C;;FF2C FF4D;FULLWIDTH LATIN SMALL LETTER M;Ll;0;L; 006D;;;;N;;;FF2D;;FF2D FF4E;FULLWIDTH LATIN SMALL LETTER N;Ll;0;L; 006E;;;;N;;;FF2E;;FF2E FF4F;FULLWIDTH LATIN SMALL LETTER O;Ll;0;L; 006F;;;;N;;;FF2F;;FF2F FF50;FULLWIDTH LATIN SMALL LETTER P;Ll;0;L; 0070;;;;N;;;FF30;;FF30 FF51;FULLWIDTH LATIN SMALL LETTER Q;Ll;0;L; 0071;;;;N;;;FF31;;FF31 FF52;FULLWIDTH LATIN SMALL LETTER R;Ll;0;L; 0072;;;;N;;;FF32;;FF32 FF53;FULLWIDTH LATIN SMALL LETTER S;Ll;0;L; 0073;;;;N;;;FF33;;FF33 FF54;FULLWIDTH LATIN SMALL LETTER T;Ll;0;L; 0074;;;;N;;;FF34;;FF34 FF55;FULLWIDTH LATIN SMALL LETTER U;Ll;0;L; 0075;;;;N;;;FF35;;FF35 FF56;FULLWIDTH LATIN SMALL LETTER V;Ll;0;L; 0076;;;;N;;;FF36;;FF36 FF57;FULLWIDTH LATIN SMALL LETTER W;Ll;0;L; 0077;;;;N;;;FF37;;FF37 FF58;FULLWIDTH LATIN SMALL LETTER X;Ll;0;L; 0078;;;;N;;;FF38;;FF38 FF59;FULLWIDTH LATIN SMALL LETTER Y;Ll;0;L; 0079;;;;N;;;FF39;;FF39 FF5A;FULLWIDTH LATIN SMALL LETTER Z;Ll;0;L; 007A;;;;N;;;FF3A;;FF3A FF5B;FULLWIDTH LEFT CURLY BRACKET;Ps;0;ON; 007B;;;;N;FULLWIDTH OPENING CURLY BRACKET;;;; FF5C;FULLWIDTH VERTICAL LINE;Sm;0;ON; 007C;;;;N;FULLWIDTH VERTICAL BAR;;;; FF5D;FULLWIDTH RIGHT CURLY BRACKET;Pe;0;ON; 007D;;;;N;FULLWIDTH CLOSING CURLY BRACKET;;;; FF5E;FULLWIDTH TILDE;Sm;0;ON; 007E;;;;N;FULLWIDTH SPACING TILDE;;;; FF61;HALFWIDTH IDEOGRAPHIC FULL STOP;Po;0;ON; 3002;;;;N;HALFWIDTH IDEOGRAPHIC PERIOD;;;; FF62;HALFWIDTH LEFT CORNER BRACKET;Ps;0;ON; 300C;;;;N;HALFWIDTH OPENING CORNER BRACKET;;;; FF63;HALFWIDTH RIGHT CORNER BRACKET;Pe;0;ON; 300D;;;;N;HALFWIDTH CLOSING CORNER BRACKET;;;; FF64;HALFWIDTH IDEOGRAPHIC COMMA;Po;0;ON; 3001;;;;N;;;;; FF65;HALFWIDTH KATAKANA MIDDLE DOT;Pc;0;ON; 30FB;;;;N;;;;; FF66;HALFWIDTH KATAKANA LETTER WO;Lo;0;L; 30F2;;;;N;;;;; FF67;HALFWIDTH KATAKANA LETTER SMALL A;Lo;0;L; 30A1;;;;N;;;;; FF68;HALFWIDTH KATAKANA LETTER SMALL I;Lo;0;L; 30A3;;;;N;;;;; FF69;HALFWIDTH KATAKANA LETTER SMALL U;Lo;0;L; 30A5;;;;N;;;;; FF6A;HALFWIDTH KATAKANA LETTER SMALL E;Lo;0;L; 30A7;;;;N;;;;; FF6B;HALFWIDTH KATAKANA LETTER SMALL O;Lo;0;L; 30A9;;;;N;;;;; FF6C;HALFWIDTH KATAKANA LETTER SMALL YA;Lo;0;L; 30E3;;;;N;;;;; FF6D;HALFWIDTH KATAKANA LETTER SMALL YU;Lo;0;L; 30E5;;;;N;;;;; FF6E;HALFWIDTH KATAKANA LETTER SMALL YO;Lo;0;L; 30E7;;;;N;;;;; FF6F;HALFWIDTH KATAKANA LETTER SMALL TU;Lo;0;L; 30C3;;;;N;;;;; FF70;HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK;Lm;0;L; 30FC;;;;N;;;;; FF71;HALFWIDTH KATAKANA LETTER A;Lo;0;L; 30A2;;;;N;;;;; FF72;HALFWIDTH KATAKANA LETTER I;Lo;0;L; 30A4;;;;N;;;;; FF73;HALFWIDTH KATAKANA LETTER U;Lo;0;L; 30A6;;;;N;;;;; FF74;HALFWIDTH KATAKANA LETTER E;Lo;0;L; 30A8;;;;N;;;;; FF75;HALFWIDTH KATAKANA LETTER O;Lo;0;L; 30AA;;;;N;;;;; FF76;HALFWIDTH KATAKANA LETTER KA;Lo;0;L; 30AB;;;;N;;;;; FF77;HALFWIDTH KATAKANA LETTER KI;Lo;0;L; 30AD;;;;N;;;;; FF78;HALFWIDTH KATAKANA LETTER KU;Lo;0;L; 30AF;;;;N;;;;; FF79;HALFWIDTH KATAKANA LETTER KE;Lo;0;L; 30B1;;;;N;;;;; FF7A;HALFWIDTH KATAKANA LETTER KO;Lo;0;L; 30B3;;;;N;;;;; FF7B;HALFWIDTH KATAKANA LETTER SA;Lo;0;L; 30B5;;;;N;;;;; FF7C;HALFWIDTH KATAKANA LETTER SI;Lo;0;L; 30B7;;;;N;;;;; FF7D;HALFWIDTH KATAKANA LETTER SU;Lo;0;L; 30B9;;;;N;;;;; FF7E;HALFWIDTH KATAKANA LETTER SE;Lo;0;L; 30BB;;;;N;;;;; FF7F;HALFWIDTH KATAKANA LETTER SO;Lo;0;L; 30BD;;;;N;;;;; FF80;HALFWIDTH KATAKANA LETTER TA;Lo;0;L; 30BF;;;;N;;;;; FF81;HALFWIDTH KATAKANA LETTER TI;Lo;0;L; 30C1;;;;N;;;;; FF82;HALFWIDTH KATAKANA LETTER TU;Lo;0;L; 30C4;;;;N;;;;; FF83;HALFWIDTH KATAKANA LETTER TE;Lo;0;L; 30C6;;;;N;;;;; FF84;HALFWIDTH KATAKANA LETTER TO;Lo;0;L; 30C8;;;;N;;;;; FF85;HALFWIDTH KATAKANA LETTER NA;Lo;0;L; 30CA;;;;N;;;;; FF86;HALFWIDTH KATAKANA LETTER NI;Lo;0;L; 30CB;;;;N;;;;; FF87;HALFWIDTH KATAKANA LETTER NU;Lo;0;L; 30CC;;;;N;;;;; FF88;HALFWIDTH KATAKANA LETTER NE;Lo;0;L; 30CD;;;;N;;;;; FF89;HALFWIDTH KATAKANA LETTER NO;Lo;0;L; 30CE;;;;N;;;;; FF8A;HALFWIDTH KATAKANA LETTER HA;Lo;0;L; 30CF;;;;N;;;;; FF8B;HALFWIDTH KATAKANA LETTER HI;Lo;0;L; 30D2;;;;N;;;;; FF8C;HALFWIDTH KATAKANA LETTER HU;Lo;0;L; 30D5;;;;N;;;;; FF8D;HALFWIDTH KATAKANA LETTER HE;Lo;0;L; 30D8;;;;N;;;;; FF8E;HALFWIDTH KATAKANA LETTER HO;Lo;0;L; 30DB;;;;N;;;;; FF8F;HALFWIDTH KATAKANA LETTER MA;Lo;0;L; 30DE;;;;N;;;;; FF90;HALFWIDTH KATAKANA LETTER MI;Lo;0;L; 30DF;;;;N;;;;; FF91;HALFWIDTH KATAKANA LETTER MU;Lo;0;L; 30E0;;;;N;;;;; FF92;HALFWIDTH KATAKANA LETTER ME;Lo;0;L; 30E1;;;;N;;;;; FF93;HALFWIDTH KATAKANA LETTER MO;Lo;0;L; 30E2;;;;N;;;;; FF94;HALFWIDTH KATAKANA LETTER YA;Lo;0;L; 30E4;;;;N;;;;; FF95;HALFWIDTH KATAKANA LETTER YU;Lo;0;L; 30E6;;;;N;;;;; FF96;HALFWIDTH KATAKANA LETTER YO;Lo;0;L; 30E8;;;;N;;;;; FF97;HALFWIDTH KATAKANA LETTER RA;Lo;0;L; 30E9;;;;N;;;;; FF98;HALFWIDTH KATAKANA LETTER RI;Lo;0;L; 30EA;;;;N;;;;; FF99;HALFWIDTH KATAKANA LETTER RU;Lo;0;L; 30EB;;;;N;;;;; FF9A;HALFWIDTH KATAKANA LETTER RE;Lo;0;L; 30EC;;;;N;;;;; FF9B;HALFWIDTH KATAKANA LETTER RO;Lo;0;L; 30ED;;;;N;;;;; FF9C;HALFWIDTH KATAKANA LETTER WA;Lo;0;L; 30EF;;;;N;;;;; FF9D;HALFWIDTH KATAKANA LETTER N;Lo;0;L; 30F3;;;;N;;;;; FF9E;HALFWIDTH KATAKANA VOICED SOUND MARK;Lm;0;L; 3099;;;;N;;halfwidth katakana-hiragana voiced sound mark;;; FF9F;HALFWIDTH KATAKANA SEMI-VOICED SOUND MARK;Lm;0;L; 309A;;;;N;;halfwidth katakana-hiragana semi-voiced sound mark;;; FFA0;HALFWIDTH HANGUL FILLER;Lo;0;L; 3164;;;;N;HALFWIDTH HANGUL CAE OM;;;; FFA1;HALFWIDTH HANGUL LETTER KIYEOK;Lo;0;L; 3131;;;;N;HALFWIDTH HANGUL LETTER GIYEOG;;;; FFA2;HALFWIDTH HANGUL LETTER SSANGKIYEOK;Lo;0;L; 3132;;;;N;HALFWIDTH HANGUL LETTER SSANG GIYEOG;;;; FFA3;HALFWIDTH HANGUL LETTER KIYEOK-SIOS;Lo;0;L; 3133;;;;N;HALFWIDTH HANGUL LETTER GIYEOG SIOS;;;; FFA4;HALFWIDTH HANGUL LETTER NIEUN;Lo;0;L; 3134;;;;N;;;;; FFA5;HALFWIDTH HANGUL LETTER NIEUN-CIEUC;Lo;0;L; 3135;;;;N;HALFWIDTH HANGUL LETTER NIEUN JIEUJ;;;; FFA6;HALFWIDTH HANGUL LETTER NIEUN-HIEUH;Lo;0;L; 3136;;;;N;HALFWIDTH HANGUL LETTER NIEUN HIEUH;;;; FFA7;HALFWIDTH HANGUL LETTER TIKEUT;Lo;0;L; 3137;;;;N;HALFWIDTH HANGUL LETTER DIGEUD;;;; FFA8;HALFWIDTH HANGUL LETTER SSANGTIKEUT;Lo;0;L; 3138;;;;N;HALFWIDTH HANGUL LETTER SSANG DIGEUD;;;; FFA9;HALFWIDTH HANGUL LETTER RIEUL;Lo;0;L; 3139;;;;N;HALFWIDTH HANGUL LETTER LIEUL;;;; FFAA;HALFWIDTH HANGUL LETTER RIEUL-KIYEOK;Lo;0;L; 313A;;;;N;HALFWIDTH HANGUL LETTER LIEUL GIYEOG;;;; FFAB;HALFWIDTH HANGUL LETTER RIEUL-MIEUM;Lo;0;L; 313B;;;;N;HALFWIDTH HANGUL LETTER LIEUL MIEUM;;;; FFAC;HALFWIDTH HANGUL LETTER RIEUL-PIEUP;Lo;0;L; 313C;;;;N;HALFWIDTH HANGUL LETTER LIEUL BIEUB;;;; FFAD;HALFWIDTH HANGUL LETTER RIEUL-SIOS;Lo;0;L; 313D;;;;N;HALFWIDTH HANGUL LETTER LIEUL SIOS;;;; FFAE;HALFWIDTH HANGUL LETTER RIEUL-THIEUTH;Lo;0;L; 313E;;;;N;HALFWIDTH HANGUL LETTER LIEUL TIEUT;;;; FFAF;HALFWIDTH HANGUL LETTER RIEUL-PHIEUPH;Lo;0;L; 313F;;;;N;HALFWIDTH HANGUL LETTER LIEUL PIEUP;;;; FFB0;HALFWIDTH HANGUL LETTER RIEUL-HIEUH;Lo;0;L; 3140;;;;N;HALFWIDTH HANGUL LETTER LIEUL HIEUH;;;; FFB1;HALFWIDTH HANGUL LETTER MIEUM;Lo;0;L; 3141;;;;N;;;;; FFB2;HALFWIDTH HANGUL LETTER PIEUP;Lo;0;L; 3142;;;;N;HALFWIDTH HANGUL LETTER BIEUB;;;; FFB3;HALFWIDTH HANGUL LETTER SSANGPIEUP;Lo;0;L; 3143;;;;N;HALFWIDTH HANGUL LETTER SSANG BIEUB;;;; FFB4;HALFWIDTH HANGUL LETTER PIEUP-SIOS;Lo;0;L; 3144;;;;N;HALFWIDTH HANGUL LETTER BIEUB SIOS;;;; FFB5;HALFWIDTH HANGUL LETTER SIOS;Lo;0;L; 3145;;;;N;;;;; FFB6;HALFWIDTH HANGUL LETTER SSANGSIOS;Lo;0;L; 3146;;;;N;HALFWIDTH HANGUL LETTER SSANG SIOS;;;; FFB7;HALFWIDTH HANGUL LETTER IEUNG;Lo;0;L; 3147;;;;N;;;;; FFB8;HALFWIDTH HANGUL LETTER CIEUC;Lo;0;L; 3148;;;;N;HALFWIDTH HANGUL LETTER JIEUJ;;;; FFB9;HALFWIDTH HANGUL LETTER SSANGCIEUC;Lo;0;L; 3149;;;;N;HALFWIDTH HANGUL LETTER SSANG JIEUJ;;;; FFBA;HALFWIDTH HANGUL LETTER CHIEUCH;Lo;0;L; 314A;;;;N;HALFWIDTH HANGUL LETTER CIEUC;;;; FFBB;HALFWIDTH HANGUL LETTER KHIEUKH;Lo;0;L; 314B;;;;N;HALFWIDTH HANGUL LETTER KIYEOK;;;; FFBC;HALFWIDTH HANGUL LETTER THIEUTH;Lo;0;L; 314C;;;;N;HALFWIDTH HANGUL LETTER TIEUT;;;; FFBD;HALFWIDTH HANGUL LETTER PHIEUPH;Lo;0;L; 314D;;;;N;HALFWIDTH HANGUL LETTER PIEUP;;;; FFBE;HALFWIDTH HANGUL LETTER HIEUH;Lo;0;L; 314E;;;;N;;;;; FFC2;HALFWIDTH HANGUL LETTER A;Lo;0;L; 314F;;;;N;;;;; FFC3;HALFWIDTH HANGUL LETTER AE;Lo;0;L; 3150;;;;N;;;;; FFC4;HALFWIDTH HANGUL LETTER YA;Lo;0;L; 3151;;;;N;;;;; FFC5;HALFWIDTH HANGUL LETTER YAE;Lo;0;L; 3152;;;;N;;;;; FFC6;HALFWIDTH HANGUL LETTER EO;Lo;0;L; 3153;;;;N;;;;; FFC7;HALFWIDTH HANGUL LETTER E;Lo;0;L; 3154;;;;N;;;;; FFCA;HALFWIDTH HANGUL LETTER YEO;Lo;0;L; 3155;;;;N;;;;; FFCB;HALFWIDTH HANGUL LETTER YE;Lo;0;L; 3156;;;;N;;;;; FFCC;HALFWIDTH HANGUL LETTER O;Lo;0;L; 3157;;;;N;;;;; FFCD;HALFWIDTH HANGUL LETTER WA;Lo;0;L; 3158;;;;N;;;;; FFCE;HALFWIDTH HANGUL LETTER WAE;Lo;0;L; 3159;;;;N;;;;; FFCF;HALFWIDTH HANGUL LETTER OE;Lo;0;L; 315A;;;;N;;;;; FFD2;HALFWIDTH HANGUL LETTER YO;Lo;0;L; 315B;;;;N;;;;; FFD3;HALFWIDTH HANGUL LETTER U;Lo;0;L; 315C;;;;N;;;;; FFD4;HALFWIDTH HANGUL LETTER WEO;Lo;0;L; 315D;;;;N;;;;; FFD5;HALFWIDTH HANGUL LETTER WE;Lo;0;L; 315E;;;;N;;;;; FFD6;HALFWIDTH HANGUL LETTER WI;Lo;0;L; 315F;;;;N;;;;; FFD7;HALFWIDTH HANGUL LETTER YU;Lo;0;L; 3160;;;;N;;;;; FFDA;HALFWIDTH HANGUL LETTER EU;Lo;0;L; 3161;;;;N;;;;; FFDB;HALFWIDTH HANGUL LETTER YI;Lo;0;L; 3162;;;;N;;;;; FFDC;HALFWIDTH HANGUL LETTER I;Lo;0;L; 3163;;;;N;;;;; FFE0;FULLWIDTH CENT SIGN;Sc;0;ET; 00A2;;;;N;;;;; FFE1;FULLWIDTH POUND SIGN;Sc;0;ET; 00A3;;;;N;;;;; FFE2;FULLWIDTH NOT SIGN;Sm;0;ON; 00AC;;;;N;;;;; FFE3;FULLWIDTH MACRON;Sk;0;ON; 00AF;;;;N;FULLWIDTH SPACING MACRON;*;;; FFE4;FULLWIDTH BROKEN BAR;So;0;ON; 00A6;;;;N;FULLWIDTH BROKEN VERTICAL BAR;;;; FFE5;FULLWIDTH YEN SIGN;Sc;0;ET; 00A5;;;;N;;;;; FFE6;FULLWIDTH WON SIGN;Sc;0;ET; 20A9;;;;N;;;;; FFE8;HALFWIDTH FORMS LIGHT VERTICAL;So;0;ON; 2502;;;;N;;;;; FFE9;HALFWIDTH LEFTWARDS ARROW;Sm;0;ON; 2190;;;;N;;;;; FFEA;HALFWIDTH UPWARDS ARROW;Sm;0;ON; 2191;;;;N;;;;; FFEB;HALFWIDTH RIGHTWARDS ARROW;Sm;0;ON; 2192;;;;N;;;;; FFEC;HALFWIDTH DOWNWARDS ARROW;Sm;0;ON; 2193;;;;N;;;;; FFED;HALFWIDTH BLACK SQUARE;So;0;ON; 25A0;;;;N;;;;; FFEE;HALFWIDTH WHITE CIRCLE;So;0;ON; 25CB;;;;N;;;;; FFF9;INTERLINEAR ANNOTATION ANCHOR;Cf;0;BN;;;;;N;;;;; FFFA;INTERLINEAR ANNOTATION SEPARATOR;Cf;0;BN;;;;;N;;;;; FFFB;INTERLINEAR ANNOTATION TERMINATOR;Cf;0;BN;;;;;N;;;;; FFFC;OBJECT REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;; FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;; F0000;;Co;0;L;;;;;N;;;;; FFFFD;;Co;0;L;;;;;N;;;;; 100000;;Co;0;L;;;;;N;;;;; 10FFFD;;Co;0;L;;;;;N;;;;; opensrs-client-3.0.0/lib/RACE.pm0000644017777601777760000003530610770014205017361 0ustar nobodynogroup00000000000000package RACE; use strict; use NAMEPREP; use Unicode::String qw(utf8 ucs4 utf16); Unicode::String->stringify_as('utf8'); my $RACEPrefix = "bq--"; my $STD13Chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYX0123456789-"; my $Base32Chars = 'abcdefghijklmnopqrstuvwxyz234567'; my $USE_RACE = 1; sub Initialise { my %args = @_; NAMEPREP::Initialise(%args) } sub UseRace { my $arg = shift; $USE_RACE = $arg; } sub DoRACE { my %args = @_; my $fulldomainstring = $args{Domain}; #charset is a legacy argument. Not used any more my $charset = $args{EncodingType}; my (@dmnparts,$icntr,$TheUCS4,$extension,$TheIn,$nameprephash); my (%result,$racehash); if ( (! defined $charset) or ($charset eq "") or (!$USE_RACE)) { $result{OriginalDomain} = $fulldomainstring; $result{ConvertedDomain} = $fulldomainstring; $result{DomainConverted} = 0; return \%result; } #assume input is in utf8 @dmnparts = split(/\./,$fulldomainstring); $extension = lc $dmnparts[$#dmnparts]; $result{OriginalDomain} = $fulldomainstring; $result{DomainConverted} = 0; $result{ConvertedDomain} = ""; for ($icntr=0;$icntr<$#dmnparts;$icntr++) { my $u = $dmnparts[$icntr]; $nameprephash = NAMEPREP::nameprep(name => $u); if (defined $nameprephash->{error}) { $result{Error} = "Nameprep Error: " . $nameprephash->{error} . " in: " . $u ; return \%result; } $result{MapOutput} .= $nameprephash->{mapoutput} . "."; $result{NamepreppedDomain} .= $nameprephash->{output} . "."; $result{UniHexCodes} .= $nameprephash->{hexin}. "." ; $result{NameprepHexCodes} .= $nameprephash->{hexoutput} . "."; $TheIn = $nameprephash->{output}; $TheUCS4 = utf8($TheIn)->ucs4; $racehash = UCS4toRACE($TheUCS4); if(defined $racehash->{error}) { $result{Error} = "RACE Error: " . $racehash->{error}; return \%result; } if($racehash->{DomainConverted}) { $result{DomainConverted} = 1; $result{ConvertedDomain} .= $racehash->{result}; } else { $result{DomainConverted} = 0; $result{ConvertedDomain} .= lc $u; } $result{ConvertedDomain} .= "."; undef $racehash; undef $nameprephash; } $result{ConvertedDomain} .= $extension; $result{NamepreppedDomain} .= $extension; $result{UniHexCodes} .= $extension; $result{NameprepHexCodes} .= $extension; $result{MapOutput} .= $extension; if($result{DomainConverted}!=1) { $result{ConvertedDomain} = lc $fulldomainstring; } return \%result; } sub UndoRACE { my %args = @_; my $fullraceddomainstring = $args{Domain}; my $charset = $args{EncodingType}; my (@dmnparts,$extension,%result,$icntr,$TheUCS4,$racehash); if ( (! defined $charset) or ($charset eq "") or (!$USE_RACE)) { $result{OriginalDomain} = $fullraceddomainstring; return \%result; } @dmnparts = split(/\./,$fullraceddomainstring); $extension = lc $dmnparts[$#dmnparts]; for ($icntr=0;$icntr<$#dmnparts;$icntr++) { my $u = $dmnparts[$icntr]; $racehash = RACEtoUCS4($u); if(not $racehash->{is_wrong_prefix}) { if(defined $racehash->{error}) { $result{Error} = $racehash->{error}; return \%result; } $result{OriginalDomain} .= ucs4($racehash->{OriginalDomain})->utf8; $result{DomainConverted} = 1; } else { $result{OriginalDomain} .= $u; } $result{OriginalDomain} .= "."; } $result{OriginalDomain} .= $extension; return \%result; } sub RACEtoUCS4 { my $InString = lc(shift(@_)); my ($PostBase32, @DeArr, $i, $U1, $N1, $OutString, $LCheck, $InputPointer, @UpperUniq, %UpperSeen,%result,@CheckArr); # Strip any whitespace $InString =~ s/\s*//g; # Strip of the prefix string unless(substr($InString, 0, length($RACEPrefix)) eq $RACEPrefix) { $result{error} = "The input to RACEtoUCS4 did not start with '$RACEPrefix'"; #we do not want to introduce an error if the prefix is bad. $result{is_wrong_prefix} = 1; return \%result; } $InString = substr($InString, length($RACEPrefix)); my $pb32hash = Base32Decode($InString); if(defined $pb32hash->{error}) { $result{error} = $pb32hash->{error}; return \%result; } $PostBase32 = $pb32hash->{result}; @DeArr = split(//, $PostBase32); # Reverse the compression $U1 = $DeArr[0]; # Step 1a if($#DeArr < 1) # Step 1b { $result{error} = "The output of Base32Decode was zero length."; return \%result; } unless ($U1 eq "\xd8") { # Step 1c $i = 1; until($i > $#DeArr) { # Step 2a $N1 = $DeArr[$i++]; # Step 2b unless($N1 eq "\xff") { # Step 2c if(($U1 eq "\x00") and ($N1 eq "\x99")) # Step 3 { $result{error} = "Found 0099 in the input to RACEtoUCS4, step 3."; return \%result; } $OutString .= $U1 . $N1; # Step 4 } else { if($i > $#DeArr) # Step 5 { $result{error} = "Input in RACE string at octet $i too short at step 5"; return \%result; } $N1 = $DeArr[$i++]; # Step 6a if($N1 eq "\x99") # Step 6b { $OutString .= $U1 . "\xff" } else # Step 7 { $OutString .= "\x00" . $N1 } } } if((length($OutString) % 2) == 1) # Step 11 { $result{error} = "The output of RACEtoUCS4 for compressed input was an odd number of characters at step 11."; return \%result; } } else { # Was not compressed $LCheck = substr(join('', @DeArr), 1); # Step 8a if((length($LCheck) % 2 ) == 1 ) # Step 8b { $result{error} = "The output of RACEtoUCS4 for uncompressed input was an odd number of characters at step 8b"; return \%result; } # Do the step 9 check to be sure the right length was used @CheckArr = split(//, $LCheck); for($InputPointer = 0; $InputPointer <= $#CheckArr; $InputPointer += 2) { unless ($UpperSeen{$CheckArr[$InputPointer]}) { $UpperSeen{$CheckArr[$InputPointer]} = 1; push (@UpperUniq, $CheckArr[$InputPointer]) } } # Should it have been compressed? if( ($#UpperUniq == 0) or ( ($#UpperUniq == 1) and (($UpperUniq[0] eq "\x00") or ($UpperUniq[1] eq "\x00")) ) ) { $result{error} = "Input to RACEtoUCS4 failed during LCHECK format test in step 9."; return \%result; } if((length($LCheck) % 2) == 1) # Step 10a { $result{error} = "The output of RACEtoUCS4 for uncompressed input was an odd number of characters at step 10a"; return \%result; } $OutString = $LCheck } if(CheckForSTD13Name($OutString)) { $result{error} = "Found all-STD13 name before output of RACEtoUCS4"; return \%result; } if(CheckForBadSurrogates($OutString)) { $result{error} = "Found bad surrogate before output of RACEtoUCS4"; return \%result; } $result{OriginalDomain} = utf16($OutString)->ucs4; return \%result; } sub UCS4toRACE { my $InString = shift(@_); my (@InArr, $InStr, $InputPointer, $DoStep3, @UpperUniq, %UpperSeen); my ($U1, $U2, $N1, $CompString,$PostBase32, %result, $DieOrd); # Make an array of the UTF16 octets @InArr = split(//, ucs4($InString)->utf16); $InStr = join('', @InArr); if(CheckForSTD13Name($InStr)) { #the name contains only ascii chars $result{result} = $InStr; $result{DomainConverted} = 0; return \%result; } # Prepare for steps 1 and 2 by making an array of the upper octets for($InputPointer = 0; $InputPointer <= $#InArr; $InputPointer += 2) { unless ($UpperSeen{$InArr[$InputPointer]}) { $UpperSeen{$InArr[$InputPointer]} = 1; push (@UpperUniq, $InArr[$InputPointer]) } } if($#UpperUniq == 0) { # Step 1 $U1 = $UpperUniq[0]; $DoStep3 = 0; } elsif($#UpperUniq == 1) { # Step 2 if($UpperUniq[0] eq "\x00") { $U1 = $UpperUniq[1]; $DoStep3 = 0; } elsif($UpperUniq[1] eq "\x00") { $U1 = $UpperUniq[0]; $DoStep3 = 0; } else { $DoStep3 = 1 } } else { $DoStep3 = 1 } # Now output based on the value of $DoStep3 if($DoStep3) { # Step 3 $CompString = "\xd8" . join('', @InArr); } else { if(($U1 ge "\xd8") and ($U1 le "\xdf")) { # Step 4a $DieOrd = sprintf("%04lX", ord($U1)); $result{error} = "Found invalid input to UCS4toRACE step 4a: $DieOrd."; return \%result; } $CompString = $U1; # Step 4b $InputPointer = 0; while($InputPointer <= $#InArr) { # Step 5a $U2 = $InArr[$InputPointer++]; $N1 = $InArr[$InputPointer++]; # Step 5b if(($U2 eq "\x00") and ($N1 eq "\x99")) # Step 5c { $result{error} = "Found U+0099 in input stream to UCS4toRACE step 5c."; return \%result; } if( ($U2 eq $U1) and ($N1 ne "\xff") ) # Step 6 { $CompString .= $N1 } elsif( ($U2 eq $U1) and ($N1 eq "\xff") ) # Step 7 { $CompString .= "\xff\x99" } else { $CompString .= "\xff" . $N1 } # Step 8 } } if(length($CompString) >= 37) { $result{error} = "Lenth of compressed string was >= 37 in UCS4toRACE."; return \%result; } $PostBase32 = Base32Encode($CompString); $result{DomainConverted} = 1; $result{result} = "$RACEPrefix$PostBase32"; return \%result; } sub CheckForSTD13Name { # The input is in UTF-16 my $InCheck = shift(@_); my (@CheckArr, $CheckPtr, $Lower, $Upper,); @CheckArr = split(//, $InCheck); $CheckPtr = 0; until($CheckPtr > $#CheckArr) { $Upper = $CheckArr[$CheckPtr++]; $Lower = $CheckArr[$CheckPtr++]; if(($Upper ne "\x00") or (index($STD13Chars, $Lower) == -1) ) { return 0 } } return 1; } sub Base32Encode { my($ToEncode) = shift(@_); my ($i, $OutString, $CompBits, $FivePos, $FiveBitsString, $FiveIndex); # Turn the compressed string into a string that represents the bits as # 0 and 1. This is wasteful of space but easy to read and debug. $CompBits = ''; foreach $i (split(//, $ToEncode)) { $CompBits .= unpack("B8", $i) }; # Pad the value with enough 0's to make it a multiple of 5 if((length($CompBits) % 5) != 0) { $CompBits .= '0' x (5 - (length($CompBits) % 5)) }; # Step 1a $FivePos = 0; # Step 1b do { $FiveBitsString = substr($CompBits, $FivePos, 5); # Step 2 $FiveIndex = unpack("N", pack("B32", ('0' x 27) . $FiveBitsString)); $OutString .= substr($Base32Chars, $FiveIndex, 1); # Step 3 $FivePos += 5; # Step 4a } until($FivePos == length($CompBits)); # Step 4b return $OutString; } sub Base32Decode { my ($ToDecode) = shift(@_); my ($InputCheck, $OutString, $DeCompBits, $DeCompIndex, @DeArr, $i, $PaddingLen, $PaddingContent,%result,$InChar, $Padding); $InputCheck = length($ToDecode) % 8; # Step 1 if(($InputCheck == 1) or ($InputCheck == 3) or ($InputCheck == 6)) { $result{error} = "Input to Base32Decode was a bad mod length: $InputCheck\n"; return \%result; } # $DeCompBits is a string that represents the bits as # 0 and 1. This is wasteful of space but easy to read and debug. $DeCompBits = ''; foreach $InChar (split(//, $ToDecode)) { if(index($Base32Chars, $InChar) == -1) # Character not in base set { $result{error} = "Input to Base32Decode had a bad character: $InChar\n"; return \%result; } $DeCompIndex = pack("N", index($Base32Chars, $InChar)); $DeCompBits .= substr(unpack("B32", $DeCompIndex), 27); } # Step 5 $Padding = length($DeCompBits) % 8; $PaddingContent = substr($DeCompBits, (length($DeCompBits) - $Padding)); unless(index($PaddingContent, '1') == -1) { $result{error} = "Found non-zero padding in Base32Decode\n"; return \%result; } # Break the decompressed string into octets for returning @DeArr = (); for($i = 0; $i < int(length($DeCompBits) / 8); $i++) { $DeArr[$i] = chr(unpack("N", pack("B32", ('0' x 24) . substr($DeCompBits, $i * 8, 8)))); } $result{result} = join('', @DeArr); return \%result; } sub CheckForBadSurrogates { # The input is in UTF-16 my $InCheck = shift(@_); my (@CheckArr, $CheckPtr, $Upper1, $Upper2,$HighSurr,$LowSurr); @CheckArr = split(//, $InCheck); $CheckPtr = 0; $HighSurr = "\xD8\xD9\xDA\xDB"; $LowSurr = "\xDC\xDD\xDE\xDF"; until($CheckPtr > $#CheckArr) { # Check for bad half-pair if((($CheckPtr + 2 ) >= $#CheckArr) and (index($HighSurr.$LowSurr, $CheckArr[$CheckPtr]) > -1 )) { return 1; } last unless(defined($CheckArr[$CheckPtr + 4])); $Upper1 = $CheckArr[$CheckPtr += 2]; $Upper2 = $CheckArr[$CheckPtr += 2]; if( ((index($HighSurr, $Upper1) > -1) and (index($LowSurr, $Upper2) == -1)) or ((index($HighSurr, $Upper1) == -1) and (index($LowSurr, $Upper2) > -1))) { return 1; } } return 0; } return 1; opensrs-client-3.0.0/lib/NAMEPREP.pm0000755017777601777760000001342210770014212020052 0ustar nobodynogroup00000000000000package NAMEPREP; $VERSION = '3'; use strict; use CHARLINT; use Unicode::String qw(utf8 uchr); Unicode::String->stringify_as('utf8'); my %RACESETTINGS; sub Initialise { my %args = @_; %RACESETTINGS=%args; } sub nameprep { my %args = @_; my $name = $args{name}; my (%result,$i,$ChalintHash,$ProhibReturnHash,$mapresulthash); $result{hexin}=HexOut($name); $mapresulthash = DoMap($name); if(defined $mapresulthash->{error}) { $result{error} = $mapresulthash->{error}; return \%result; } $result{mapoutput} = $mapresulthash->{result}; $result{hexmapoutput} = HexOut($result{mapoutput}); for($i = 0; $i < length($result{mapoutput}); $i++) { if(ord(substr($result{mapoutput}, $i, 1)) == 0) { $result{error} = "Null characters not allowed in normalization"; return \%result; } } $ChalintHash = CHARLINT::Charlint(Name=> $result{mapoutput}, DataFile=> $RACESETTINGS{DATAFILE}); if(defined $ChalintHash->{error}) { $result{error} = $ChalintHash->{error}; return \%result; } $result{normalizationout} = $ChalintHash->{charlint_domain}; $result{hexnormalizationout} = HexOut($result{normalizationout}); $ProhibReturnHash = CheckForProhib(name => $result{normalizationout}, doUnass => 0, unassFile => $RACESETTINGS{UNASSFILE}, prohibFile =>$RACESETTINGS{PROHIBFILE}); if(defined $ProhibReturnHash->{error}) { $result{error} = $ProhibReturnHash->{error}; return \%result; } elsif($ProhibReturnHash->{result} == 1) { $result{error} = "Found Prohibited Chars: " . $ProhibReturnHash->{prohib_chars}; return \%result; } $result{output} = $result{normalizationout}; $result{hexoutput} = $result{hexnormalizationout}; return \%result; } sub HexOut { my $Temp = shift(@_); my (@UTF8Parts, $ThisUTF8Part,$result); @UTF8Parts = unpack( 'U0U*', $Temp); foreach $ThisUTF8Part (@UTF8Parts) { $result .= 'U+' . sprintf('%04lX', $ThisUTF8Part) . ' '; } return $result; } sub DoMap { my $ToBeMap = shift(@_); my ($i, $TheLine, %MapTable, $From, $To, @AllInOrds); my ($ThisOrd, @OutParts, $Part, $OutMap,$Reason,%result); #if(!open(MAPFILE, '/home/tlovasic/NEWRACE/MapData-01.txt')) if(!open(MAPFILE, $RACESETTINGS{MAPFILE})) { $result{error} = "Could not read " . $RACESETTINGS{MAPFILE} . " during mapping."; return \%result; } while() { $TheLine = $_; chomp($TheLine); ($From, $To, $Reason) = split(/; /, $TheLine); $Reason = ''; # Needed to avoid the -w warning $MapTable{hex($From)} = $To; } @AllInOrds = unpack('U0U*', $ToBeMap); foreach $ThisOrd (@AllInOrds) { if(exists($MapTable{$ThisOrd})) { # The mapping may be zero, one, or more encoded hex values @OutParts = split(/ /, $MapTable{$ThisOrd}); foreach $Part (@OutParts) { $OutMap .= uchr(hex($Part))->as_string; } } else { # No map, so just put out the character $OutMap .= uchr($ThisOrd)->as_string; } } $result{result} = $OutMap; return \%result; } sub CheckForProhib { my %args = @_; my $ProhibCheckString = $args{name}; my $DoUnass = $args{doUnass}; my $UnassignedFile = $args{unassFile}; my $ProhibFile = $args{prohibFile}; my ($DebugTemp, $TheLine, @InputLines,$InRange, $Left, %ProhibHash, $ThisOrd,@AllInOrds,$FmtString); my ($FoundProhib,$Val, $Low, $High, @AllInChars, $i, $ThisChar, $ThisHex,%result); # Both the file with unassigned characters and the nameprep draft # have lines in the same format: either they are a hex value, # or they are two hex values with a dash between (indicating a range). # Only add in the unassigned characters if needed. if($DoUnass == 1) { if(! open(UNASSIGNED, $UnassignedFile)) { $result{error} = "Could not read from $UnassignedFile\n"; return \%result; } while() { $TheLine = $_; chomp($TheLine); push(@InputLines, $TheLine); } } if(! open(PROHIBIN, $ProhibFile)) { $result{error} = "Could not read from $ProhibFile\n"; return \%result; } # Load the input array while() { $TheLine = $_; chomp($TheLine); next if($TheLine eq ''); # Skip blank lines push(@InputLines, $TheLine); } # Make a hash of values from the two files foreach $InRange (@InputLines) { ($Left) = split(/\s+/, $InRange, 2); if( (length($Left) == 4) or (length($Left) == 6) ) { $ProhibHash{hex($Left)} = 1 } else { ($Low, $High) = split('-', $Left); foreach $Val (hex($Low) .. hex($High)) { $ProhibHash{$Val} = 1 } } } # Compare the characters in the input against the values in # the ProhibHash. @AllInOrds = unpack('U0U*', $ProhibCheckString); foreach $ThisOrd (@AllInOrds) { if(exists($ProhibHash{$ThisOrd})) { $FmtString = '%04lX'; $ThisHex = sprintf($FmtString, $ThisOrd); $result{prohib_chars} .= $ThisHex . " "; $FoundProhib = 1; } } if($FoundProhib) { $result{result} = 1; return \%result; } else { $result{result} = 0; return \%result; } } return 1; opensrs-client-3.0.0/lib/CHARLINT.pm0000755017777601777760000001727110770014212020055 0ustar nobodynogroup00000000000000package CHARLINT; $VERSION = '0.46'; use strict; my %CombClass; my %DecoKompData; my %CompCano; my %DecoCano; my %exists; sub Charlint { my %args = @_; my $name = $args{Name}; my $dataFile = $args{DataFile}; my ($ch,$elem,$res,@line,@line2,$starterPos,$sourceLength); my ($composite,$sourcePos,$targetPos,$lastClass,$starterCh,$chClass); my %result; if(! %CombClass) { ReadStoredData($dataFile); } if ($res = CheckUTF8($name)) { $result{Error}= "$name: Non-UTF-8 ($res)."; return \%result; } if($res = CheckPrivate($name)) { $result{Error}= "$name: Private characters ($res)."; return \%result; } @line = splitutf8($name); @line2 = (); my $t_res; while (defined($elem = shift @line)) { $t_res = DecoKomp($elem); if(defined $t_res->{error}) { $result{Error} = $t_res->{error}; return \%result; } else { push @line2, splitutf8($t_res->{result}); } } @line = sortCano(@line2); $starterPos = 0; $sourceLength = @line; if ($sourceLength == 0) { $targetPos = 0; } else { $targetPos = 1; $starterCh = $line[0]; $lastClass = -1; # this eliminates a special check } for ($sourcePos = 1; $sourcePos < $sourceLength; $sourcePos++) { $ch = $line[$sourcePos]; $chClass = $CombClass{$ch}; $chClass = 0 if (!defined($chClass)); $composite = CompCano($starterCh, $ch); if (defined($composite) && $lastClass < $chClass) { $line[$starterPos] = $composite; $starterCh = $composite; } elsif ($chClass == 0) { $starterPos = $targetPos; $starterCh = $ch; $lastClass = -1; $line[$targetPos++] = $ch; } else { $lastClass = $chClass; $line[$targetPos++] = $ch; } } $#line = $targetPos-1; $result{charlint_domain}= (join "", @line); return \%result; } sub ReadStoredData { my ($dataFile) = @_; require Storable; # in line, to not require module if not needed my %all_data = %{&Storable::retrieve ($dataFile)}; %exists = %{$all_data{exists}}; %DecoCano = %{$all_data{DecoCano}}; %CompCano = %{$all_data{CompCano}}; %DecoKompData = %{$all_data{DecoKompData}}; %CombClass = %{$all_data{CombClass}}; } sub CheckUTF8 { my ($s) = @_; my ($st); if ($s =~ /[\355][\240-\257][\200-\277][\355][\260-\277][\200-\277]/) { return "surrogate pair"; } if ($s =~ /[\355][\240-\277][\200-\277]/) { return "single surrogate"; } if ($s =~ /[\300-\301][\200-\277]/) { return "ASCII in 2 bytes"; } if ($s =~ /[\340][\200-\237][\200-\277]/) { return "3 bytes instead of 2 or less"; } if ($s =~ /[\360][\200-\217][\200-\277]{2}/) { return "4 bytes instead of 3 or less"; } if ($s =~ /[\370][\200-\207][\200-\277]{3}/) { return "5 bytes instead of 4 or less"; } if ($s =~ /[\374][\200-\203][\200-\277]{4}/) { return "6 bytes instead of 5 or less"; } # non-synchronized cases $s =~ s{ [\000-\177] | [\300-\337][\200-\277] | [\340-\357][\200-\277]{2} | [\360-\367][\200-\277]{3} | [\370-\373][\200-\277]{4} | [\374-\375][\200-\277]{5} }{}gx; # forbidden bytes if ($s =~ /[\376\377]/) { return "0xFE or 0xFF byte"; } if ($s ne "") { return "synchronization problem"; } return undef; } sub CheckPrivate { my ($s) = @_; if ($s =~ /[\356][\200-\277]{2}|[\357][\200-\237][\200-\277]/) { return "BMP"; } if ($s =~ /[\363][\260-\277][\200-\277]{2}/) { return "plane 15"; } if ($s =~ /[\364][\200-\217][\200-\277]{2}/) { return "plane 16"; } return undef; } sub splitutf8 { my $in = shift; my @arr = split (/(?=[\000-\177\300-\377])/, $in); return @arr; } sub sortCano { my @a = @_; my ($i, $ccHere, $ccPrev, $temp); return @a if (@a <= 1); for ($i=1; $i < @a; $i++) { $ccHere = $CombClass{$a[$i]}; $ccPrev = $CombClass{$a[$i-1]}; $ccHere = 0 if (!defined($ccHere)); $ccPrev = 0 if (!defined($ccPrev)); if ($ccHere != 0 && $ccPrev > $ccHere) { $temp = $a[$i]; # exchange $a[$i] = $a[$i-1]; $a[$i-1] = $temp; $i -= 2 if ($i > 1); # backtrack and check again } } return @a; } sub DecoKomp { my ($s) = @_; my (%result,$h); my $hash = utf82num($s); if(defined $hash->{error}) { $result{error} = $hash->{error}; return \%result; } else { $h = $hash->{result}; } if ($h >= 0xAC00 && $h < 0xD7A4) { $result{result} = DecoCano($s); #refer to DecoCano for Hangul decomposition return \%result; } else { $result{result} = $DecoKompData{$s}; if (defined $result{result}) { return \%result; } else { $result{result} = $s; return \%result; } } } sub utf82num { my(@t, $t, %result, $trail); @t = unpack ("C*", $_[0]); $t = shift (@t); if ($t<0x80) { $result{result} = $t ; $trail=0; } elsif ($t<0xC0) { $result{error} = "Illegal leading byte in UTF-8."; return \%result;} elsif ($t<0xE0) { $result{result} = $t & 0x1F; $trail=1; } elsif ($t<0xF0) { $result{result} = $t & 0x0F; $trail=2; } elsif ($t<0xF8) { $result{result} = $t & 0x07; $trail=3; } elsif ($t<0xFC) { $result{result} = $t & 0x03; $trail=4; } elsif ($t<0xFE) { $result{result} = $t & 0x01; $trail=5; } else { $result{error} = "Illegal byte in UTF-8."; return \%result;} if ($trail != $#t + 1) { $result{error} = "Not right number of trailing bytes."; return \%result; } while ($trail--) { # maybe check for 01xxxxxx $result{result} <<= 6; $result{result} += 0x3F & shift (@t); } return \%result; } sub CompCano { my ($starterCh, $ch) = @_; my $s = utf82num($starterCh); my $c = utf82num($ch); if ($s >= 0x1100 && $s < 0x1113 && $c >= 0x1161 && $c < 0x1176) { return num2utf8((($s-0x1100)*21+$c-0x1161) * 28 + 0xAC00); } elsif ($s >= 0xAC00 && $s < 0xD7A4 && !(($s-0xAC00)%28) && $c >= 0x11A8 && $c < 0x11C3) { return num2utf8($s + $c - 0x11A7); } else { return $CompCano{join "", ($starterCh, $ch)}; } } # end CompCano sub num2utf8 { my ($t) = @_; my ($trail, $firstbits, @result); if ($t<0x00000080) { $firstbits=0x00; $trail=0; } elsif ($t<0x00000800) { $firstbits=0xC0; $trail=1; } elsif ($t<0x00010000) { $firstbits=0xE0; $trail=2; } elsif ($t<0x00200000) { $firstbits=0xF0; $trail=3; } elsif ($t<0x04000000) { $firstbits=0xF8; $trail=4; } elsif ($t<0x80000000) { $firstbits=0xFC; $trail=5; } else { die "Too large scalar value, cannot be converted to UTF-8.\n"; } for (1 .. $trail) { unshift (@result, ($t & 0x3F) | 0x80); $t >>= 6; # slight danger of non-portability } unshift (@result, $t | $firstbits); pack ("C*", @result); } sub DecoCano { my ($s) = @_; my $h = utf82num($s); if ($h >= 0xAC00 && $h < 0xD7A4) { my $hindex = $h - 0xAC00; my $l = 0x1100 + $hindex/(21*28); my $v = 0x1161 + ($hindex % (21*28)) / 28; my $t = $hindex % 28; if ($t) { return join "", num2utf8($l), num2utf8($v), num2utf8(0x11A7 + $t); } else { return join "", num2utf8($l), num2utf8($v); } } else { my $r = $DecoCano{$s}; return $r if defined $r; return $s; } } return 1; opensrs-client-3.0.0/lib/OPS.pm0000644017777601777760000002473110770014212017306 0ustar nobodynogroup00000000000000# # OPS # # - OpenSRS Protocol Suite (OPS) Protocol Translator # # Dependencies: # XML_Codec module must be installed # # History # 2000-06-06 vm First version # 2000-06-12 vm Updated for action,object calls, fixed version numbering, # vm Added error routine to return error hash # 2000-06-14 vm Added msg_id and msg_type header fields # 2000-06-19 vm Added error trapping for XML::Parser errors # 2000-06-20 vm Fixed bug introduced when added error trapping, which # was causing $ref variable to go out of scope # 2000-06-21 vm Improved decoder performance by moving parser and codec # creation to package new(), so only executes once # when object is created # 2000-07-06 vlad read_message() and write_message() methods added # 2000-07-06 vlad read_data() and write_data() methods added package OPS; use POSIX qw(:signal_h); use strict; use vars qw($_OPS_VERSION $_OPT $_SPACER $_CRLF $_SESSID $_MSGCNT $_PARSER $_XML_CODEC ); my $_OPS_VERSION = "0.9"; my $_OPT = ""; my $_SPACER = " "; # indent character my $_CRLF = "\n"; my $_MSGTYPE_STD = "standard"; my $CRLF = "\r\n"; my $MAX_POST; use strict; use vars qw($VAR1 $VERSION); use IO::File; use XML::Parser; use XML_Codec; use Data::Dumper; $VERSION = '0.2'; # # sub: new # # Class constructor # sub new { my ($class, %args) = @_; my $option = $args{option}; my $self = {}; if ( defined($option) ) { if ($option eq 'compress') { # use compression, turn off all spaces and newlines # print "DEBUG--compression on\n"; $_OPT = 'compress'; $_SPACER = ""; $_CRLF = ""; } } if ( $args{max_post} and $args{max_post} > 0) { $self->set_max_post($args{max_post}); } # create private XML::Parser, so we can reuse it $_PARSER = XML::Parser->new(Style=>'Tree'); $_XML_CODEC = new XML_Codec(option=>$_OPT); # create session id for this object, reset message counter $_SESSID = rand; $_MSGCNT = 0; return bless $self,$class; } # # sub: decode # # Accepts and OPS protocol message or an IO::File object # and decodes the data into a perl reference # sub decode { my ($obj, $in) = @_; my ($ops_msg, $msg_id, $msg_type, $ref); # determine if we were passed a string (SCALAR) # or a IO::File object (REF) if (ref($in) eq 'IO::File') { # read the file into a string, then process as usual $ops_msg = join ('',$in->getlines); # no hardcoded size limit, not as efficient? #$in->read($ops_msg,8192); # using read buffer, BUT limits size of message } else { $ops_msg = $in; } # if preamble exists, remove it # $ops_msg =~ s/(\W*)\s*\?\s*xml.+\?\s*>//i; # # $ops_msg =~ s/(\W*)\s*\!\s*DOCTYPE.+\s*>//i; # # check for envelope protocol being used if ($ENV{OPS_DUMP_XML}){ warn ("OPS XML : ", $ops_msg); } if ($ops_msg !~ /\/) #(\W*) { # unsupported envelope, send back error return $obj->_ops_error("OPS_ERR","OPS Decode Error: Envelope Protocol Not Supported"); } else { # extract message type # $ops_msg =~ m#\(.+)\<\/msg_type\>#s; $msg_type=$1; # extract message id # $ops_msg =~ m#\(.+)\<\/msg_id\>#s; $msg_id=$1; # extract envelope body $ops_msg =~ m#\(.+)\<\/body\>#s; $ops_msg=$1 ; # trap errors eval { my $tree = $_PARSER->parse($ops_msg); # turn into a perl reference $ref = $_XML_CODEC->decode($tree); # stuff message id and type into hash # $ref->{'_OPS_msg_id'} = $msg_id; # $ref->{'_OPS_msg_type'} = $msg_type; }; if ( $@ ) { # parser error occured, send back an error code return $obj->_ops_error("OPS_ERR","OPS Decode Error: XML Parse Error\n[" . $@ . "]"); } else { return $ref; } } } # # sub: encode # # Accepts a perl reference and encodes it into an OPS protocol message # sub encode { my ($obj,$ref) = @_; local $Data::Dumper::Useqq = 1; if ($ENV{OPS_DUMP_XML}){ warn ("OPS Dumper : ", Dumper($ref)); } # create message id and type $_MSGCNT++; my $msg_id = $_SESSID + $_MSGCNT; # addition removes the leading zero # my $msg_id = $_MSGCNT . $_SESSID; # marginally faster but less intuitive numbering my $msg_type = $_MSGTYPE_STD; # normalize certain fields if they exist $ref->{'protocol'} = uc($ref->{'protocol'}) if ($ref->{'protocol'}); $ref->{'action'} = uc($ref->{'action'}) if ($ref->{'action'}); $ref->{'object'} = uc($ref->{'object'}) if ($ref->{'object'}); # add action type, which is a superset of the action # ($ref->{'action_type'}) = $ref->{'action'} =~ /(\w+)_/ if ($ref->{'action'}); # ($ref->{'action_type'}) = $ref->{'action'} if ($ref->{'action_type'} eq ""); # Note: if you want any additional values in the data_block add them # to the hash now, before the encoder is called # my $xml_codec = new XML_Codec(option=>$_OPT); # my $xml_data_block = $xml_codec->encode($ref); my $xml_data_block = $_XML_CODEC->encode($ref); if ($ENV{OPS_DUMP_XML}){ warn ("OPS Dumper after encoding: ", Dumper($ref)); } # wrap up data_block and add headers my $ops_msg = qq {$_CRLF$_CRLF$_CRLF$_SPACER

$_CRLF$_SPACER$_SPACER$_OPS_VERSION$_CRLF$_SPACER$_SPACER
$_CRLF$_SPACER$_CRLF$xml_data_block$_CRLF$_SPACER$_CRLF}; return $ops_msg; } # # write_data(): writes a message to a socket ( buffered IO) # sub write_data { my ( $self, $fh, $msg ) = @_; my ( $len ); $len = length $msg; local $SIG{PIPE} = 'IGNORE'; # write headers print $fh "Content-Length: $len", $CRLF, $CRLF; # write data print $fh $msg; } # # sub: write_message() # # Method to write a message to a socket (buffer IO) # sub write_message { my ( $self, $fh, $hr ) = @_; my ( $msg ); $msg = $self->encode( $hr ); $self->write_data( $fh, $msg ); } # # read_data(): reads data from a socket. # Returns buffer with data (or undef for a short read) # my $too_long = 0; sub alrm_handler { $too_long = 1 } sub read_data { my ( $self, $fh, $timeout ) = @_; my ( $line, $len, $buf, $hr ); $too_long = 0; if ( $timeout ) { sigaction SIGALRM, new POSIX::SigAction( 'OPS::alrm_handler' ); alarm( $timeout ); } while (defined( $line = <$fh>)) { last if $too_long; # get the length of the data buffer if ( not $len and $line =~ /^\s*Content-Length:\s+(\d+)\s*\r\n/i ) { $len = $1; if ($self->get_max_post() and $len > $self->get_max_post()){ die 'post_too_long'; } } # wait till the empty line next unless $line eq $CRLF; read( $fh, $buf, $len) == $len or $buf = undef; last; } alarm(0) if $timeout; return $buf; } # # sub: read_message() # # Method to read message from a socket (buffer IO) # Returns a reference to a hash # # Default timeout on read: 2 seconds # sub read_message { my ( $self, $fh, $timeout ) = @_; my ( $buf ); $buf = $self->read_data( $fh, $timeout || 2 ); return ( $buf ? $self->decode( $buf ) : undef ); } # # sub: _ops_error() # # Internal method to generate error code hashes # sub _ops_error { my ($obj,$err_code,$err_text) = @_; return ( { response_code=>$err_code, response_text=>$err_text, is_success=>0 } ); } sub get_max_post {return $MAX_POST} sub set_max_post { my ( $self, $max_post ) = @_; if ( $max_post > 0 ) { $MAX_POST = $max_post; } } 1; __END__ =head1 NAME OPS - Protocol Translator for the OpenSRS Protocol Suite =head1 SYNOPSIS use OPS; my $ops = new OPS; # encode $ops_msg = $ops->encode($hash_ref); # decode $hash_ref = $ops->decode($ops_msg); =head1 DESCRIPTION OPS is a module that encodes perl data structures into OPS protocol messages, and also converts OPS protocol messages back into perl data structures. =head1 METHODS =over 4 =item new This is a class method, the constructor for OPS. Options are passed as keyword value pairs. Recognized options are : =over 4 =item * option Currently the only recognized option is "compress". This turns on OPS protocol compression by removing irrelevant whitespace and newline characters. =back =item encode(HASH REF) This method encodes a hash structure into an OPS protocol message. You must pass a reference to a hash. Any arbitrary data structure is supported (e.g. a hash or array, or a hash of array of hashes of hashes, and so on.) The method returns a string. =over 4 =item example: use OPS; my $ops = new OPS; # CREATE A REFERENCE TO A HASH my $ref = { protocol=>'RMP', action=>'reply', response_code=>'200', response_text=>'OKAY', is_success=>1, domain_list=> [ 'ns1.example.com', 'ns2.example.com', 'ns3.example.com' ] ], } ; # encode data structure my $ops_msg = $ops->encode( $ref ); =back =item decode(STRING or IO::File object) This method decodes an OPS protocol message and turns it into a perl hash structure. This method accepts either an OPS protocol string, or an IO::File object to the OPS message. The method returns a reference to a hash. =over 4 =item example: use OPS; my $ops = new OPS; # $ops_msg is an OPS protocl message received # from somewhere, now decode it my $ref = $ops->decode($ops_msg); =back =over 4 =item read_data This method returns a buffer with data an open socket. =back =over 4 =item read_message This method reads a message from an open socket. It returns a hash reference. =back =over 4 =item write_data This method writes a buffer with data to an open socket. It returns true if successul. =back =over 4 =item write_message This method writes a message to an open socket. It takes a hash reference as a parameter and returns true if successul. =back =over 4 =item example: use OPS; my $ops = new OPS; ... my $client = $server->accept(); my $request = $ops->read_message( $client ); my $response = { protocol => 'RAP', action => 'reply', response_code => 200, response_text => 'OKAY', is_success => 1 }; $ops->write_message( $client, $response ) or error( 'can\'t write to socket' ); ... =back =head1 AUTHOR Victor Magdic, Tucows Inc. =back =cut opensrs-client-3.0.0/lib/CBC.pm0000644017777601777760000002742110770014212017233 0ustar nobodynogroup00000000000000package Crypt::CBC; use MD5; use Carp; use strict; use vars qw($VERSION); $VERSION = '1.23'; sub new ($$;$) { my $class = shift; my ($key,$cipher,$version) = @_; croak "Please provide an encryption/decryption key" unless defined $key; if (!$version) { $version = 0 ; } $cipher = 'Crypt::DES' unless $cipher; $cipher = $cipher=~/^Crypt::/ ? $cipher : "Crypt::$cipher"; eval "require $cipher"; croak "Couldn't load $cipher: $@" if $@; # some crypt modules use the class Crypt::, and others don't $cipher =~ s/^Crypt::// unless $cipher->can('keysize'); my $ks = $cipher->keysize; my $bs = $cipher->blocksize; # Some of the cipher modules are busted and don't report the # keysize (well, Crypt::Blowfish in any case). If we detect # this, and find the blowfish module in use, then assume 56. # Otherwise assume the least common denominator of 8. $ks = $cipher =~ /blowfish/i ? 56 : 8 unless $ks > 0; # the real key is computed from the first N bytes of the # MD5 hash of the provided key. my $material = MD5->hash($key); while (length($material) < $ks + $bs) { $material .= MD5->hash($material); } # Original implementation of SSLEay used part of the key for the IV # which is not a good idea. We do it here as well, but override # it with the second block of the incoming stream if present. my ($k,$iv) = (substr($material,0,$ks),substr($material,$ks,$bs)); return bless {'crypt' => $cipher->new($k), 'iv' => $iv, 'version' => $version, },$class; } sub encrypt (\$$) { my ($result); my ($self,$data) = @_; $self->start('encrypting'); if ($self->{version} == 120) { $result = $self->crypt120($data); $result .= $self->finish120; } else { $result = $self->crypt($data); $result .= $self->finish; } $result; } sub decrypt (\$$){ my ($result); my ($self,$data) = @_; $self->start('decrypting'); if ($self->{version} == 120) { $result = $self->crypt120($data); $result .= $self->finish120; } else { $result = $self->crypt($data); $result .= $self->finish; } $result; } sub encrypt_hex (\$$) { my ($self,$data) = @_; return join('',unpack 'H*',$self->encrypt($data)); } sub decrypt_hex (\$$) { my ($self,$data) = @_; return $self->decrypt(pack'H*',$data); } # call to start a series of encryption/decryption operations sub start (\$$) { my $self = shift; my $operation = shift; # 120 compatibility if ($self->{version} == 120) { $self->{civ} = $self->{iv}; } croak "Specify ncryption or ecryption" unless $operation=~/^[ed]/i; $self->{'buffer'} = ''; $self->{'decrypt'} = $operation=~/^d/i; } # call to encrypt/decrypt a bit of data sub crypt (\$$){ my $self = shift; my $data = shift; croak "crypt() called without a preceding start()" unless exists $self->{'buffer'}; my $result = ''; if ( !$self->{'civ'} ) { if ($self->{'decrypt'}) { if (my ($iv) = $data=~ /^RandomIV(.{8})/s) { $self->{'iv'} = $iv; substr($data,0,16) = ''; #truncate } } else { # encrypting $self->{'iv'} = pack("C*",map {rand(255)} 1..8); $result = 'RandomIV'; $result .= $self->{'iv'}; } $self->{'civ'} = $self->{'iv'}; } $self->{'buffer'} .= $data; my $iv = $self->{'civ'}; my $bs = $self->{'crypt'}->blocksize; my $d = $self->{'decrypt'}; return $result unless length($self->{'buffer'}) >= $bs; my @blocks = $self->{'buffer'}=~/(.{1,$bs})/ogs; $self->{'buffer'} = ''; if ($d) { # when decrypting, always leave a free block at the end $self->{'buffer'} = length($blocks[-1]) < $bs ? join '',splice(@blocks,-2) : pop(@blocks); } else { $self->{'buffer'} = pop @blocks if length($blocks[-1]) < $bs; # what's left over } foreach my $block (@blocks) { if ($d) { # decrypting $result .= $iv ^ $self->{'crypt'}->decrypt($block); $iv = $block; } else { # encrypting $result .= $iv = $self->{'crypt'}->encrypt($iv ^ $block); } } $self->{'civ'} = $iv; # remember the iv return $result; } # this is called at the end to flush whatever's left sub finish (\$) { my $self = shift; my $bs = $self->{'crypt'}->blocksize; my $block = $self->{'buffer'}; $self->{civ} ||= ''; my $result; if ($self->{'decrypt'}) { #decrypting $block = pack("a$bs",$block); # pad and truncate to block size if (length($block)) { $result = $self->{'civ'} ^ $self->{'crypt'}->decrypt($block); substr($result,-unpack("C",substr($result,-1)))=''; } else { $result = ''; } } else { # encrypting # in case we had an even multiple of bs $block = pack("C*",($bs)x$bs) unless length($block); if (length($block)) { $block .= pack("C*",($bs-length($block)) x ($bs-length($block))) if length($block) < $bs; $result = $self->{'crypt'}->encrypt($self->{'civ'} ^ $block); } else { $result = ''; } } delete $self->{'civ'}; delete $self->{'buffer'}; return $result; } ## Crypt 1.20 compatibility # call to encrypt/decrypt a bit of data sub crypt120 (\$$){ my $self = shift; my $data = shift; croak "crypt() called without a preceding start()" unless $self->{'civ'}; $self->{'buffer'} .= $data; my $iv = $self->{'civ'}; my $bs = $self->{'crypt'}->blocksize; my $d = $self->{'decrypt'}; return '' unless length($self->{'buffer'}) >= $bs; my @blocks = $self->{'buffer'}=~/(.{$bs})/ogs; if ($d) { # when decrypting, always leave a free block at the end $self->{'buffer'} = pop(@blocks) . $'; } else { $self->{'buffer'} = $'; # what's left over } $self->{'buffer'} ||= ''; # warn "CBC::crypt buffer = ".$self->{'buffer'}; my ($result); foreach my $block (@blocks) { if ($d) { # decrypting # warn "CBC dec block len = ".length($block); $result .= $iv ^ $self->{'crypt'}->decrypt($block); $iv = $block; } else { # encrypting $result .= $iv = $self->{'crypt'}->encrypt($iv ^ $block); } } $self->{'civ'} = $iv; # remember the iv # warn "pe buffer = ".$self->{'buffer'}; return $result; } # this is called at the end to flush whatever's left sub finish120 (\$) { my $self = shift; my $bs = $self->{'crypt'}->blocksize; my $block = $self->{'buffer'} || ''; # warn "civ = $self->{civ}"; $self->{civ} ||= ''; my $result; if ($self->{'decrypt'}) { #decrypting # warn "CBC finish decryption blocklen = ".length($block); $block = unpack("a$bs",$block); # pad and truncate to block size if (length($block)) { $result = $self->{'civ'} ^ $self->{'crypt'}->decrypt($block); substr($result,-unpack("C",substr($result,-1)))=''; } else { $result = ''; } } else { # encrypting # in case we had an even multiple of bs # warn "CBC finish encryption blocklen = ".length($block); $block = pack("C*",($bs)x$bs) unless length($block); if (length($block)) { $block .= pack("C*",($bs-length($block)) x ($bs-length($block))) if length($block) < $bs; $result = $self->{'crypt'}->encrypt($self->{'civ'} ^ $block); } else { $result = ''; } } delete $self->{'civ'}; delete $self->{'buffer'}; return $result; } 1; __END__ =head1 NAME Crypt::CBC - Encrypt Data with Cipher Block Chaining Mode =head1 SYNOPSIS use Crypt::CBC; $cipher = new Crypt::CBC('my secret key','IDEA'); $ciphertext = $cipher->encrypt("This data is hush hush"); $plaintext = $cipher->decrypt($ciphertext); $cipher->start('encrypting'); open(F,"./BIG_FILE"); while (read(F,$buffer,1024)) { print $cipher->crypt($buffer); } print $cipher->finish; =head1 DESCRIPTION This module is a Perl-only implementation of the cryptographic cipher block chaining mode (CBC). In combination with a block cipher such as DES or IDEA, you can encrypt and decrypt messages of arbitrarily long length. The encrypted messages are compatible with the encryption format used by B. To use this module, you will first create a new Crypt::CBC cipher object with new(). At the time of cipher creation, you specify an encryption key to use and, optionally, a block encryption algorithm. You will then call the start() method to initialize the encryption or decryption process, crypt() to encrypt or decrypt one or more blocks of data, and lastly finish(), to flush the encryption stream. For your convenience, you can call the encrypt() and decrypt() methods to operate on a whole data value at once. =head2 new() $cipher = new Crypt::CBC($key,$algorithm); The new() method creates a new Crypt::CBC object. You must provide an encryption/decryption key, which can be any series of characters of any length. Internally, the actual key used is derived from the MD5 hash of the key you provide. The optional second argument is the block encryption algorithm to use, specified as a package name. You may use any block encryption algorithm that you have installed. At the time this was written, only two were available on CPAN, Crypt::DES and Crypt::IDEA. You may refer to them using their full names ("Crypt::IDEA") or in abbreviated form ("IDEA".) If no algorithm is provided, DES is assumed. =head2 start() $cipher->start('encrypting'); $cipher->start('decrypting'); The start() method prepares the cipher for a series of encryption or decryption steps, resetting the internal state of the cipher if necessary. You must provide a string indicating whether you wish to encrypt or decrypt. "E" or any word that begins with an "e" indicates encryption. "D" or any word that begins with a "d" indicates decryption. =head2 crypt() $ciphertext = $cipher->crypt($plaintext); After calling start(), you should call crypt() as many times as necessary to encrypt the desired data. =head2 finish() $ciphertext = $cipher->finish(); The CBC algorithm must buffer data blocks inernally until they are even multiples of the encryption algorithm's blocksize (typically 8 bytes). After the last call to crypt() you should call finish(). This flushes the internal buffer and returns any leftover ciphertext. In a typical application you will read the plaintext from a file or input stream and write the result to standard output in a loop that might look like this: $cipher = new Crypt::CBC('hey jude!'); $cipher->start('encrypting'); print $cipher->crypt($_) while <>; print $cipher->finish(); =head2 encrypt() $ciphertext = $cipher->encrypt($plaintext) This convenience function runs the entire sequence of start(), crypt() and finish() for you, processing the provided plaintext and returning the corresponding ciphertext. =head2 decrypt() $plaintext = $cipher->decrypt($ciphertext) This convenience function runs the entire sequence of start(), crypt() and finish() for you, processing the provided ciphertext and returning the corresponding plaintext. =head2 encrypt_hex(), decrypt_hex() $ciphertext = $cipher->encrypt_hex($plaintext) $plaintext = $cipher->decrypt_hex($ciphertext) These are convenience functions that operate on ciphertext in a hexadecimal representation. B is exactly equivalent to B. These functions can be useful if, for example, you wish to place the encrypted information into an e-mail message, Web page or URL. =head1 EXAMPLES Two examples, des.pl and idea.pl can be found in the eg/ subdirectory of the Crypt-CBC distribution. These implement command-line DES and IDEA encryption algorithms. =head1 LIMITATIONS The encryption and decryption process is about a tenth the speed of the equivalent SSLeay programs (compiled C). This could be improved by implementing this module in C. It may also be worthwhile to optimize the DES and IDEA block algorithms further. =head1 BUGS None that I know of. =head1 AUTHOR Lincoln Stein, lstein@cshl.org =head1 SEE ALSO perl(1), Crypt::DES(3), Crypt::IDEA(3) =cut opensrs-client-3.0.0/lib/XML_Codec.pm0000644017777601777760000002714010770014212020377 0ustar nobodynogroup00000000000000# # XML_Codec # # - Encodes perl data structures into XML representation # - Decodes XML into perl data structures # # Dependencies: # XML:Parser module must be installed # # History # 2000-06-05 vm First version, based on some routines in XML::Dumper # 2000-06-16 vm Fixed xml escaping routine to ignore undefined values # 2000-06-21 vm Removed uncessary call to xml_to_data, improving performance package XML_Codec; use strict; use vars qw($_SPACER $_CRLF $can_utf8_off); $_SPACER = " "; # indent character $_CRLF = "\n"; use strict; use vars qw($VAR1 $VERSION); use XML::Parser; if ($] >= 5.008) { eval { require Data::Structure::Util; $can_utf8_off = 1; }; if ($@){ die "You must install Data::Structure::Util for proper UTF8 to byte handling with your version of Perl $]" } } $VERSION = '0.2'; use bytes; # # sub: new # # - constructor # sub new { my ($class, %args) = @_; my $option = $args{option}; my $self = {}; if ( defined($option) ) { if ($option eq 'compress') { # use compression, turn off all spaces and newlines # print "DEBUG--compression on\n"; $_SPACER = ""; $_CRLF = ""; } } return bless $self,$class; } # # sub: data_to_xml # # wrapper for converting data structure to XML # - we dont really need this, just calle data_to_xml_string directly! # sub data_to_xml { my ($obj,$ref) = @_; return $obj->data_to_xml_string($ref); } # # sub: data_to_xml_string # # converts a data structure to an string (xml) # sub data_to_xml_string { my ($obj,$ref) = @_; return( $_SPACER x 2 . "" . &Tree2XML($ref, 3) . $_CRLF . $_SPACER x 2 . "" ); } # # sub: Tree2XML # # takes a data structure reference and converts it to XML # representation # sub Tree2XML { my ($ref, $indent) = @_; my $string = ''; # SCALAR REFERENCE if (defined(ref($ref)) && (ref($ref) eq 'SCALAR')) { $string .= $_CRLF . $_SPACER x $indent . "" . "e_XML_chars($$ref) . ""; } # ARRAY REFERENCE elsif (defined(ref($ref)) && (ref($ref) eq 'ARRAY')) { $string .= $_CRLF . $_SPACER x $indent . ""; $indent++; my $j = 0; for (my $i=0; $i < @$ref; $i++) { # don't encode objects that are DBI thingies because # they are useless when decoded because they aren't # "magic" anymore (i.e. no connection to DB, etc...) if ( ref($ref->[$i]) =~ /^DBI/ ) { next; } $string .= $_CRLF . $_SPACER x $indent . "[$i]) =~ /^(ARRAY|SCALAR|HASH)$/ || ref($ref->[$i]) =~ /^$/ ) ) { $string .= " class=\"". ref($ref->[$i]) ."\""; } $string .= ">"; if (ref($ref->[$i])) { $string .= &Tree2XML($ref->[$i], $indent+1); $string .= $_CRLF . $_SPACER x $indent . ""; } else { $string .= "e_XML_chars($ref->[$i]) . ""; } $j++; } $indent--; $string .= $_CRLF . $_SPACER x $indent . ""; } # HASH REFERENCE # dmanley -- 2000/07/08 -- don't just check for HASH but for # non blank too because that will account for object references # which are normally hashes anyway. #elsif (defined(ref($ref)) && (ref($ref) eq 'HASH')) { elsif (defined(ref($ref)) && ( (ref($ref) eq 'HASH') || ref($ref) ne '' ) ) { $string .= $_CRLF . $_SPACER x $indent . ""; $indent++; foreach my $key (keys(%$ref)) { # don't encode objects that are DBI thingies because # they are useless when decoded because they aren't # "magic" anymore (i.e. no connection to DB, etc...) if ( ref($ref->{$key}) =~ /^DBI/ ) { next; } $string .= $_CRLF . $_SPACER x $indent . "{$key}) =~ /^(ARRAY|SCALAR|HASH)$/ || ref($ref->{$key}) =~ /^$/ ) ) { $string .= " class=\"". ref($ref->{$key}) ."\""; } $string .= ">"; if (ref($ref->{$key})) { $string .= &Tree2XML($ref->{$key}, $indent+1); $string .= $_CRLF . $_SPACER x $indent . ""; } else { $string .= "e_XML_chars($ref->{$key}) . ""; } } $indent--; $string .= $_CRLF . $_SPACER x $indent . ""; } ## SCALAR else { $string .= $_CRLF . $_SPACER x $indent . "" . "e_XML_chars($ref) . ""; } return($string); } # # sub: quote_XML_chars # # quote special XML characters # sub quote_XML_chars { my $n = shift; if ( defined ( $n ) ) { $n =~ s/&/&/g; $n =~ s//>/g; $n =~ s/'/'/g; $n =~ s/"/"/g; $n =~ s/([\x80-\xFF])/&UTF8_encode(ord($1))/ge; $n =~ s/[\x00-\x08\x0b-\x0c\x0e-\x1f]//sg; return($n); } #if ( defined ( $_[0] ) ) #{ # $_[0] =~ s/&/&/g; # $_[0] =~ s//>/g; # $_[0] =~ s/'/'/g; # $_[0] =~ s/"/"/g; # $_[0] =~ s/([\x80-\xFF])/&UTF8_encode(ord($1))/ge; # $_[0] =~ s/[\x00-\x08\x0b-\x0c\x0e-\x1f]//sg; # return($_[0]); #} } # OpenSRS-grown encoder for high-end ASCII encoding. # Allows encoding of high-end character (128-255) into "@#nnn;" where nnn is # dec ascii representation. sub XML_encode{ my $n = shift; return "\@\#$n;"; } # # sub: UTF8_encode # # convert to UTF8 encoding # NOTE: Not used at this time. # sub UTF8_encode { my $n = shift; if ($n < 0x80) { return chr ($n); } elsif ($n < 0x800) { return pack ("CC", (($n >> 6) | 0xc0), (($n & 0x3f) | 0x80)); } elsif ($n < 0x10000) { return pack ("CCC", (($n >> 12) | 0xe0), ((($n >> 6) & 0x3f) | 0x80), (($n & 0x3f) | 0x80)); } elsif ($n < 0x110000) { return pack ("CCCC", (($n >> 18) | 0xf0), ((($n >> 12) & 0x3f) | 0x80), ((($n >> 6) & 0x3f) | 0x80), (($n & 0x3f) | 0x80)); } return $n; } sub UTF8_decode { my ($str, $hex) = @_; my $len = length ($str); my $n; if ($len == 2) { my @n = unpack "C2", $str; $n = (($n[0] & 0x3f) << 6) + ($n[1] & 0x3f); } elsif ($len == 3) { my @n = unpack "C3", $str; $n = (($n[0] & 0x1f) << 12) + (($n[1] & 0x3f) << 6) + ($n[2] & 0x3f); } elsif ($len == 4) { my @n = unpack "C4", $str; $n = (($n[0] & 0x0f) << 18) + (($n[1] & 0x3f) << 12) + (($n[2] & 0x3f) << 6) + ($n[3] & 0x3f); } elsif ($len == 1) # just to be complete... { $n = ord ($str); } else { die "bad value [$str] for UTF8_decode"; } $hex ? sprintf ("&#x%x;", $n) : chr($n); } # # sub: xml_to_data # # accepts and XML parse tree and converts it to a perl data structure # sub xml_to_data { my ($obj,$tree) = @_; ## Skip enclosing "data_block" level my $TopItem = $tree->[1]; my $ref = &Undump($TopItem); return($ref); } # # sub: Undump # # Takes a parse tree and recursively # undumps it to create a data structure in memory. # The top-level object is a scalar, a reference to a scalar, a hash, or an array. # Hashes and arrays may themselves contain scalars, or references to # scalars, or references to hashes or arrays. # NOTE: One exception is that scalar values are never "undef" because # there's currently no way to accurately represent undef in the dumped data. # sub Undump { my ($Tree) = shift; my $ref = undef; my $FoundScalar; my $i; for ($i = 1; $i < $#$Tree; $i+=2) { if (lc($Tree->[$i]) eq 'dt_scalar') { # process scalar datatype # Make a copy of the string $ref = $Tree->[$i+1]->[2]; last; } if (lc($Tree->[$i]) eq 'dt_scalarref') { # process scalar reference datatype # Make a ref to a copy of the string $ref = \ $Tree->[$i+1]->[2]; last; } elsif (lc($Tree->[$i]) eq 'dt_assoc') { # process associative array (hash) datatype $ref = {}; my $j; for ($j = 1; $j < $#{$Tree->[$i+1]}; $j+=2) { next unless $Tree->[$i+1]->[$j] eq 'item'; my $ItemTree = $Tree->[$i+1]->[$j+1]; next unless defined(my $key = $ItemTree->[0]->{key}); $ref->{$key} = &Undump($ItemTree); if ( exists $ItemTree->[0]->{class} ) { bless( $ref->{$key}, $ItemTree->[0]->{class} ); } } last; } elsif (lc($Tree->[$i]) eq 'dt_array') { # process array datatype $ref = []; my $j; for ($j = 1; $j < $#{$Tree->[$i+1]}; $j+=2) { next unless $Tree->[$i+1]->[$j] eq 'item'; my $ItemTree = $Tree->[$i+1]->[$j+1]; next unless defined(my $key = $ItemTree->[0]->{key}); $ref->[$key] = &Undump($ItemTree); if ( exists $ItemTree->[0]->{class} ) { bless( $ref->[$key], $ItemTree->[0]->{class} ); } } last; } elsif (lc($Tree->[$i]) eq '0') { # process scalar datatype $FoundScalar = $Tree->[$i + 1] unless defined $FoundScalar; } else { # Unrecognized tag. Just move on. } } # If $ref is not set at this point, it means we've just # encountered a scalar value directly inside the item tag. $ref = $FoundScalar unless defined($ref); if ($ref) { $ref =~ s/([\xC0-\xDF].|[\xE0-\xEF]..|[\xF0-\xFF]...)/$1 && &UTF8_decode($1)/egs if $ref; if ($can_utf8_off){ Data::Structure::Util::_utf8_off($ref); } } # print "-- $ref --"; # $ref =~ s/(\@\#(\d+))\;/chr($2)/ge; done: return ($ref); } # # sub: decode # # Accepts and XML protocol string and decodes it into a perl reference # sub decode { my ($obj,$tree) = @_; return($obj->xml_to_data($tree)); } # # sub: encode # # Accepts a perl reference and encodes it into an XML protocol string # sub encode { my ($obj,$ref) = @_; return($obj->data_to_xml_string($ref)); } 1; __END__ =head1 NAME XML_Codec - Encoder/Decoder for Perl memory structures to XML =head1 SYNOPSIS use XML_Codec; my $xml = new XML_Codec; # encode $xml_string = $xml->encode($hash_ref); # decode $hash_ref = $xml->decode($xml_string); =head1 DESCRIPTION XML_Coded is a module that encodes perl data structures into XML representation and decodes the same XML representation into perl data structures. =head1 METHODS =over 4 =item new This is a class method, the constructor for XML_Codec. Options are passed as keyword value pairs. Recognized options are : =over 4 =item * option Currently the only recognized option is "compress". This turns on XML compression by removing irrelevant whitespace and newline characters. =back =item encode(HASH REF) This method encodes a hash structure into an XML based representation. You must pass a reference to a hash. Any arbitrary data structure is supported (e.g. a hash or array, or a hash of array of hashes of hashes, and so on.) The method returns a string. =over 4 =item example: example code =back =item decode(STRING) This method decodes a string which contains an XML representation of a hash structure (such as that returned by the L<"encode"> method) and turns it back into a perl hash structure. The method returns a reference to a hash. =over 4 =item example: example code =back =head1 AUTHOR Victor Magdic, Tucows Inc. =back =cut opensrs-client-3.0.0/lib/Core/0000755017777601777760000000000010770014215017173 5ustar nobodynogroup00000000000000opensrs-client-3.0.0/lib/Core/Exception.pm0000644017777601777760000001206610770014215021474 0ustar nobodynogroup00000000000000# .Copyright (C) 1999-2002 TUCOWS.com Inc. # .Created: 11/19/1999 # .Contactid: # .Url: http://www.opensrs.org # .Originally Developed by: # Tucows/OpenSRS # .Authors: Leonid Igolnik, # Evgeniy Pirogov # # # This program is free software; you can redistribute it and/or # modify it under the terms of the GNU Lesser General Public # License as published by the Free Software Foundation; either # version 2.1 of the License, 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 # Lesser General Public License for more details. # # You should have received a copy of the GNU Lesser General Public # License along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA package Core::Exception; use strict; #BEGIN { # *CORE::GLOBAL::die = sub { # if ($Core::Exception::In_Try) { # throw('internal', @_); # } else { # CORE::die(@_); # } # } #} use Exporter; use vars qw ( @ISA @EXPORT ); @ISA = qw ( Exporter ); @EXPORT = qw ( try catch strict_throw throw ); # Set while try block is executed use vars '$In_Try'; #use Core::Exception; # #try { # print "in try\n"; # throw "ErrorState",{q=>1,e=>2,r=>3}; # throw "ErrorState %s", $file; # die "crazi fish\n"; # } catch { # _final => sub { my $Er = shift; print "finally\n";}, # ErrorState => sub { my $Er = shift; print "Catcher\n";}, # _other => sub { my $Er = shift; print "otherwise\n";}, # qr/DBI/is => sub { my $Er = shift; print "DBI Error",$Er->info,"\n";}, # } #; sub try (&$) { my($try, $catchers) = @_; # Set the flag to indicate that we are inside try block $In_Try++; # Try the code. eval { #clean old error message local($SIG{'__DIE__'}); &$try() }; # Reset the flag $In_Try--; my $_error = $@; my $lE; if ($_error) { #perl doesn't initialize $! when die in DESTROY $lE = ref $_error eq 'Core::Exception::Err' ? $_error : new Core::Exception::Err 0, 'internal', $_error; undef $@; } if (exists $catchers->{'_final'}) { my $finally = $catchers->{'_final'}; &$finally($lE); } if (defined $lE) { my $catcher = $catchers->{$lE->name}; unless ($catcher) { #check regexp catchers at first my @all_catchers = keys %$catchers; my $regexp_catcher; # Check all regexp rules foreach (grep /^\(\?/, @all_catchers){ next unless $lE->info =~ /$_/; $catcher = $catchers->{$_}; last; } } $catcher ||= $catchers->{'_other'} unless $lE->strict; throw($lE) if not defined $catcher; &$catcher($lE); } #if } sub catch ($) { shift; } sub throw { Core::Exception::Err->_throw(0, @_); } sub strict_throw { Core::Exception::Err->_throw(1, @_); } 1; package Core::Exception::Err; use Data::Dumper; use vars qw($AUTOLOAD); use Carp qw(croak); my %fields = ( callstack => undef, name => undef, info => undef ); sub new { my $class = shift; $class = ref($class) || $class; $fields{strict} = shift; my $name = shift; $name ||= 'internal'; $fields{'name'} = $name; my $info = shift; if (defined $info && not ref $info) { if (scalar @_ == 0) { unshift @_, $info; $info = '%s'; } $fields{'info'} = sprintf $info, @_; if ($fields{name} eq 'internal') { $fields{name} = 'db' if $fields{info} =~ /DBD|DBI/; } } else { $fields{'info'} = $info; } { my $i = 0; my $callstack; my ($pkg, $file, $line); while (($pkg, $file, $line) = caller($i++)) { next if $pkg =~ /^Core::Exception/; $callstack.="\n[$$ module:$pkg,file:$file,line:$line] "; } $fields{'callstack'} = $callstack; } my $self = { %fields, }; bless $self, $class; return $self; } sub DESTROY { # Prevent AUTOLOAD from catching DESTROY } sub AUTOLOAD { my $self = shift; my $type = ref($self) || croak "$self is not an object AUTOLOAD == $AUTOLOAD"; my $name = $AUTOLOAD; $name =~ s/.*://; # strip fully-qualified portion unless (exists $self->{$name} ) { croak "There is no such `$name' field in object of class $type"; } return $self->{$name}; } sub dump { my $self = shift; my $dump = "Exception:" . $self->name . ($self->strict ? '(strict)' : '') . "\nCallStack " . $self->callstack."\n" . ($self->info ? Dumper($self->info) : ""); } sub _throw { my ($self, $strict, $obj_or_type, @args) = @_; my $class; my $exception; if (ref $obj_or_type eq 'Core::Exception::Err') { $exception = $obj_or_type; } else { $exception = $self->new($strict, $obj_or_type, @args); } if ($Core::Exception::In_Try) { CORE::die $exception; } else { CORE::die $exception->dump; } } 1; opensrs-client-3.0.0/lib/Core/Checksum.pm0000644017777601777760000000350510770014215021276 0ustar nobodynogroup00000000000000# .Copyright (C) 1999-2002 TUCOWS.com Inc. # .Created: 11/19/1999 # .Contactid: # .Url: http://www.opensrs.org # .Originally Developed by: # Tucows/OpenSRS # .Authors: Igor Kolomiets # # # This program is free software; you can redistribute it and/or # modify it under the terms of the GNU Lesser General Public # License as published by the Free Software Foundation; either # version 2.1 of the License, 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 # Lesser General Public License for more details. # # You should have received a copy of the GNU Lesser General Public # License along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA # Simple wrapper to Digest::MD5 library that provides # calculate() function for creating checksum on a given # array of values and compare() function to compare # derived checksum with an expected one. # # $Id$ package Core::Checksum; use strict; use warnings; use Digest::MD5 qw(md5_hex); use Core::Exception; use vars qw(@ISA @EXPORT_OK); require Exporter; @ISA = qw(Exporter); @EXPORT_OK = qw(calculate compare); use Data::Dumper; sub calculate { my @args = @_; my $md5 = md5_hex(@args); return $md5; } sub compare { my $digest = shift; my @args = @_; if (not defined $digest) { throw 'dev', 'Undefined checksum'; } $digest = lc $digest; $digest =~ s/[^0-9a-f]//g; return $digest eq calculate(@args) ? 1 : 0; } 1; opensrs-client-3.0.0/logo.gif0000644017777601777760000000326010770014202017161 0ustar nobodynogroup00000000000000GIF89aéÄÿÀÀÀïöøßìñÏãê¿Ùã¯ÐÜŸÆÕ½Î³ÇpªÁ`¡ºP—³@ެ0„¥ {žq—h!ù,é@ÿ Ždižhª®lë¾p,Ït6P>D®œoÈ !!ÄáPBŒNŸ@”ðíǤ2ð=HÍœA`D! Ñ@Mª¿àypT >†6]WNûVx9jlJd^NE$gyj^p "Ž9’9 #Z˜=9 ‘l‘>Ÿšœ"¡) >° CS]>  8˜9©«ª ²f9 ÌÏ"£h¦¨"ÑÊÔÖ9˜­> ´ž"ê‘ÈÇ*®Q 6ö'ɬ5ím÷&ùö­¸ö ¸KÿN Ëá D¶på˜2"LÃ…Ê*2!‚®ŽNư(c=)ÿš0ð(Gb ¤ÁRŒ’)ypeæË‰$">饔‘G˜P3¦Æ%$HJµªÕ«X³jÝʵ«×¯R‰K¶¬Y« ÓÚ;0U¥Ú·%ØJu —©¶àbldÞ‡»L1à‚Á 9"@³À ¼{!À0cMOèÐpäÉJÍâqd•EW8öü¹Dj.¸BX0 WË{ãcp»p®@ࣀläNx3¶N7á:hç ¬¹wpLŽö¥ãvÌõÁÛÝØ¥A-0­ÜÇ»óä…@åƒ]o*>„“8B[NŽ"‘0“|#Xr…N„ttÅÿ.hà÷9ü•“„œÀà_ÄFÒ•ÀacÅ9m@i H‚Š?˜)"°#…ÎåEƒnðö RQ0°{% †ú-uSR·hX‡®ˆ„“‘IuBf%x3ßpCŽ“Àdr-Ó”“IÐG—`HC¯-Ùäf¦†L²„-_>ÅW]xæùHÅ‘¨çŸ€*è „(Fnþh( 8ÕД è÷V£+(˜Z–J¥GzrÈ¢(@À¨¤ÅÀà#zJ@©'Èx«ŽJ×[¸‘¡”ÃÉÙm®°5„d 8Â:}e£)AɶÁŠ…k #zR6Ú‘ €ŽK€Þ`ÌÄrÛÔÑ`›ªdûźCýL·Úb 'l#•1Î?¡@0ÿ 0ÿ "ÿÿÿÿþ0 & %þPÿdþR·þTÿ\ þ1 þ3ÿýþ4þOÿþ5ÿ[ÿ]þ70þ90þ;0 þ=0þ?0 þA0þCþY^¡¡þ[  0 5 2ÿÿÿ  ;§0%Ë%Ï%³%²%Î&&%Ç%Æ%¡% %½%¼2£! >ÿýÿ?ÿýþIþMþKþ_ÿ ÿ ×÷±"ÿÿÿ"f"`""R"aþb"<")"¥" ""¿3Ò3Ñ"+"."5"4&@&B&A& !‘!“!!’!–!™!˜"%"#ÿý?¢@ÿýÿÿ<ÿ¥0¢ÿÿ !! þi3Õ3œ3Î3¡3Ž3İQYQ[Q^Q]QaQcUçté|Î%%%Ž%%Œ%‹%Š%‰%<%4%,%$%%”%%%•% %%%%m^¢¡%n%p%o%P%^%j%a%â%å%ä%q ÿ !` 0!ÿýSDÿýÿ!ÿA?£@ÿW‘£±à 1£¡1ÙÉÇË?¤@NNYNNNCN]N†NŒNºQ?QeQkQàRR›SSAS\SÈN N NN N+N8QáNENHN_N^NŽN¡Q@RRúSCSÉSãWXëYY'Ys[P[S[ø\\"\8\q]Ý]å]ñ]þ^r^þ_ _bM^¤¡NNN N-N0N9NK\9NˆN‘N•N’N”N¢NÁNÀNÃNÆNÍNÊNÄQCQAQgQmQlQ—QöRRûRþSS9SHSGSES^S„SËSÊSÍXìY)Y+Y*Y-[T\\$\:\o]ô^{^ÿ__Ãbb6bKbNe/e‡e—e¤e¹eåfðgg(k kbkykËkÔkÛll4pkr*r6r;rGrYr[r¬s‹N?¥@NNNNN;NMNONNNåNØNÔNãNÙNÞQEQDQ‰Q¬QùQøR R RŸSSSNßSJSISaS`SoSnS»SïSäSóSìSîSéSèSüSøSõSëSæSêSòSñSðSåSíSûVÛVÚY^¥¡Y.Y1YtYv[U[ƒ\<]è]ç]æ^^s^|____Åb bSbRbQe¥eæg.g,g*g-kckÍlll8lAl@l>r¯s„s‰tÜtæuuu(u0u‹v}v®v¿vîwÛwâwóy:y¾ztzËNNRNiN™N¤N¦N¥NÿO OO OO OONòNöNûNðNóNýOO QIQGQFQHQh?¦@QqQQ°RRRRR£SS!S SpT TT T TTT TTT TTTTTVàVÞVÝW3W0W(W-W,W/W)YY7Y„YxYƒY}YyY‚Y[W[‡[…[‰[ú\\y]Þ^^v^t^¦¡___Ù_Öbb bbcb[bXe6eéeèeìfòg g=g4g1g5k!kdk{ll]lWlYl_lPlUlal[lMppr_r]v~zù|s|ø6н€€€ €€3€€‰€‹ãêóü‚ ‚‚‚n‚r‚~†kˆ@ˆLˆc‰–!N2N¨OMOOOGOWO^O4O[OUO0OPO=O:O8OCOTO<OFOc?§@O\O`O/ONO6OYO]OHOZQLQKQMQuQ¶R%R$R)R(R«R©R¬S#SsSuTT-TT>T&TNT'TFTCT3THTBTT)TJT9T;T8T.T5T T<T@T1T+TT,VêVðVäVëWJWQW@WM^§¡WGWNW>WPWOW;XïY>YY’Y¨YžY£Y™Y–YY¤Y“YŠY¥[][\[Z[Œ[‹[\,\@\?\>\\”\Œ]ë^ ^^‡^Š^÷___d_b_w_y_Ø_Ì_×_Í_ñ_ë_ø_êbbb„b—b–b€bvb‰bmbŠb|b~bybsb’bob˜bnb•b“b‘b†e9e;e8eñfôg_gNg\gVg^gIgFg`?¨@gSgWkekÏlBl^l™llˆl…l›ljlzllplŒlhl–l’l}lƒlrl~ltl†lvll”l˜l‚pvp|pxrbrar`rÄrÂs–u,u+u7v‚vïwãyÁyÀy¿zv|ûU€–€“€€˜€›€š€²‚o‚’^¨¡‚‹‚‰‹‰ÒŠŒ7ŒFŒUŒdp³Ž«ŽÊ›°ÂÆÅÄ]á‘¢ª¦£‘I‘Ƒ̖2–.–1–*–,N&NVNsN‹N›NžN«OoOOOsOOlO›O‹O†OƒOpOuOˆOiO{O–O~OO‘OzQTQRQUQiQwQvQxQ½QýR;R8R7R:R0R.R6RAR¾R»SRSTSSSQSfSwSÖSÔS×TsTu?©@T–TxT•T€T{TwT„T’T†T|TTqTvTŒTšTbThT‹T}TŽVúWƒWwWjWiWaWfWdW|YYIYGYDYTY¾Y»YÔY¹Y®YÑYÆYÐYÍYËYÓYÊY¯Y³YÒYÅ[_[d[c[—[š[˜[œ[™[›\\H\E^©¡\F\·\¡\¸\©\«\±\³^^^^^^^x^š^—^œ^•^ö_&_)_€__|_Ý_à_ý_õ_ÿ```/`5``*``!`'`)`+`bbb?b>b@bbÉbÌbÄb¿bÂb¹bÒbÛb«bÓbËbÈb¨b½b¼bÐbÙbÇbÍbµbÚb±bØbÖbÆb¬bÎe>e§e¼eúfff fffffff ?ª@fg g gmg‹g•gqgœgsgwg‡gg—gogg‰g~ggugšg“g|gjgrk#kfklllãlèlól±lÌlål³l½l¼lâl«lÕlÓl¸lÄl¹lÁl®l×lÅlñl¿l»lálÛlÊl¬lïlÜlÖlà^ª¡p•pŽp’pŠp™r,r8rHrgrirÀrÎrÙr×rÐs©s¨sŸs«s¥u=uu™v„vÂvòvôwåwýy>y@yÉyÈzzzyzú|þTŒ‹€€º€¥€¢€±€¡€«€©€´€ª€¯åþ‚ ‚³‚‚™‚­‚½‚Ÿ‚¹‚±‚¬‚¥‚¯‚¸‚£‚°‚¾‚·†N†qRˆhŽËÎÔѵ¸±¶‘Ǒѕw•€––@–?–;–D?«@–B–¹–è—R—^NŸN­OáOµO¯O¿OàOÑOÏOÝOÃO¶OØOßOÊO×O®OÐOÄOÂOÚOÎOÞO·QWQ’Q‘Q RNRCRJRMRLRKRGRÇRÉRÃRÁS SWS{SšSÛT¬TÀT¨TÎTÉT¸T¦T³TÇTÂT½TªTÁ^«¡TÄTÈT¯T«T±T»T©T§T¿VÿW‚W‹W W£W¢WÎW®W“YUYQYOYNYPYÜYØYÿYãYèZYåYêYÚYæZYû[i[£[¦[¤[¢[¥\\N\M\K\Ù\Ò]÷^^%^^}^ ^¦^ú__-_e_ˆ_…_Š_‡_Œ_‰``` `%``(`M`p`h`b`F`C`l`k`j`dbAbÜcc bübícbîbýcbñb÷?¬@bïbìbþbôcce?eEe«e½eâf%f-f f'f/ff(f1f$f÷gÿgÓgñgÔgÐgìg¶g¯gõgégïgÄgÑg´gÚgåg¸gÏgÞgóg°gÙgâgÝgÒkjkƒk†kµkÒk×llÉm m2m*mAm%m m1mm^¬¡m;m=m6mlõm9m'm8m)m.m5mm+p«pºp³p¬p¯p­p¸p®p¤r0rrrortréràs·sÊs»s²sÍsÀs³uu-uOuLuNuKu«u¤u¢vxv†vÈvÆvÃvÅwvùvøw w vþvüwwÜxxx yFyIyHyGy¹yÑyËzzzÿzý|}}}}} }}}8Ž¿€?­@€€ €€6€Ö€å€Ú€Ã€Ì€á€Û€Î€Þ€ä€Ýô‚"‚烃‚ã‚ۂ惂僃 ‚҂ׂñƒ‚܂Ԃтނӂ߂P†y†{†zˆMˆk‰‰ÔŠŠŒžŒ ts´ŽÍŽÌðæâêå^­¡íëäèÊÎÁÑK‘J‘Í•‚–P–K—b—i—Ë—í—󘘨˜Û˜ß™–™™NXN³P P#OïP&P%OøP)PPP<PPPPOúPPP(OñP!P PPOóOîP-P*OþP+P Q|Q¤Q¢QÍQÌQÆQËRVR\RTR[R]S*SSŸSSßTèUUU7TüTåTòUTúUTéTíTáU TîTê?®@TæU'UTýUWWÂWÔWËWÃX YYWYZZZZZZZYìZ Z#Z)Z%Z Z [k\X[°[³[¶[´[®[µ[¹[¸\\Q\U\P\í\ý\û\ê\è\ð\ö]\ô]î^-^+^«^­^§_1_’_‘_`Y^®¡`c`e`P`U`m`i`o`„`Ÿ`š``”`Œ`…`–bGbócbÿcNc>c/cUcBcFcOcIc:cPc=c*c(cMcLeHe™eÁeÅfBfIfOfCfRfLfEfAføggh!h8hHhFhSh9hBhTh)h³hhLhQh=gôhPh@h<hCh*hEhhhAkŠk‰k·l#l'l&l$lðmjm•mˆm‡mfmxmwmYm“?¯@mlm‰mnmZmtmimŒmŠmym…mem”pÊpØpäpÙpÈpÏr9ryrürùrýrør÷s†sít sîsàsêsÞuTu]u\uZuYu¾uÅuÇu²u½u¼u¹uÂu¸v‹v°vÊvÍw)ww(wéx0x'x8xx4x7^¯¡x%x-x xx2yUyPy`y_yVy^y]yWyZyäyãyçyßyæyéyØz„zˆzÙ{{|‰}!}} } } }"}}}}}} }}:_”ÅÁ€€€€€€=€?€ñ€ð€í€ô€ø€ó€ý €ü€ïíì‚‚‚*‚(‚,‚»ƒ+ƒRƒTƒJƒ8ƒPƒIƒ5ƒ4ƒOƒ2ƒ9ƒ6ƒƒ@ƒ1ƒ(ƒC?°@†T†Š†ª†“†¤†©†Œ†£†œˆpˆwˆˆ}ˆyŠŠŠŠ ŠŠ ŠŠŠŠŠŒHŒzŒyŒ¡wެŽÒŽÔŽÏ±÷úôýø•áÝâ‘R‘M‘L‘ؑݑבܑٕƒ–b–a^°¡–[–]–d–X–^–»˜â™¬š¨šØ›%›2›<N~PzP}P\PGPCPLPZPIPePvPNPUPuPtPwPOPPoPmQ\Q•QðRjRoRÒRÙRØRÕSSSS?S>SÃfüUFUjUfUDU^UaUCUJU1UVUOUUU/UdU8U.U\U,UcU3UAUWWW W WßXX XWàWäWúXX5W÷WùY YbZ6ZAZIZfZjZ@?±@Z<ZbZZZFZJ[p[Ç[Å[Ä[Â[¿[Æ\ \\\`\\]]]]]]"]])]]]$]']]â^8^6^3^7^·^¶^µ^¾_5_7_W_l_i_k_—_™_ž_˜_¡_ _œ``£`‰` `¨`Ë`´`æ`½^±¡`Å`»`µ`Ü`¼`Ø`Õ`Æ`ß`¸`Ú`ÇbbHc c§crc–c¢c¥cwcgc˜cªcqc©c‰cƒc›ckc¨c„cˆc™c¡c¬c’cc€c{cichcze]eVeQeYeWU_eOeXeUeTeœe›e¬eÏeËeÎf]fZfdfhfff^fùR×ghh¯h¢h“hµhhvh±h§h—h°hƒhÄh­h†h…h”hh¨hŸh¡h‚k2kº?²@kël+mŽm¼mómÙm²mámÌmämûmúnmÇmËm¯mÑm®mÞmùm¸m÷mõmÅmÒnmµmÚmëmØmêmñmîmèmÆmÄmªmìm¿mæpùq pýpïr=r}rssssss‡tt ttsþt tàtö^²¡t÷uu"ueubupuuÔuµuÊuÍvŽvÔvÒvÛw7w>w<w6w8w:xkxCxNyeyhymyûz’z•{ {({{,{&{{{.|’|—|•}F}C}q}.}9}<}@}0}3}D}/}B}2}1=žšÌÎÒ€€J€F/#+)0$‚‚5‚7‚6‚9ƒŽƒžƒ˜ƒxƒ¢ƒ–ƒ½ƒ«ƒ’ƒŠƒ“ƒ‰ƒ ƒwƒ{?³@ƒ†ƒ§†U_j†Ç†À†¶†Ä†µ†Æ†Ë†±†¯†ÉˆSˆžˆˆˆ«ˆ’ˆ–ˆˆ‹‰“‰Š*ŠŠ#Š%Š1Š-ŠŠŠ"ŒIŒZŒ©Œ¬Œ«Œ¨ŒªŒ§gf¾ºŽÛŽß # "^³¡èíý‘W‘Αõ‘æ‘ã‘ç‘í‘镉–j–u–s–x–p–t–v–l–À–ê–ézàzߘ›Zœåžužž¥ž»P¢PP…P™P‘P€P–P˜PšgQñRrRtRiRÞRÝRÛSZS¥U{U€U§U|UŠUU˜U‚UœUªU”U‡U‹UƒU³U®UŸU>U²UšU»U¬U±U~U‰U«U™W X/X*X4X$X0X!XX XùY`?´@ZwZšZZ’Z›Z§[s[q[Ò[Ì[Ó[Ð\ \1]L]P]4]G]ý^E^=^@^C^~^Ê^Á^Ä_<_m_©_¨`Ñ`á`²`¶`àaa#`úa`ð`û`ôah`ña`öa aabbIc£cŒcÏcÀcécÉcÆcÍ^´¡cÒcãcÐcácÖcícvcôcêcÛdRcÚcùe^efebe‘ee¯fnfpftfvfof‘fzf~fwfþgghúhÕhàhØh×ihßhõhîhçhùhÒhòhãhËhÍi iihÉhÚinhûk>k:k=k˜k–k¼kïl.l,n/n8nTn!n2ngnJn n%n#nn[nXn$nVnnn-n&non4nMn:n,nCnn>nË?µ@n‰nnNncnDnrnin_qq&q0q!q6qnqrLr„r€s6s%s4s)t:t*t3t"t%t5t4t/tt&t(u%ukujuâuÛuãuÙuØuÞuàv{v–v“v´vÜwOwíx]xlxoz zz zzz˜^µ¡z—z–zåzã{I{V{F{P{R{T{M{K{O{Q|Ÿ|¥}^}P}h}U}+}n}r}a}f}b}p}sU„Ô€ €R€…UTKQN9F>LSt‚‚ƒé„ƒø„ ƒàƒÅ„ ƒÁƒïƒñƒô„W„ ƒð„ ƒÌƒýƒòƒÊ„8„„ƒÜ„ƒÔƒß†[†ß†Ù†í†Ô†Û†ä†Ð†ÞˆWˆÁˆ±‰ƒ‰–Š;Š`ŠUŠ^Š<ŠA?¶@ŠTŠ[ŠPŠFŠ4Š:Š6ŠVŒaŒ‚Œ¯Œ¼Œ³Œ½ŒÁŒ»ŒÀŒ´Œ·Œ¶Œ¿Œ¸Š…ÎÝËÚÑÌÛÆŽûŽøŽüœ.51826‘õ‘ þ‘c‘e‘Ï’’#’ ’’ ’’’•”••‹•‘^¶¡•“•’•Ž–Š–Ž–‹–}–…––r–„–Á–Å–Ä–Æ–ï–ò—̘˜˜ç˜ê˜ï˜é˜ò˜í™®™­žÃžÍžÑN‚P­PµP²PÅP¾P¬P·P»P¯PÇRRwR}RßRæRäRâS/UßUèUÓUæUÎUÜUÇUÑUãUïUÚUáUÅUåUÉWX^XQXXXWXZXTXkXLXmXJXbXRXKYgZÁZÉZÌZ¾Z½Z¼?·@Z³ZÂZ²]i]o^L^y^É^È__Y_¬_®aaaHa`óa`ùaaaNaLaDaMa>a4a'a aa7b!dd>dd*d-d=d,dddd d6ddeleŸe°f—f‰f‡f–f„f˜fgi”im^·¡iZiwi`iTiui0i‚iJihiki^iSiyi†i]ici[kGkrkÀk¿kÓkýn¢n¯nÓn¶nÂnnnÇnÅn¥n˜n¼nºn«nÑn–nœnÄnÔnªn§n´qNqYqiqdqIqgq\qlqfqLqeq^qFqhqVr:rRs7sEs?s>totZtUt_t^tAt?tYt[uvuxvuðvuòuñuúuÿuôuóvÞw[wkwfw^wc?¸@wywjwlw\wewhwbwîxŽx°x—xŒx‰x|x‘x“xyzyy„,y½zzz zzzzŸ{w{À{`{n{g|±|³|µ}“}y}‘}}}[nir©¨¤€V€X€†€„qpxensk^¸¡yf‚‚G„‚„w„=„1„u„f„k„I„l„[„<„5„a„c„i„m„F†^†\†_†ù‡‡‡‡†þ†û‡‡‡ ˆYˆßˆÔˆÙˆÜˆØˆÝˆáˆÊˆÕˆÒ‰œ‰ãŠkŠrŠfŠiŠpЇŠ|ŠcŠ ŠqŠ…ŠmŠbŠnŠlŠyŠ{Š>ŠhŒbŒŠŒ‰ŒÊŒÇŒÄŒ²ŒÃŒÂŒÅáßèïóúêäæ޲ Žþ ?¹@Ÿ²KJSBT<UPGONMQ>A‘‘‘l‘j‘i‘É’7’W’8’=’@’>’[’K’d’Q’4’I’M’E’9’?’Z•˜–˜–”–Í–Ë–É–÷–û–ù–ö—V—t—v˜˜˜ ˜˜ ˜ü˜ô^¹¡˜ý™³™±™´šáœéž‚ŸŸŸ PçPîPåPÖPíPÚPÕPÏPÑPñPÎPéQbQóRƒR‚S1S­UþVVVUýVVV V U÷VVVVUöWWXuX~XƒX“XŠXyX…X}XýY%Y"Y$YjYiZáZæZéZ×ZÖZØZã[u[Þ[ç[á[å[è[â[ä[ß\ \b]„]‡^[^c^U^W^T^Ó^Ö_ _F_p_¹aG?º@a?aKawaba_aZaXaub*d‡dXdTd¤dxd_dzdQdgd4dmd{ere¡e×eÖf¢f¨fiœi¨i•iÁi®iÓiËi›i·i»i«i´iÐiÍi­iÌi¦iÃi£kIkLl3o3onþonôo)o>o o,ooo"^º¡nÿnïoo1o8o2o#oo+o/oˆo*nìonònÌn÷q”q™q}qŠq„q’r>r’r–sDsPtdtctjtptmuu‘v'v v v vvávãw„w}wwaxÁxŸx§x³x©x£yŽyz.z1zªz©zízï{¡{•{‹{u{—{{”{{¸{‡{„|¹|½}»}°}œ}½} }Ê}´}²}±}º}¢}¿}µ}¸}­}Ò}Ç}¬?»@pà߀^€Z€‡P€ˆŠ‚çú‚‚‚‚K„É„¿„ƄĄ™„ž„²„œ„Ë„¸„À„Ó„„¼„фʇ?‡‡;‡"‡%‡4‡‡U‡7‡)ˆó‰ˆôˆùˆøˆýˆè‰ˆïЦŠŒŠžŠ£ŠŠ¡Š“Ф^»¡ŠªŠ¥ЍŠ˜Š‘ŠšЧŒjŒŒŒŒÓŒÑk™•ü£`X\cY^b][‘‘‘‘u‘x‘w‘t’x’€’…’˜’–’{’“’œ’¨’|’‘•¡•¨•£•¥•¤–™–œ–›–Ì–Ò——|—…—ö˜˜¯˜±™™™ ™ ™Áš¯šæ›Aœôœöœóž¼Ÿ;ŸJQQPûPõPùQQQQÜ?¼@R‡RRŠRðS²V.V;V9V2V?V4V)VSVNVWVtV6V/X€XŸXžX³XœX®X©X¦Ym[ Zû[ Zõ[ [[î[ì[é[ë\d]]”^b^_^a^â^Ú^ß^Ý^ã^à_H_q_·_µavagana]aUa‚^¼¡a|apaka~a§aa«aŽa¬aša¤a”a®b.didodydžd²dˆdd°d¥d“d•d©d’d®d­d«dšd¬d™d¢d³euewf®f«f´f±j#jièjjjiýj!jj iójjiíjkPkNk¤kÅo?o|o„oQofoTo†omo[oxonoŽozopodo—oXnÕooo`o_qŸq¬q±q¨rVr›sNsWtit‹tƒ?½@t~t€uv v)vv$v&v!všvºväwŽw‡wŒw‘w‹xËxÅxºxÊx¾xÕx¼xÐz?z<z@z=z7z;z¯z®{­{±{Ä{´{Æ{Á{ {Ì|Ê}à}ô}ï}û}Ø}ì}Ý}è}ã}Ú}Þ}é}ž}Ù}ò}ùuw¯^½¡é€&› š˜……=…„î…,………#…!…„ì…%„ÿ…‡‚‡t‡v‡`‡f‡x‡h‡Y‡W‡L‡Sˆ[ˆ]‰‰‰‰‰ мŠÒŠÇŠÄŠ•ŠËŠøвŠÉŠÂŠ¿аŠÖŠÍжйŠÛŒLŒNŒlŒàŒÞŒæŒäŒìŒâŒÜŒêŒámŸ£Ž+ŽŽŽ"ŽŽ)ŽŽ!ŽŽº)&*?¾@%inhmw‘0‘-‘'‘1‘‡‘‰‘‹‘ƒ’Å’»’·’ê’¬’ä’Á’³’¼’Ғǒ𒲕­•±——— —`——‹—˜!˜+˜˜³™ ™™™™Ý™Ð™ß™Û™Ñ™Õ™Ò™Ùš·šî›'›E›D›w›o ^¾¡ž©ž¾žÎX¨ŸRQQQQQQ€QªQÝR‘R“RóVYVkVyViVdVxVjVhVeVqVoVlVbVvXÁX¾XÇXÅYn[[4[x[ð\_Ja²a‘a©aŠaÍa¶a¾aÊaÈb0dÅdÁdËd»dÚdÄdÇdÂdÍd¿dÒdÔd¾etfÆfÉf¹fÄfÇf¸j=j8j:jYjkjXj9jDjbjajKjGj5j_jHkYkwloÂo±o¡?¿@oÃo¤oÁo§o³oÀo¹o¶o¦o o´q¾qÉqÐqÒqÈqÕq¹qÎqÙqÜqÃshtœt£t˜tŸtžtâu v4v8v:vçvåw wžw¥xèxÚxìxçy¦zMzFzLzKzº{Ù|{É{ä{Û{á{é{æ|Õ~ ^¿¡~~~~#~~~ ~y²ðî€(³©¨û‚‚X…J…Y…H…h…C…I…m…j…^‡ƒ‡Ÿ‡ž‡¢‡ˆa‰*‰2‰%‰+‰!‰ª‰¦ŠæŠúŠëŠñ‹ŠÜŠçŠîŠþ‹Š÷ŠíŠóŠöŠüŒkŒmŒ“ŒôŽDŽ1Ž4ŽBŽ9Ž5;/83¨¦utxr|z‘4‘’“ “6’ø“3“/“"’ü“+““?À@““&“!““.“•»–§–ª–Õ———— ———[—f—˜˜0˜8˜;˜7˜-˜9˜$™™(™™™!™™í™â™ñš¸š¼šûší›(›‘#&(žØžÔŸŸœQ*QQ!Q2RõVŽV€VV…V‡^À¡VXÕXÓXÑXÎ[0[*[$[z\7\h]¼]º]½]¸^k_L_½aÉaÂaÇaæaËb2b4dÎdÊdØdàdðdædìdñdâdíe‚fÙfÖj€j”j„j¢jœjÛj£j~j—jj k\k®kÚloØoñoßoÛoäoëoïo€oìoáoéoÕoîoðqçqßqîqæqåqíqìqôqàr5rFspsrt©t°t¦t¨vFvBvLvêw³wªw°w¬?Á@w§w­wïx÷xúxôxïyy§yªzWz¿|| {þ{÷| {à|à|Ü|Þ|â|ß|Ù|Ý~.~>~F~7~2~C~+~=~1~E~A~4~9~H~5~?~/Dóü€q€p€o€sÆÃºÂÀ¿½É¾è‚ ‚q…ª^Á¡…„…~…œ…‘…”…¯…›…‡…¨…Іg‡À‡Ñ‡³‡Ò‡Æ‡«‡»‡º‡È‡Ë‰;‰6‰D‰8‰=‰¬‹‹‹‹‹ ‹ ‹‹‹ŒAŒ?ŒsŒúŒýŒüŒøŒû¨ŽIŽKŽHŽJD>BE?}„€‘9‘£‘ž‘œ“M“‚“(“u“J“e“K““~“l“[“p“Z“T•ʕȕƖ±–¸–Ö——— —Ó˜F˜¶™5š?Â@™ÿ›®›«›ª›­;?ž‹žÏžÞžÜžÛŸ>ŸKSâV•V®XÙXØ[8_]aãb3dôdòdþedúd÷e·fÜg&j³j¬jÃj»j¸jÂj®k_kxk¯p p oþpoúppqûqþqøswsut§t¿uvVvX^¡vRw½w¿w»yy®zaz`zÄ|+|'|*||#|!|ç~T~^~Z~a~R~YHùû€w€vÍÏ‚ …Ï…©…Í…Ð…É…°…º…¹…¦‡ï‡ì‡ò‡à‰†‰²‰ô‹(‹9‹,‹+ŒPŽYŽcŽfŽdŽ_ŽUŽÀIM‡ƒˆ‘«‘Г”“Š“–“¢“³“®“¬“°“˜“š“—•Ô•Ö•Ð•Õ–â–Ü–Ù–Û–Þ—$—£—¦?Ã@—­—ù˜M˜O˜L˜N˜S˜º™>™=™.™¥ššÁ›››O›N›M›Ê›É›ý›È›ÀQ]`žàŸŸ,Q3V¥XÞXâ[õŸ^ìaòa÷aöaõeefàfÝjåjÝjÚjÓppp(pppprr rXr¢sx^ászt½tÊtãu‡u†v_vawÇyy±zkzi|>|8|=|7|@~k~m~y~i…~s¶¹¸Ø…é…Ý…ê…Õ…ä…÷‡ûˆˆ ‡ù‡þ‰`‰_‰V‰^‹A‹\‹X‹I‹Z‹N‹F‹Y Ž|ŽrއŽvŽlŽzŽtTN­Š‘±‘®“á“ѓߓÓȓܓ֓â“͓ؓä“דè•Ü–´–ã—*—'—a—Ü—û˜^?Ä@˜X˜[˜¼™E™Išš› ›è›ç›Ö›Û‰arjlž’ž—ž“ž´RøV¨V·V¶V´V¼Xä[@[C[}[ö]Éaøaúeeefæg'jìp>p0p2rs{tÏvbvey&y*y,y+zÇzö|L|C|M|ï®~}~|^Ä¡~‚L€Ú‚f…û…ù†…ú†† †† ˆ‰d‰º‰ø‹p‹l‹f‹o‹_‹k މŽŽ…Ž‚‘´‘Ë””“ý•á—0˜Ä™R™Q™¨š+š0š7š5œœ žyžµžèŸ/Ÿ_ŸcŸaQ7VÁVÀVÂY\l]Íaüaþeee•féjûkjúk²pLrr§tÖtÔviwÓ|P~~Œ¼††-†ˆ#ˆ"ˆ!ˆ‰j‰l‰½‹t?Å@‹w‹}ŽŠŽŽ‹_¯‘º”.”3”5”:”8”2”+•â—8—2—ÿ˜g˜e™WšEšCš@š>šÏ›T›Qœ-œ%¯´Â¸žžïŸŸ\ŸfQ<Q;VÈVÊVÉ[]Ô]Ò_Naÿe$k kapQpXs€täuŠvnvl^Å¡y³|`|_€~€}߉r‰o‰ü‹€Ž‘Ž“a‘H”D”Q—=—×Á˜k™UšUšMšÒ›œIœ1œ>œ;Óן4ŸlŸjŸ”VÌ]Öbe#e+e*fìktÚzÊ|d|c|e~“~–~”â†8†?ˆ1‹Š”c”`”d—h˜o™\šZšWšÓšÑœTœWœV垟žôVÑXée,p^vqw×Pˆˆ6ˆ9ˆb‹“‹’?Æ@‹–‚w‘À”j—B—H—D—Ƙpš_›"›Xœ_ùž|ŸŸwŸr^ókpc|l|nˆ;‰ÀŽ¡‘Á”r”p˜q™^šÖ›#žÌpdwÚ‹š”w—Éšbše~œ‹œŽª‘Å”}”|œwž÷ŒT”žr(šj›1žž|r^Æ¡0þ00S0A0¡?Ç@?0¨\Ç¡0ç#Q6 $` $t?É@NBN\QõSS‚NN NGNV×ú \n_sNQ‡NN.N“NÂNÉNÈQ˜RüSlS¹W YY,\]ÿeák³kÌlr?N1N<NèNÜNéNáNÝNÚR SSLW"YY/[[„\\;\t\s^^€^‚_Éb bPl^É¡l6lCl?l;r®r°sŠy¸€Š–OOO,NõONñON÷OOOOO"OONôOQ±RR RR¦S"SSMSŠTVáVßW.W*W4Y<Y€Y|Y…Y{Y~YwY[V\\%\|\z\~]ß^u^„___t_Õ_Ô_Ïb\b^bdbabfbbbYb`bZbeeïeîg>g9g8g;g:g?g<g3llFlRl\lOlJlTlK?Ê@lLpqr^r´sŽu*vzuQ‚x‚|‚€‚}‚†M‰~™—›”–"–$– –#OVO;ObOIOSOdO>OgORO_OAOXO-O3O?OaQQ¹RRR!R­S ScSrSŽT0T7T*TTTETTT%T^Ê¡T=TOTAT(T$TGVîVçVåWAWEWLWIWKWRYY@Y¦Y˜Y Y—YŽY¢YYY§Y¡[Ž[’\(\*\\\ˆ\‹\‰\’\Š\†\“\•]à^ ^^‹^‰^Œ^ˆ^___x_v_Ò_Ñ_Ð_í_è_î_ó_á_ä_ã_ú_ï_÷_û`_ôb:bƒbŒbŽb”b‡bqb{bzbpbbˆbwb}brbte7eðeôeóeòeõgEgG?Ë@gYgUgLgHg]gMgZgKkÐllxlglkl„l‹llqlolilšlml‡l•lœlflslel{lŽptpzrcr¿r½rÃrÆrÁrºrÅs•s—s“s’u:u9u”vy=€4€•€™€€’€œ‚‚‚…‚Ž‚‘‚“^Ë¡‚Š‚ƒŒxÉ¿Ÿ¡¥ž§ –0–(–/–-N3O˜O|O…O}O€O‡OvOtO‰O„OwOLO—OjOšOyOOxOOœO”OžO’O‚O•OkOnQžQ¼Q¾R5R2RFR1R¼S S<S’S”T‡TTT‘T‚TˆTkTzT~TeTlTtTfTToTaT`T˜TcTgTdV÷VùWoWrWmWkWqWpWvW€WuW{WsWb?Ì@WhW}Y YEYµYºYÏYÎY²YÌYÁY¶Y¼YÃYÖY±Y½YÀYÈY´YÇ[b[e[“[•\D\G\®\¤\ \µ\¯\¨\¬\Ÿ\£\­\¢\ª\§\\¥\¶\°\¦^^^_(_"_T_‚_~_}_Þ_å`-`&``2` ^Ì¡`4` ``3```,`"` ``.``` ` `bb=b­b´bÑb¾bªb¶bÊb®b³b¯b»b©b°b¸e=e¨e»f eüfffeûff f feýfffög g…glgŽg’gvg{g˜g†g„gtggŒgzgŸg‘g™gƒg}ggxg”k%k€k~kÞll“lìlëlîlÙl¶lÔl­lçl·lÐlÂlºlÃlÆlílò?Í@lÒlÝl´lŠll€lÞlÀm0lÍlÇl°lùlÏlélÑp”p˜p…p“p†p„p‘p–p‚pšpƒrjrÖrËrØrÉrÜrÒrÔrÚrÌrÑs¤s¡s­s¦s¢s s¬stÝtèu?u>uŒu˜v¯vóvñvðvõwøwüwùwûwú^Í¡w÷yBy?yÅzxz{zû|u|ý€5€€®€£€¸€µ€­‚ ‚ ‚À‚«‚š‚˜‚›‚µ‚§‚®‚¼‚ž‚º‚´‚¨‚¡‚©‚‚¤‚¶‚¢†p†o†mŒVÒËÓÍÖÕײ´¯³°–9–=–<–:–COÍOÅOÓO²OÉOËOÁOÔOÜOÙO»O³OÛOÇOÖOºOÀO¹OìRDRIRÀRÂS=S|S—S–S™S˜TºT¡T­T¥TÏ?Î@Tà T·T®TÖT¶TÅT TpT¼T¢T¾TrTÞT°WµWžW¤WŒW—WW›W”W˜WW™W¥WšW•XôY YSYáYÞYîZYñYÝYúYýYüYöYäYòY÷YÛYéYóYõYàYþYôYí[¨\L\Ð\Ø\Ì\×\Ë\Û^Ρ\Þ\Ú\É\Ç\Ê\Ö\Ó\Ï\È\Æ\Î\ß\ø]ù^!^ ^$^°^¤^¢^›^£^¥__._V_†`7`9`T`r`^`E`S`G`I`[`L`@`B`_`$`D`X`f`nbBbÏc c bõccbëbùcc bøböccbúcbûbðeAeCeªe¿f6f!f2f5ff&f"f3f+f:ff4f9f.ggÁgògÈgº?Ï@gÜg»gøgØgÀg·gÅgëgägßgµgÍg³g÷gögîgãgÂg¹gÎgçgðg²gügÆgígÌg®gægÛgúgÉgÃgêgËk(k‚k„k¶kÖkØkàl m(m4m-mm<m?mm lÚm3mmm:mmmmmB^Ï¡mmm7mmm@mm m,mm"m mp·pŸp¾p±p°p¡p´p©rArIrlrprsrnrÊrärèrërßrêrærãs…sÌsÂsÈsÅs¹s¶sµs´sës¿sÇs¾sÃsÆs¸sËtìtîu.uGu§uªvyvÄwww v÷vûvúwçxxxxxxx xxyJyLyKyEyDyÕyÍyÏyÖyÎz€?Ð@z~zÑ{|z|x|}}}X‘¾€€€€7€Ø€Ç€à€Ñ€È€Â€Ð€Å€ã€Ù€Ü€Ê€Õ€É€Ï€×€æ€Íÿ‚!‚”‚Ù‚þ‚ùƒ‚胂Ճ:‚ë‚Ö‚ô‚ì‚á‚ò‚õƒ ‚û‚ö‚ð‚ê^С‚ä‚à‚ú‚ó‚í†w†t†|†sˆAˆNˆgˆjˆi‰ÓŠŠrãáîàñ½¿ÕžÇËȑԑӖT–O–Q–S–J–NPPPPP"P0POõOôP3P7P,OöPPP P'P5P/P1PQZQ”Q“QÊQÄQÈQÎRaRZRRR^RURbRÍSSžU&TâUUTçTóTäUTÿUUTëUUTñ?Ñ@U TûT÷TàUUU WWÌX2WÕWÒWºWÆW½W¼W¸W¶W¿WÇWÐW¹WÁYYJZZZ-ZZZZ ZZ3[l[§[­[¬\\V\T\ì\ÿ\î\ñ\÷]\ù^)^(^¨^®^ª^¬_3_0_g`]`Z`g^Ñ¡`A`¢`ˆ`€`’```ƒ`•`›`—`‡`œ`ŽbbFbòccVc,cDc6cCcäc9cKcJc<c)cAc4cXcTcYc-cGc3cZcQc8cWc@cHeJeFeÆeÃeÂfJf_fGfQghhhIh2h;hKhOhh1hh5h+h-h/hNhDh4hhhh&h(h.hMh:h%h k,k/k-k1k4km€‚kˆkækä?Ò@kèkãkâkçl%mzmcmvm mam’mXmbmmmom‘mmïmm†m^mgm`m—mpm|m_m‚m˜m/mhm‹m~m€m„mmƒm{m}mumpÜpÓpÑpÝpË9pâp×pÒpÞpàpÔpÍpÅpÚpÎpárBrx^Ò¡rwrvsrúrôrþrörórûssÓsÙsåsÖs¼sçsãsésÜsÒsÛsÔsÝsÚs×sètÞtôu!u[u_u°uÁu»uÄuÀu¿u¶uºvŠvÉwwwwww#wwww"w'x#x,x"x5x/x(x.x+x!x)x3x*x1yTy[yOy\ySyRyQyëyàyîyíyêyÜyÞyÝz†z‰z…z‹zŠz‡zØ{?Ó@{{{{{{ {{ {|„|‘|Š|Œ|ˆ||…}}}}}}}}}}} \a^`][–’ÃÂÀ€€>€9€ú€ò€ù€õ€û‚‚/‚%ƒ3ƒ-ƒDƒƒQƒ%ƒVƒ?ƒAƒ&ƒƒ"^Ó¡ƒBƒNƒƒ*ƒƒ<ƒMƒƒ$ƒ ƒ7ƒ/ƒ)ƒGƒEƒLƒSƒƒ,ƒKƒ'ƒH†S†R†¢†¨†–††‘†ž†‡†—†††‹†š†…†¥†™†¡†§†•†˜†Ž†††”ˆCˆmˆuˆrˆ€ˆqˆˆoˆƒˆ~ˆtˆ|ŠŒGŒWŒ{Œ¤Œ£vxµ·¶ŽÑŽÓþõÿûüöÖàÙãßåØÛ×Üä‘P?Ô@‘N‘Õ‘â‘Ú–\–_–¼˜ãšß›/NPpPjPaP^P`PSPKP]PrPHPMPAP[PJPbPPEP_PiPkPcPFP@PnPsPWPQQÐRkRmRlRnRÖRÓS-SœUuU<UMUPU4U*UQUbU6U5U0URUE^Ô¡U U2UeUNU9UHU-U;U@UKW WWûXWâWöWÜWôXWíWýXWøX WóWÏXWîWãWòWåWìWáXWüXWçXX WñWéWðX XY\Z`ZXZUZgZ^Z8Z5ZmZPZ_ZeZlZSZdZWZCZ]ZRZDZ[ZHZŽZ>ZMZ9ZLZpZiZGZQZVZBZ\[r[n[Á[À\Y]] ]]] ] ](] ]&]%]?Õ@]0]]#]].^>^4^±^´^¹^²_6_8_›_–_Ÿ`Š``†`¾`°`º`Ó`Ï`ä`Ù`Ý`È`±`Û`·`Ê`¿`Ã`Í`Àc2cecŠc‚c}c½cžc­cc—c«cŽcoc‡ccnc¯cucœcmc®c|c¤c;cŸ^Õ¡cxc…cc‘ccpeSeÍfefaf[fYf\fbghyh‡hhœhmh®h«iVhoh£h¬h©huhth²hhwh’h|hkhrhªh€hqh~h›h–h‹h h‰h¤hxh{h‘hŒhŠh}k6k3k7k‘kkkŒl*mÀm«m´m³ntm¬mémâm·mömÔnmÈmàmßmÖm¾måmÜmÛmômÊm½mímðmºmÕmÂmÏmÉ?Ö@mÐmòmÓmým×mÍmãm»púq p÷qpôq pðqpóqpüpÿqqqpøpöq qqr~r{rssssss srÿsssˆsösøsõttsýttsúsüsÿt t sôtuducuÎuÒuÏ^Ö¡uËuÑuÐvv‰vÓw9w/w-w1w4w3w=w%w;w5xHxRxIxMxJxLx&xExPydygyiycykyay»yúyøyözz”z{5{G{4{%{0{"{${3{{*{{1{+{-{/{2{8{{#|”|˜|–|£}5}=}8}6}:}E},})}A}G}>}J};}(c•œ›ÊÍÐÇÏÉ€?×@€€€G€C€H%-,!'"‚‚8‚3‚:‚4‚2‚tƒƒ£ƒ¨ƒƒzƒsƒ¤ƒtƒƒƒ•ƒ™ƒuƒ”ƒ©ƒ}ƒƒƒŒƒƒ›ƒªƒ‹ƒ~ƒ¥ƒ¯ƒˆƒ—ƒ°ƒƒ¦ƒ‡ƒ®ƒvƒš†Y†V†¿†·^ס†Â†Á†Å†º†°†È†¹†³†¸†Ì†´†»†Ã†½ˆRˆ‰ˆ•ˆ¨ˆ¢ˆªˆšˆ‘ˆ¡ˆŸˆ˜ˆ§ˆ™ˆ›ˆ—ˆ¤ˆ¬ˆŒˆ“ˆŽ‰‚‰Ö‰Ù‰ÕŠ0Š'Š,ŠŒ9Œ;Œ\Œ}Œ¥}{y¼Â¹¿ÁŽØŽÞŽÝŽÜŽ×Žà$  !ïêðôòÔëé‘V‘X‘Z‘S‘U‘ì‘ô‘ñ‘ó‘ø‘ä‘ù‘ê?Ø@‘ë‘÷‘è‘î•z•†•ˆ–|–m–k–q–o–¿—j˜˜å™—P›P•P”PžP‹P£PƒPŒPŽPPhPœP’P‚P‡Q_QÔSSS¤S§U‘U¨U¥U­UwVEU¢U“UˆUUµUU£U’U¤U}UŒU¦UU•U¡UŽW X)X7^Ø¡XXX'X#X(WõXHX%XXX3X?X6X.X9X8X-X,X;YaZ¯Z”ZŸZzZ¢ZžZxZ¦Z|Z¥Z¬Z•Z®Z7Z„ZŠZ—ZƒZ‹Z©Z{Z}ZŒZœZZ“Z[ê[Í[Ë[Ô[Ñ[Ê[Î\ \0]7]C]k]A]K]?]5]Q]N]U]3]:]R]=]1]Y]B]9]I]8]<]2]6]@]E^D^A_X_¦_¥_«`É`¹`Ì`â`Î`Äa?Ù@`òa aa`õa`ø`ü`þ`Áaaaa`ÿaa bJc”c±c°cÎcåcècïcÃdcócÊcàcöcÕcòcõdacßc¾cÝcÜcÄcØcÓcÂcÇcÌcËcÈcðc×cÙe2egejede\eheeeŒee®eÐeÒ^Ù¡f|flf{f€fqfyfjfrgi hÓihÜi*hìhêhñihÖh÷hëhähöiihóháihÌiiph´ihïhÆihøhÐhýhühèi i ihÎhÈhÝhæhôhÑihÔhéii%hÇk9k;k?k<k”k—k™k•k½kðkòl0münFnnInˆn<nEnbn+n?nAn]nsnn3nKn@nQn;nn.n^?Ú@nhn\nan1n(n`nqnkn9n"n0nSnen'nxndnwnUnynRnfn5nZq qq/pûq.q1q#q%q"q2qq(q:qrKrZrˆr†r…r‹ss s0s"s1s3s's2s-s&s#s5s t.t,t0t+t^Ú¡tt!t-t1t$t#tt)t t2tûu/uouluçuÚuáuæuÝußuäu×v•v’vÚwFwDwMwEwJwNwKwÞwìx`xdx\xmxqxjxnxpxixhx^xbytysyrypzz zz zz™zæzä{J{;{D{H{L{N{@{X{E|¢|ž|¨|¡}X}o}c}S}V}g}j}O}m}\}k}R}T}i}Q}_}N>e?Û@f¢ ×€Q€O€þ€ÔCJROG=M:æî÷‚‚<‚?‚uƒ;ƒÏƒù„#ƒÀƒè„ƒçƒäƒüƒö„ƒÆƒÈƒëƒãƒ¿„ƒÝƒåƒØƒÿƒáƒËƒÎƒÖƒõƒÉ„ „ƒÞ„„ƒÂƒó^Û¡ƒÕƒúƒÇƒÑƒê„ƒÃƒìƒîƒÄƒûƒ×ƒâ„ƒÛƒþ†Ø†â†æ†Ó†ã†Ú†ê†Ý†ë†Ü†ì†é†×†è†ÑˆHˆVˆUˆºˆ×ˆ¹ˆ¸ˆÀˆ¾ˆ¶ˆ¼ˆ·ˆ½ˆ²‰ˆÉ‰•‰˜‰—‰Ý‰ÚŠNŠMŠ9ŠYŠ@ŠWŠDŠRŠHŠQŠJŠLŠOŒ_ŒŒ€ŒºŒ¾Œ°Œ¹Œµ„€‰ØÓÍÇÖÜÏÕÙÈ×ÅŽïŽ÷Žú?Ü@ŽùŽæŽîŽåŽõŽçŽöŽëŽñŽìŽôŽé-4/‘‘,‘ÿü‘ùû‘‘‘‘‘‘a‘d‘_‘b‘`’’ ’%’’’&’’ ’’‘ÿ‘ý’’’'’’’$’’’’•{••Œ•–‡–~–ˆ^Ü¡–‰–ƒ–€––ȖÖñ–ð—l—p—n˜˜©˜ëœæžùNƒN¶P½P¿PÆP®PÄPÊP´PÈPÂP°PÁPºP±PËPÉP¶P¸Q×RzRxR{UÃUÛUÌUÐUËUÊUÝUÀUÔUÄUéU¿UÒUUÏUÕUâUÖUÈUòUÍUÙUÂWXSXhXdXOXMXIXoXUXNX]XYXeX[X=XcXqXüZÇZÄZËZºZ¸Z±ZµZ°Z¿ZÈZ»ZÆ?Ý@Z·ZÀZÊZ´Z¶ZÍZ¹Z[Ö[Ø\\3]q]c]J]e]r]l]^]h]g]b]ð^O^N^J^M^K^Å^Ì^Æ^Ë^Ç_@_¯_­`÷aIa+aEa6a2a.aFa/aOa)a@b ‘hb#b%b$cÅcñcëddd d d$^Ý¡d3dCdddd9d7d"d d&d0d(dAd5d/d dd@d%d'd cçdd.d!deoe’eÓf†fŒf•ff‹fŠf™f”fxg ifi_i8iNibiqi?iEiji9iBiWiYiziHi5ili3i=iehðixi4iii@ioiDiviXiAitiLi;iKi7i\iOiQi2iRi/i{i<kFkEkCkBkHkAk›ú kû?Þ@kùk÷n›nÖnÈnnÀnŸn“n n±n¹nÆnÒn½nÁnžnÉn·n°nÍn¦nÏn²n¾nÃnÜnØn™n’nŽnn¤n¡n¿n³nÐnÊn—n®n£qGqTqRqcq`qAq]qbqrqxqjqaqBqXqCqKqpq_qPqS^Þ¡qDqMqZrOrrŒr‘rrŽs<sBs;s:s@sJsItDtJtRtQtWt@tOtNtBtFtMtTtátÿtþtýuuyuwiƒuïvvu÷uþuüuùuøvuûuöuíuõuýv™vµvÝwUw_wRwVwZwiwgwTwYwmwàx‡xšx”xx„x•x…x¡xƒxyx™x€x–x{y|y‚y}yyzzzzzz"z?ß@zzz£z¢zžzë{f{d{m{t{i{r{e{s{q{p{a{x{v{c|²|´|¯}ˆ}†}€}}}…}z}Ž}{}ƒ}|}Œ}”}„}}}’mkgl¦¥§Û€!d`w\i[brg!^vgo^ß¡Da‚‚I‚D‚@‚B‚E„ñ„?„V„v„y„„„e„Q„@„†„g„0„M„}„Z„Y„t„s„]…„^„7„:„4„z„C„x„2„E„)ƒÙ„K„/„B„-„_„p„9„N„L„R„o„ńބ;„G„6„3„h„~„D„+„`„T„n„P‡ ‡†÷‡ †ú†Ö†õ‡M†ø‡‡ ‡†ö‡ ‡ˆÖˆËˆÍˆÞˆÛˆÚˆÌˆÐ‰…‰›‰ß‰å‰ä?à@‰á‰à‰â‰Ü‰æŠvІŠŠaŠ?ŠwЂЄŠuŠƒŠŠtŠzŒ<ŒKŒJŒeŒdŒfŒ†Œ„ŒÌh‘ŒŽ“’ðàìñîÐéãâçòëôŽÿ R?^à¡DI=‘‘ ‘‘‘‘‘ ‘‘n’H’R’0’:’f’3’e’^’ƒ’.’J’F’m’l’O’`’g’o’6’a’p’1’T’c’P’r’N’S’L’V’2•Ÿ•œ•ž•›–’–‘–—–Ζú–ý–ø–õ—s—w—r˜˜ ˜¬˜ö˜ù™¯™²™°™µš­š«›[œêœíœçž€žýPæPÔP×PèPóPÛPêPÝPäPÓPìPðPïPãPà?á@QØR€RéRëS0S¬V'VV VUüVVVVVUúVVUÿUùX‰X|XX˜X†XXXtX‹XzX‡X‘XŽXvX‚XˆX{X”XXþYkZÜZîZåZÕZêZÚZíZëZóZâZàZÛZìZÞZÝZÙZèZß[w[à^á¡[ã\c]‚]€]}]†]z]]w]Š]‰]ˆ]~]|]]y]^X^S^Ø^Ñ^×^Î^Ü^Õ^Ù^Ò^Ô_D_C_o_¶a,a(aAa^aqasaRarala€ataTaza[aea;ajaaaVb)b'b+d+dMd[d]dtdvdrd}dudfd¦dNd‚d^d\dKdSd`dPdd?dldkdYdedwese f¡f fŸggg"i±i¶iÉ?â@i iÎi–i°i¬i¼i‘i™iŽi§ii©i¾i¯i¿iÄi½i¤iÔi¹iÊišiÏi³i“iªi¡ižiÙi—iiÂiµi¥iÆkJkMkKkžkÃkþnÎnõnñoo%nøo7nûo.o oNoo'oo;onío ^â¡o6osnùnîo-o@o0o<o5nëoooConýnöo9onüo:oo ooo!q‡qq‰q€q…q‚qq{q†qq—rDrSr—r•r“sCsMsQsLtbtstqtutrtgtnuuu}uvvv vvv vv¸ww|w…w‚wnw€wow~wƒx²xªx´x­x¨x~x«xžx¥x x¬x¢x¤y˜yŠy–y•y”y“?ã@y—yˆy’yz+zJz0z/z(z&z¨z«zî{ˆ{œ{Š{‘{{–{{Œ{›{Ž{…{˜R„{™{¤{‚|»|¿|¼|º}§}·}Â}£}ª}Á}À}Å}}Î}Ä}Æ}Ë}¯}¹}–}¼}Ÿ}¦}®}©}¡}ÉsâåÞ^ã¡€$€]€\‰†ƒ‡Œ‹‚„—„¤„¡„Ÿ„º„΄„¬„®„«„¹„´„Á„Í„ª„š„±„Ð„„§„»„¢„”„DŽ̄›„©„¯„¨„Ö„˜„¶„Ï„ „ׄԄ҄ۄ°„‘†a‡3‡#‡(‡k‡@‡.‡‡!‡‡‡C‡,‡A‡>‡F‡ ‡2‡*‡-‡<‡‡:‡1‡5‡B‡&‡8‡$‡‡0‡ˆ÷ˆçˆñˆúˆþˆîˆüˆöˆû?ä@ˆðˆìˆë‰‰¡‰Ÿ‰ž‰é‰ë‰èŠ«Š™Š‹Š’ŠŠ–Œ=ŒhŒÕŒÏŒ×–Ž ŽÿŽ ýŽ ŽŽŽŽþŽŽ ‘#‘‘ ‘"‘‘‘‘$‘!‘‘z‘r‘y‘s’¥’¤’v’›’z’ ’”’ª’^ä¡’¦’š’«’y’—’’£’î’Ž’‚’•’¢’}’ˆ’¡’Š’†’Œ’™’§’~’‡’©’’‹’-–ž–¡–ÿ—X—}—z—~—ƒ—€—‚—{—„———Η͘˜­™™™™™œ™Ã™¹™»™º™Â™½™Çš±šãšç›>›`›_œñœõž§PÿQQ0PøQPöPþQ PýQ R‹RñRïVHVBVLV5VAVJVIVFVX?å@VZV@V3V=V,V>V8V*V:WX«XX±X X£X¯X¬X¥X¡XÿZÿZôZýZ÷Zö[Zø[Zù[[[[\g]™]—]Ÿ]’]¢]“]•] ]œ]¡]š]ž^i^]^`^\}ó^Û^Þ^á_I_²a‹aƒaya±a°a¢a‰^å¡a›a“a¯a­aŸa’aªa¡aafa³b-dndpd–d d…d—dœdd‹dŠdŒd£dŸdhd±d˜evezeye{e²fµf°f©f²f·fªf¯jjjiåiøjiñiäj iÿiìiâjjiþj'iòiîji÷içj@jiæiûj iüiëj jjj%jiöj&jiôjkQk¥k£k¢k¦llkÿloAo&o~o‡oÆo’?æ@oo‰oŒoboOo…oZo–ovolo‚oUoroRoPoWo”o“o]ooaoko}ogooSo‹oioo•ocowojo{q²q¯q›q°q qšq©qµqq¥qžq¤q¡qªqœq§q³r˜ršsXsRs^s]s[sasZsY^æ¡sbt‡t‰t†tt}t…tˆt|tyuuu~v%vvvvv#vv(vvœv›www‰wˆxÍx»xÏxÌxÑxÎxÔxÈxÃxÉyšy¡y yœy¢y›kvz9z²z´z³{·{Ë{¾{¬{Î{¯{¹{Ê{µ|Å|È|Ì|Ë}÷}Û}ê}ç}×}á~}ú}æ}ö}ñ}ð}î}ßv¬°­íëêìæè€d€g£Ÿ?ç@ž•¢™—‚‚O‚S‚R‚P‚N‚Q…$…;………)…… … …… …'…„û…+„ú…… „ô…*„ò…„÷„ë„ó„ü…„ê„é…„þ…(…….…„ý…„ö…1…&„ç„ð„ï„ù…… …0… ……/†b^硇V‡c‡w‡á‡s‡X‡T‡[‡R‡a‡Z‡Q‡^‡m‡j‡P‡N‡_‡]‡o‡l‡z‡n‡\‡e‡O‡{‡u‡b‡g‡iˆZ‰‰ ‰‰ ‰‰‰‰‰‰ ‰¢‰¤‰£‰í‰ð‰ìŠÏŠÆЏŠÓŠÑŠÔŠ»Š×оŠÀŠÅŠØŠÃŠºнŠÙŒ>ŒMŒŒåŒßŒÙŒèŒÚŒÝŒç œ¡›Ž Ž#Ž%Ž$Ž.ŽŽŽŽŽŽ&?è@ŽŽŽŽŽŽŽ,$ #spogk‘/‘+‘)‘2‘&‘.‘…‘Š‘‘„‘€’Ð’Ã’À’Ù’¶’Ï’ñ’ß’Ø’é’×’Ý’Ì’ï’Â’è’Ê’È’Î’æ’Í’Õ’É’à’Þ’ç’Ñ’Ó^è¡’µ’á’Æ’´•|•¬•«•®•°–¤–¢–Ó————Z—Š—Ž—ˆ—ЗϘ˜˜&˜)˜(˜ ˜˜'˜²™˜ú™™™™™Ü™Í™Ï™Ó™Î™É™Ö™Ø™Ë™×™Ìš³šìšëšóšòšñ›F›C›g›t›q›f›v›u›p›h›d›lœüœúœýœÿœ÷œùœûžƒžÓŸQQQQQQÞS4SáVpV`Vn?é@VsVfVcVmVrV^VwWWXÈX½XÉX¿XºXÂX¼XÆ[[[[![[[[[([[ [[ï]¬]±]©]§]µ]°]®]ª]¨]²]­]¯]´^g^f^o^é^ç^æ^è^å_K_¼aa¨a–aÅa´aÆaÁaÌaº^é¡a¿a¸aŒd×dÖdÐdÏdÉd½d‰dÃdÛdódÙe3ee|e¢fÈf¾fÀfÊfÏf½f»fºfÌg#j4jfjIjgj2jhj>j]jmjvj[jQj(jZj;j?jAjjjdjPjOjTjojij`j<j^jVjUjMjFkUkTkVk§kªkÈkÇlllo­oËo£oÇo¼oÎoÈo^oÄo½ožoÊo¨po¥o®oºo¬oªoÏo¿o¸?ê@o¢oÉo«oÍo¯o²o°qÅqÂq¿q¸qÖqÀqËqÔqÊqÇqÏq½qØq¼qÆqÚrsisfslsesksjttšt t”t’t•t¡u u€v/v-v1v=v3v<v5v2v0v»væwšww¡wœw›w¢w•w™^ê¡w—xÝxéxåxêxÞxãxÛxáxíxßy¤zDzHzGz¶z¸zµz±z·{Þ{ã{ç{Ý{Õ{å{Ú{è{ù{Ô{ê{â{Ü{ë{Ø{ß|Ò|Ô|×|Ð~~!~~ ~~~~~~~"~ ~~~ ~~%~$C{z±ï€*€)€l±¦®¹µ«°¬´²·§ò‚U…V…E…k…M…S…a…X?ë@…@…F…d…A…b…D…Q…G…c…>…[…q…N…n…u…U…g…`…Œ…f…]…T…e…l†c†e†d‡›‡‡—‡“‡’‡ˆ‡‡–‡˜‡y‡‡‡£‡…‡‡‡„‡”‡œ‡š‡‰‰‰&‰0‰-‰'‰1‰"‰)‰#‰/‰,‰‰ñŠà^롊âŠòŠôŠÝ‹ŠäŠßŠðŠÈŠÞŠáŠèŠÿŠïŠûŒ‘ŒŒõŒîŒñŒðŒóln¥§Ž3Ž>Ž8Ž@ŽEŽ6Ž<ŽAŽ0Ž?޽6.52974vy{†ú‘3‘5‘“‘‘‘“'““““““z“8“<““#“““F“-““ ’Ë“’ú“%“’ù’÷“4““$’ÿ“)“9“5“*““ ?ì@“ ’þ“ “’û“•¼•Í•¾•¹•¶•¿•µ•½–©–Ô— ———™———”—ð—ø˜5˜/˜2™$™™'™)™ž™î™ì™å™ä™ð™ã™ê™é™çš¹š¿š´š»šöšúšùš÷›3›€›…›‡›|›~›{›‚›“›’››z›•^ì¡›}›ˆ% )"žˆž†ž®ž­žÕžúŸŸ=Q&Q%Q"Q$Q Q)RôV“VŒV†V„VƒV~V‚VVXÖXÔXÏXÒ[-[%[2[#[,['[&[/[.[{[ñ]·^l^j_¾_»aÃaµa¼açaàaåaäaèaÞdïdédãdëdädèee€e¶eÚfÒjj–jj¥j‰jŸj›j¡jžj‡j“jŽ?í@j•jƒj¨j¤j‘jj¦jšj…jŒj’k[k­l oÌo©oôoÔoãoÜoíoçoæoÞoòoÝoâoèqáqñqèqòqäqðqâsssnt—t²t«ttªt­t±t¥t¯uuu„vCvHvGv¤véwµw«w²w·w¶^í¡w´w±w¨wðxóxýyxûxòyxùxþyy«y¨z\z[zVzXzTzZz¾zÀ||{ò|{ÿ{û|{ô| {ó|| ||{ø{ý|{ð|| |è~-~<~B~3˜H~8~*~I~@~G~)~L~0~;~6~D~:E~}ôò€,»ÄÌÊÅǼé‚[‚Z‚\…ƒ…€……§…•… …‹…£…{…¤…š…ž?î@…w…|…‰…¡…z…x…W…Ž…–…†……™………¢…‚…ˆ………y…v…˜……Ÿ†h‡¾‡ª‡­‡Å‡°‡¬‡¹‡µ‡¼‡®‡É‡Ã‡Â‡Ì‡·‡¯‡Ä‡Ê‡´‡¶‡¿‡¸‡½‡Þ‡²‰5‰3‰<‰>‰A‰R‰7‰B‰­‰¯‰®‰ò‹^î¡‹‹‹‹‹ ‹"‹‹‹‹‹ ‹‹‹‹‹ŒOŒpŒrŒqŒoŒ•Œ”ŒùoŽNŽMŽSŽPŽLŽGC@…~‘8‘𑢑›‘™‘Ÿ‘¡‘‘ “¡“ƒ“¯“d“V“G“|“X“\“v“I“P“`“m““L“j“y“W“U“R“O“q“w“{“a“^“c“g“€“N“Y•Ç•À•ɕÕŕ·–®–°–¬— —————š—¡—œ?ï@—ž——Õ—Ô—ñ˜A˜D˜J˜I˜E˜C™%™+™*™3™2™/™-™1™0™˜™£™¡š™ú™ô™÷™ù™ø™ö™û™ý™üšš¾šþšý›šü›H›š›¨›ž›››¦›¡›¥›¤›†›¢› ›¯3Ag6.180^ï¡EB>7@=õ-žŠž‰žž°žÈžÚžûžÿŸ$Ÿ#Ÿ"ŸTŸ Q1Q-V˜VœV—VšVV™Yp[<\i]À^maØaßaíañaêaðaëaÖaédÿedýdøeedüe”eÛfÚfØjÅj¹j½jájÆjºj¶jÇj´j­k^kÉl pp ppppoÿoûp&oüo÷p rqÿqùrqýsv?ð@t¸tÀtµtÁt¾t¶t»tÂuuv\vdvYvPvSvWvZv¦v½vìwÂwºxÿy yy yyyy­y¬z_||)|| ||-||&|(|"|%|0~\~P~V~c~X~b~_~Q~`~W~Sµ³÷€uÑ^ð¡Ð‚_‚^…´…Æ…À…Ã…Â…³…µ…½…Ç…Ä…¿…Ë…Î…È…Å…±…¶…Ò†$…¸…·…¾†i‡ç‡æ‡â‡Û‡ë‡ê‡å‡ß‡ó‡ä‡Ô‡Ü‡Ó‡í‡Ø‡ã‡¤‡×‡Ùˆ‡ô‡è‡Ý‰S‰K‰O‰L‰F‰P‰I‹*‹'‹#‹3‹0‹5‹G‹/‹<‹>‹1‹%‹7‹&‹6‹.‹$‹;‹=‹:ŒBŒuŒ™Œ˜Œ—ŒþŽ\ŽbŽ`ŽWŽVŽ^ŽeŽg?ñ@Ž[ŽZŽaŽ]ŽiŽTFK‘(‘:‘>‘¨‘¥‘§‘¯‘ª“µ“Œ“’“·“›““‰“§“Ž“ª“ž“¦“•“ˆ“™“Ÿ““±“‘“²“¤“¨“´“£“¥•Ò•Ñ–³–×–Ú]–ߖؖݗ#—"—%—¬—®—¨—«—¤—ª^ñ¡—¢—¥—×—Ù—Ö—Ø—ú˜P˜¸™A™<™:šš š š ššš ššššÀšÜ›››)›5›J›L›K›Ç›Æ›Ã›¿›Á›µ›¸›Ó›¶›Ä›¹›½\SOJ[KYVLWRT_XZžŽžŒžßŸŸŸŸ%Ÿ+Ÿ*Ÿ)Ÿ(ŸLŸUQ4R–R÷S´V«V­V¦VªV¬XÚXÝXÛY[=]Ã^p?ò@_¿aûeee e e ee„eÞeÝfÞjçjàjÌjÑjÙjËjßjÜjÐjëjÏjÍjÞk`k°l pp'p pp+p!p)pp$pp*r r rrrr¥r¤r£r¡tËtÅt·tÃuv`wÉwÄwñyy^ò¡y!yyyy°zg|3|<|9|,|;|ì|ê~v~u~x~p~w~o~z~r~t~hKJƒ†·ý€x×Õ‚d‚a‚c…ë…ñ…í…Ù…á…è…Ú…×…ì…ò…ø…Ø…ß…ã…Ü…Ñ…ð…æ…ï…ޅ∇úˆ‡öˆ ˆ ˆ ˆ‡üˆ‡ÿˆ ˆ‰b‰Z‰W‰a‰\‰X‰]‰Y‰ˆ‰·‰¶‰ö‹P‹H‹J‹@‹S‹V‹T‹K‹U?ó@‹Q‹B‹R‹WŒCŒwŒvŒš ¬ª­«ŽmŽxŽsŽjŽoŽ{ŽÂRQOS´‘@‘?‘°‘­“ޓǓϓ“ړГù“ì“̓ٓ©“æ“ʓԓî“ã“ՓēΓÀ“Ò“ç•}•Ú–á—)—+—(—&^ó¡—³—·—¶—ݘ\˜Y˜]˜W˜¿˜½˜»˜¾™H™G™C™¦ššš%šš$šš"š š'š#ššššÂ› › ›› ›7›ê›à›Þ›ä›æ›â›ð›Ô›×›ì›Ü›Ù›å›Õ›á›ÚwŠ„ˆq€x†‹}ktpi…s{‚oy‡hž”ž‘žÀžüŸ-Ÿ@ŸMŸVS7V²?ô@VµV³Xã[E]Æ^î_Àaùeeeeeßfèfãjójðjêjèjùjñjîp<p5p/p7p4p1pBp8p?p:p9p@p;p3pArr¨s}s|tºv«vªv¾víwÌwÎwÍwòy%y#y'y$y)^ô¡y²znzlz÷|I|H|J|G|E|î~{~~~~€ºÿ€yÛÙ‚ ‚h†"…ÿ†…þ††…ö†† †† …ýˆˆˆˆˆ‰c‰f‰¹‰÷‹`‹j‹]‹h‹c‹e‹g‹m®ކŽˆŽ„YVUXZ‘C‘A‘·‘µ‘²” ”“û” ””“þ”””(”” “õ”“÷””””“ú” “ø” “ÿ?õ@“ü” “ö””•Þ•à•ß—.—¹—»—ý˜`˜b˜_˜Á™P™N™Y™L™K™Sš2š4š1š,š*š6š)š.š8š-šÇšÊ𯛛›œ œ›÷œœ›øœ@œœœœœœ Ÿ™¤’˜›^õ¡ ”œª—¡š¢¨ž£¿©–¦ž™ž›žšžåžäžçžæŸ0Ÿ.Ÿ[Ÿ`Ÿ^Ÿ]ŸYŸ‘Q:Q9R˜R—VÃV½[H[G]Ë]Ï^ñaýekjükjøkpCpJpHpErrrs~uvjwÐy-y1y/|T|S|ò~Š~‡~‹~†~M»€0݆†*†&††#†††'†.†!† †)††%?ö@ˆ)ˆˆˆ ˆ$ˆˆ+ˆJ‰m‰i‰n‰k‰ú‹y‹x‹E‹z¯ŽŽŽŒ^[]‘F‘D‘¹”?”;”6”)”=”<”0”9”*”7”,”@”1•å•ä•ã—5—:—¿—á˜d˜É˜Æ˜À™X™Vš9š=šFšDšBšAš:^ö¡š?šÍ››››:›Rœ+œœœ,œ#œ(œ$œ!·¶¼ÁÇÊϾÅûµÎ¹¬È±­Ì³Í²žzžœžëžîžíŸŸŸŸ1ŸNŸeŸdŸ’N¹VÆVÅVËYq[K]Õ]Ñ^òe!e e&e"k kl pUpRrr©stØtÕtÙt×vmv­y5y´zp|W|\|Y|[|Z?÷@|ô|ñ~‘O‡Þ‚k†4†3†,†2†6ˆ,ˆ(ˆ&ˆ*ˆ%‰q‰¿‰¾‰û‹~‹„‹‚‹†‹…‹Ž•Ž”ŽšŽ’ŽŽ–`b‘G”L”P”J”O”G”E”H”F—?—ã˜j˜i˜Ë™T™[šNšSšLšOšHšJ^÷¡šIšRšPšÐ››+›;›V›UœFœHœ?œDœ9œ3œAœ<œ7œ4œ2œ=œ6ÛÒÞÚËÐÜÑßéÙØÖõÕÝž¶žðŸ5Ÿ3Ÿ2ŸBŸkŸ•Ÿ¢Q=R™XèXçYr[M]؈/_Obbe)e%e–fëkkkÊp[pZr"s‚ssƒvpwÔ|g|f~•‚l†:†@†9†<†1†;†>ˆ0ˆ2ˆ.ˆ3‰v‰t‰s‰þ?ø@‹Œ‹Ž‹‹‹ˆŒEŽ˜dc‘¼”b”U”]”W”^—ĘšVšY›œRœXœPœJœMœKœUœYœLœNû÷ïãëøäöáîæòðâìôóèížÂžÐžòŸŸŸ8Ÿ7Ÿ6ŸCŸO^ø¡ŸqŸpŸnVÓVÍ[N\me-fíkp_pap]p`r#tÛtåwÕy8y·y¶|j~—‰‚m†Cˆ8ˆ7ˆ5ˆK‹”ŽžŽ‘¾‘½‘”k”h–å—F—C—G—Ç—åš^šÕ›Yœcœgœfœbœ^œ`žþžžžžžž ÿýžž ŸŸFŸtVÔe.e¸kkkpbr&rªwØy9|i|k|ö~š?ù@~˜~›~™à†F‰y‰|‰{‰ÿ‹˜Ž¥ޤŽ£”n”m”o”q”s—I˜r™_œhœnœmž ž žžžžž¡žõŸ ŸGŸxŸ{ŸzŸyWpf|oˆ<²ަ‘Ôt”x”v”uš`œtœsœqœužžžöŸ 5ù¡Ÿ¤phpe|÷†jˆ>ˆ=ˆ?‹žŒœŽ©ŽÉ—K˜s˜Ì™a™«šdšf›$žžŸHbkr'†Lލ”‚”€šišh›.žr)†K‹Ÿ”ƒœyž·vuškœzžpiž¤Ÿ~ŸIŸ˜opensrs-client-3.0.0/maps/KSC5601-1992.map0000644017777601777760000006312510770014202020535 0ustar nobodynogroup00000000000000¸'0_ < ¥!] >A¬¬¬ ¬¬¬!¬%¬.¬2a¬5¬:¬= ¬A¬L¬N¬U~¬V¬Y¬]¬r¬u¬y¬{¬‚¬‡¬¬‘¬•¬ž¬¢¬«¬­¬±¬º¬¾¬Â¬Å¬É¬Í¬Ö¬Ø¬â¬å¬é¬ë¬í¬ò¬ô¬÷¬þ­­­­­­‚A­­­­!­*­.‚a­6­9­=­F­H­J­Q­U~‚­Y­b­d­n­q­w­~­€­ƒ­Š­ ­‘­ž­¥­¸­Â­Å­É­Ò­Ô­Ý­á­åƒA­ú­ý®® ® ®®ƒa®®2®5®9®;~ƒ®=®B®D®G®K®O®Q®U®W®^®b®f®j®m®q®z®~®†/®®¿®Á®Å®Î®Ò®Ú ®Ý„A®æ®é®ì®î®õ®ù ®ý„a¯¯ ¯¯~„¯$¯.¯1¯3¯5¯>¯@¯D¯J ¯Q¯^¯f¯z¯¯…¯‰¯’¯–¯¯º¯½…A¯¿¯Á¯Ê¯Ì¯Ï¯Õ¯Ý…a¯â¯ê¯ò¯õ¯ù°~…°° °° °°)°F°I°K°M°O°V°X°Z°^°~°°…°Ž°°’°›°°£†A°¥°ª°°°²°¶°¹°½°Æ°Ê°Ò†a°Ó°Õ°Ù°á °æ~†°ñ± ± ±±±±±&±)±-±6±:±B±E±I±R±V±Y±]±a±z±}±±ƒ±Š±Œ±Ž±•±™±‡A ±ž±©‡a±¹±Í±Ñ±Õ~‡±Ö±Þ±à±ê±í±ñ±ú±ü±þ²² ² ²²²²!²5²=²Y²]²a²jˆA²o²v²}²†²Šˆa²²’²•²›²¢²¤²§²«²­²±²µ~ˆ²¸²Ê²Í²Ñ²Ó²Ú²Ü²Þ²ã²ç²é²ð²ö²ü³³³ ³³7³³W³Y³]³`‰A³f³h³j³l³o³r³u³y³‚³†³‰a³Ž³‘ ³•³¢³©³­~‰³®³Æ³É³Í³Ï³Ñ³Ö³Ø³Ú³Ü³Þ³á³å³é³ý´´´´!´*´,´5ŠA ´E´R´U´Y´b´d´fŠa´g´m´~Š´ƒ´‰´ž´¥´©´­´¶´¸´º´Á´Å´É´Ñ´Ö´Þ´á´å´ç´î´ð´ò´ùµµµ‹Aµµ&µ+µ2µ5µ9µBµF‹aµGµNµQµUµ^ µb~‹5µkµ¢µ¥µ©µ¬µ²µ¶µ¾µÁµÅµÎµÒµÙµíŒA¶¶¶¶Œa¶¶&¶-¶5~Œ ¶;¶I¶e3¶i¶ž¶¡¶¥¶­¶²A¶Ã ¶Õa¶Þ¶ñ¶õ¶ù~¶û·"··*·-·1·:·<·E·I·M ·V·a·e·i·r·t·v·~··…·Ž·“·š·ŽA·Ÿ·¡·ª·®·¶ ·¹Ža·Â·È·Ê~Ž·Þ·î·ñ·õ·þ¸¸ ¸ ¸¸¸¸¸&¸)¸-¸6¸:¸A ¸E¸R¸T¸^¸a¸e¸n¸p¸r¸y¸}A¸…¸Ža¸ ¸©¸±¸µ¸¹~¸¾¸Â¸Ä¸Æ¸Í¸Ñ¸Õ¸Þ¸à¸â¸ê¸í¸ñ¸ú¸ü¸þ¹¹¹!¹>¹A¹E¹M¹P¹RA¹Z¹]¹a¹j¹l¹n¹v¹y¹}a¹~¹†¹ˆ¹‹¹~ ¹Ÿ¹®¹±¹µ¹¾¹À¹Â¹Ê¹Í¹Ó¹Ú¹Ü¹ß¹â¹æ¹é¹í¹ö¹ûº º "ºº:º=ºAºC‘AºGºJºLºOºVºYº]ºfºj‘aºrºu ºyº†ºˆº~‘º“ºªº­º±º³ººº¼º¾ºÅºÉ"ºÚºý»»»»»»»»!’A»(»*»,»7»9»?»F»H»J»N»Q’a»S»U»Y»b»d»m~’»r»‰»»‘»¥»©»­»µ»¸»Á»Å»É»Ñ$»Ô»ú»ý¼“A¼¼ ¼¼¼¼¼ ¼&¼(¼*¼.¼2¼5“a¼6¼9¼B¼F¼J¼N ¼Q~“¼Z&¼^¼†¼‰¼¼¼–¼˜¼›¼¢¼¥¼©¼²¼¶¼¾¼Á¼Å¼Î¼Ò¼Ö¼Ù¼Ý¼÷¼ù¼ý”A¼þ½½½ ½ ½”a½½% ½-~”½:½A½J½M½Q ½Z½e½i½‚½…½‹½’½”½–½›½ ½¥½±½¹•A½Ò½Ö½Ù ½Ý½ê½ñ•a½ò½õ½ù¾¾¾¾¾~•¾¾$¾ ¾F¾I¾M¾O¾V¾X¾\¾b¾e¾i¾k¾r¾v¾~¾¾…¾Ž¾’¾š¾©–A¾¸¾Ò–a¾Õ¾Ù¾á¾æ ¾í~– ¾ö¿¿ ¿"¿¿B¿E¿I¿R-¿V—A¿ƒ ¿•—a¿ž¿±~— ¿¹¿Æ¿Î¿Ñ¿Õ¿Ý¿àZ¿âÀ=˜AÀ@ÀRÀY˜aÀ]ÀaÀj~˜ÀzÀ’À•À™À¢À¤À¦À®À±À·À¾ÀÂÀÆÀÊÀÍÀÑÀÚÀÞÀæÀéÀíÀöÀøÀúÁÁÁ ÁÁÁ!Á%Á(Á.™AÁ2Á7Á:Á=ÁAÁJÁNÁV™aÁYÁ]ÁfÁjÁqÁuÁy~™ Á|Á†ÁÁ‘Á•Á—ÁžÁ Á¢Á¦ÁªÁ­ Á±Á¾ÁÅÁÉÁÍÁÕÁÙÁáÁåÁéÁòÁôÁþÂÂÂÂÂÂÂÂ!šAÂ$Â*Â,Â.Â0Â3Â5šaÂFÂIÂRÂUÂYÂaÂf~šÂgÂnÂqÂuÂ~€‚Š‘™œž¦©®¶¸"ºÂÞÂáÂåÂîÂðÂòÂ÷ÂúÂýÃà ÛAÃÃÃÃÃ& Ã*›aÃ3ÃF~›ÃNÃjÃmÃqÃsÃzÃ~Ã…É3ÃÃÁÃÚœAÃÛÃÝÃáÃãÃêÃîÃöÃùœa ÃÿÄ Ä~œ ÄÄ%Ä-Ä1Ä5 Ä>ÄIÄfÄiÄmÄvÄzÄÄ• ÄAĪĹ ĽaÄÆ~ ÄàÄêÄòÄõÄùÄû ÅÅ ÅÅ ÅÅ*Å-Å1Å:Å<Å>ÅFÅKÅOÅVÅZÅ_ÅbÅeÅiÅrÅvÅ~ÅÅ…ňÅŽÅÅ’žAÅ–Å™ÅÅ¡ ŪŶžaÅ·źÅ¿ÅËÅÍÅÏÅÒÅÕÅÙÅâÅäÅæ~žÅèÅïÅñÅõÅøÆÆ Æ ÆÆÆÆ&Æ)Æ/Æ1Æ6Æ8Æ:Æ<ÆBÆEÆIÆRÆVÆ^ ÆaÆmÆpÆrÆzÆ}ÆÆŠÆŒÆŽÆ–Æ™ÆƦŸAƨƪƲƵÆ»ÆÂÆÄÆÆÆÎŸaÆÏÆÑÆÕÆÞÆâÆêÆíÆñ~ŸÆóÆúÆþÇÇ Ç ÇÇÇÇ"Ç%Ç)Ç2Ç4Ç6Ç8Ç>ÇAÇEÇKÇNÇPÇYÇ]ÇaÇiÇlÇvÇyÇdžÇ‹ÇǒǕǙǛǢǧÇ®DZǵ AǸǾÇÂÇÊÇÍÇÏÇÑÇÙ aÇÞÇåÇéÇí~ ÇûÈÈÈ È ÈÈÈÈÈ!È%È.È0È2È9È=ÈAÈJÈNÈUÈrÈuÈyÈ{ȂȄȈȎȕȞȠȢ¡AȥȩȾ¡aÈÂÈÅÈÉÈÍÈÖÈØÈÚÈâÈå~¡ÈæÈöÈþÉÉÉ0· %¨0­ "%ÿ<"<  0 0±×÷"`"d""4° 2!!+ÿàÿå&B&@" "¥#"""a"R§ ;&&%Ë%Ï%Î%Ç%Æ%¡% %³%²%½%¼!’!!“0"j""=""5"+"" "†"‚"*")"'ÿâ¢AÉÉÉ¢aÉ-É5e¢ÉHÉRÉUÉYÉbÉdÉm!Ò!Ô""´ÿ^ÇØÝÚÙ¸Û¡¿Ð".""¤!  0%Á%À%·%¶&d&`&e&g&c"™%È%£%Ð%’%¤%¨%§%¦%©&h&&&&¶ !•!—!™!–!˜&m&i&l22!3Ç!"3Â3Ø!!£AÉqÉu É}ÉŠÉ£aɑɚɜɞ~£ɯÉÂÉÅÉÉÉËÉÒÉÔÉ×ÉÛ;ÿÿæ!ÿ=ÿã¤AÉÞÉáÉãÉåÉèÉîÉòÉúÉýʤaÊÊ ÊÊ Ê~¤Ê&Ê*^11¥AÊGÊNÊQÊUÊ^ÊbÊi¥aÊkÊ~Ê…*¥ʇÊ™ !p ¥° !`¥Á‘£¥á±Ã¦AʨʾÊÁÊŦaÊÆÊÎÊÐÊÒÊÔÊÚÊád¦ÊèÊíÊõË %%% %%%%%,%$%4%<%%%%%%%#%3%+%;%K% %/%(%7%?%%0%%%8%B%%%%%%%% %%!%&%)%-%1%5%9%=%@%C§AË ËËËË"§aË*ËBo§ËEËJËMËQËZË^Ëe3•!3˜3Ä3£ 3™3Ê33Ï3ˆ3È3§ 3°3€3º3!&3À3Š3Ö3Å3­3Û3©3Ý3Ð3Ó3Ã3É3Ü3ƨA ËmËz¨aˉË$¨ˤ ˹ÆÐª&¨¦2¨¨?AØRºÞfJN¨±2`$Ð$`½!S¼¾![©AËÅ ËÕ©aËàËåËèËê~©ËýÌÌÌÌÌ#æð'138@BøSßþgKI2$œ$t¹² t  ªAÌ%Ì*Ì-Ì/Ì1Ì:Ì?ÌFÌIÌMªaÌOÌVÌZÌaÌeÌgÌiÌqsªÌsÌvS0A«A̔̚ÌÌ¡̪Ì®̶̹«a̺̽ÌÆÌÈÌÊÌÑÌÕv« ÌÛÌåÌí ÌñV0¡¬AÌþÍÍ Í ÍÍÍͬaÍ!Í%Í) Í-Í:A¬Í?Í]!¬Ñ0Q6­AÍaÍeÍnÍpÍrÍy­aÍ Í‰Í–Í™Í ­Í ͦͨͪͱÍÅ®AÍÆÍÍÍÑ®aÍâÍéÍíÍñÍúÍüÍþ ®ÎÎÎ Î ÎÎÎ"Î%Î)¯AÎ,Î2Î4Î6¯aÎJÎZÎ]ÎbÎjÎl ¯ÎnÎvÎyÎ}ΆΈΊÎ’ΕΙ°AΚ΢Φ ή°aλÎÂ~°ÎÖÎæÎéÎíÎöÎú¬¬¬¬¬¬ ¬$¬,¬/¬8¬<¬@¬K¬M¬T¬X¬\¬p¬t¬w¬z¬€¬ƒ¬‰¬¬”¬œ¬Ÿ¬¨¬¬¬¯¬¸¬»¬Á¬Ä¬È¬Ì¬Õ¬×¬à¬ä¬ç¬ê¬ì¬ï¬ó¬õ¬ü­­­±AÏÏÏ ÏÏÏÏÏ!±aÏ%Ï.Ï2 Ï9~±ÏEÏVÏYÏ]ÏfÏhÏj­ ­­­­­ ­)­,­4­8­<­D­G­I­P­T­X­a­c­l­p­s­{­­­ˆ­Œ­­œ­¤­·­À­Ä­È­Ð­Ó­Ü­à­ä­ø­ü­ÿ®® ® ®®0®4®7®:®@®C®E®J®L®P®T®V®\®_®e®h®l®p®x²AÏmÏrÏuÏyÏφϲaώϢϩ~²ϪϱÏÅ®y®{®„®Œ®¼®À®Ä®Ì®Ï®Ø®Ü®è®ë®í®ô®ø®ü¯¯ ¯¯,¯0¯2¯4¯<¯?¯A¯H¯P¯\¯d¯y¯€¯„¯ˆ¯¯•¯œ¯¸¯¼¯À¯Ç¯Ë¯Í¯Ô¯Ü¯è¯ð¯ô¯ø°°° °°°°(°D°H°J°L°N°S°W°Y³AÏÌÏâÏåÏé³aÏêÏòÏôÏöÏýÐÐ~³Ð Ðа]°|°€°„°Œ°°‘°˜°œ°Ÿ°¨°«°±°³°¸°¼°Ä°Ç°Ð°Ô°Ø°à°å±± ±±±±±#±(±,±4±7±@±D±H±P±T±X±\±`±x±|±€±‚±ˆ±‹±±’±˜±œ±¨±Ì±Ð±Ô±Ü´AÐ.Ð6Ð9Ð=ÐFÐHÐJ´aÐQÐUÐY ÐaÐn~´ÐqÐuÐ~Ђ±ß±è±ì±ð±ù±û±ý²²² ²²²² ²4²<²X²\²`²h²t²|²„²‰²²”²˜² ²£²¥²ª²¬²°²´²È²Ì²Ð²Ò²Ø²Û²Ý²â²ä²è²ë²ó²÷²ÿ³³³³³³T³X³[³^³dµAЕЦЩЭµaгжикÐÂÐÅÐÊÐÒÐÖ~µÐÛÐÞÐáÐåÐîÐò Ðù³g³i³k³n³p³t³x³€³ƒ³Œ³³”³ ³¨³¬³Ä³È³Ë³Î³Ð³Ô³×³Ù³Û³Ý³à³ä³è³ü´´´´ ´(´+´4´P´T´X´`´c´e´l´€´ˆ´´¤´¨´¬´µ´·´¹´À´Ä´È´Ð´Õ´Ü´à´ã´æ´ì´ï´ñ´øµµµµ$µ'µ0µ4µ8¶AÑѶaÑ Ñ2Ñ5Ñ9Ñ;~¶Ñ?ÑBÑFÑNÑQÑUÑ^Ñ`ÑbÑiÑmµ@µCµKµPµTµ\µ_µ µ¤µ¨µªµ°µ³µ»µÀµÄµÌµÏµØµì¶¶¶¶%¶,¶4¶H¶d¶h¶œ¶ ¶¤¶«¶±¶Ô¶ð¶ô¶ø···(·,·/·8·;·D·H·L·T·`·d·h·p·s·u·|·€·„·Œ··–·AÑnÑ}Ñ…щ·aыѢѥ~·Ñ©ѲÑ´ѶÑ»ѽÑÁ·˜·œ· ·¨·«·´·¸·Ç·É·ì·ð·ô·ü·ÿ¸¸ ¸¸¸¸¸$¸(¸,¸4¸7¸@¸D¸Q¸S¸\¸`¸d¸l¸o¸q¸x¸|¸¸¨¸°¸´¸¸¸À¸Ã¸Å¸Ì¸Ð¸Ô¸Ý¸ß¸á¸è¸ì¸ð¸ø¸û¸ý¹¹¹ ¹<¹@¹D¹L¹O¹Q¹X¹\¹`¹h¸AÑÐÑÙ¸a ÑëÑõÑù~¸ÒÒ Ò¹k¹m¹t¹x¹|¹„¹‡¹‰¹¹¬¹°¹´¹¼¹¿¹Á¹È¹Ì¹Î¹Ø¹Û¹Ý¹á¹ã¹è¹ì¹ô¹÷ºººº8º<º@ºBºHºKºMºSºXº\ºdºgºpºtºxºƒº‡ºŒº¨º«º°º²º¸º»º½ºÄºÈºØºü¹AÒ*Ò.Ò1Ò5Ò>Ò@ÒBÒI¹aÒMÒ]Òe~¹ÒiÒ‚Ò…Ò‰»»» »»»»» »)»+»4»8»;»D»G»I»M»O»T»X»a»c»l»ˆ»Œ»»¤»¨»¬»´»·»À»Ä»È»Ð»Ó»ø»ü»ÿ¼¼¼ ¼¼¼¼¼$¼'¼)¼-¼0¼4¼8¼@¼C¼I¼L¼P¼]¼„¼ˆ¼‹¼Ž¼”¼—ºAÒÒ’Ò–ÒÒ¡Ò¥Ò­ºaÒ®Ò²ÒºÒ½ÒÁÒÃÒÊÒÌ~ºÒÒÒÕÒÙÒÝ ÒæÒòÒõÒù¼™¼ ¼¤¼§¼°¼³¼¼¼À¼Ä¼Í¼Ï¼Õ¼Ø¼Ü¼ô¼ø¼ü½½½ ½½½$½,½@½H½L½P½X½d½h½€½„½‡½½“½•½™½œ½¤½°½¸½Ô½Ø½Ü½é½ð½ô½ø¾¾¾¾ ¾¾¾¾¾D¾H¾L¾N¾T¾W¾Y¾`¾d»AÒûÓÓÓÓÓÓÓÓÓ"»aÓ$Ó&Ó*Ó-Ó1Ó:Ó>ÓF~» ÓJ¾h¾j¾p¾s¾{¾€¾„¾Œ¾¾˜¾¨¾Ð¾Ô¾×¾à¾ã¾ì¿¿¿¿¿@¿D¿H¿P¿U¿”¿°¿Å¿Ì¿Ð¿Ô¿Ü¿ß¿áÀ<ÀQÀXÀ\À`ÀhÀÀ”À˜À À£À¥À¬À¯À³À¼À¿ÀÅÀÈÀÌÀÐÀØÀÛÀä¼AÓjÓ~ÓÓ…¼aÓˆÓŽÓ’ÓšÓÓ¡ÓªÓ¬Ó®~¼Ó¯ÓµÓ¹Ó½ÓÆÓÊÓÑÀåÀèÀìÀôÀ÷ÀùÁÁÁÁÁÁÁ#Á&Á,Á/Á6Á8Á<Á@ÁHÁKÁTÁXÁ\ÁdÁgÁpÁtÁxÁ…ÁŒÁÁ”Á–ÁœÁŸÁ¡Á¥Á¨Á¬Á°Á½ÁÄÁÈÁÌÁÔÁ×ÁàÁäÁèÁðÁóÁü ÂÂÂÂÂÂ(Â+Â-½AÓ×ÓÙÓâÓäÓîÓñÓõ½aÓøÓþÔÔÔ ~½ÔÔÂ/Â1Â4ÂHÂPÂTÂXÂ`ÂeÂlÂpÂtÂ|ˆ˜›Â¤¨¬´·¹ÂÜÂàÂãÂëÂïÂñÂöÂøÂûÃÃà ÃÃÃÃ$Ã(ÃEÃhÃlÃpÃrÃxÃ|ÄÈÃŒÃÀÃØÃÜÃßÃâÃèÃíÃôÃøÄÄÄ$Ä,Ä0¾AÔ8ÔAÔE¾aÔTÔ]ÔaÔeÔnÔp~¾ÔsÔzÔ}ÔԃԊԌԎ Ô•Ä4Ä<ÄHÄdÄhÄlÄtÄyĀĔĜĸļÄéÄðÄôÄøÄúÄÿÅ ÅÅÅÅ(Å,Å0Å8Å;Å=ÅDÅHÅLÅSÅWÅ]Å`ÅdÅhÅpÅsÅ|ŀńŇÅŒÅőŕŗŜŠũŴŸÅ»ÅÄÅÌÅοA ÔžÔª¿aÔ¹ÔÍÔÑÔÕ~¿ÔÖÔÝÔàÔéÔíÔñÔùÔüÅÐÅÔÅØÅàÅãÅåÅìÅðÅôÅöÅüÆÆ ÆÆÆÆ$Æ(Æ,Æ0Æ3Æ7Æ9Æ;Æ@ÆDÆHÆPÆSÆ\Æ`ÆlÆoÆqÆxÆ|Æ€ƈÆ‹ÆÆ”ƘÆœƤƧÆ©ưÆ´ƸÆÀÆÃÆÅÆÌÆÐÆÔÆÜÆàÆèÀAÔþÕÕ Õ ÕÕÀaÕ~ÀÕ8Õ>ÕAÕEÕNÕPÕRÕZÕ]ÕaÆéÆìÆðÆøÆýÇÇÇ ÇÇÇÇ Ç$Ç(Ç0Ç3Ç5Ç7Ç<Ç@ÇDÇJÇLÇOÇQÇ\Ç`ÇhÇkÇtÇxÇ|ǃLJÇŽÇǔǖǚǠǣǬǰÇ´ǼÇ¿ÇÈÇÌÇÎÇÐÇØÇÝÇäÇèÇìÈÈÈÈ ÁAÕdÕfÕjÕlÕnÕvÕyÕ}Õ†ÕŠÁaՌՑզ~Á Õ¨ÈÈÈÈÈ È$È,È/È1È8È<È@ÈHÈLÈTÈpÈtÈxÈzÈ€ȃȅȋȔÈÈŸÈ¡ȨȼÈÄÈÈÈÌÈÔÈ×ÈÙÈàÈäÈõÈüÉÉÉ ÉÉÉÉ,É4ÉPÉTÉXÉ`ÉcÉlÉpÉtÉ|ɈÉŒÉɘÉ›ÉÉÀÉÄÉÇÉÊÉÐÉÓÂAÕÊÕÍÕÑÕÓÕÚÕÜÕÞÕæÕéÕíÂaÕïÕöÕøÕúÖÖÖ Ö~ÂÖÖÖ!Ö% Ö.Ö:ÉÕÉÙÉÜÉàÉâÉäÉçÉìÉïÉøÉüÊÊÊ ÊÊÊ)ÊLÊPÊTÊ\Ê_ÊhÊ}Ê„ʘʼÊÀÊÄÊÌÊÏÊÑÊÓÊØÊàÊìÊôËËËËË ËAËHËLËPËXË]ËdËxËœ˸ËÔËäËçËéÌ ÌÌÌÌ!Ì'Ì,Ì.Ì0Ì8Ì;ÃAÖ=ÖAÖFÖJÖLÖNÖRÖVÖYÖ]ÃaÖbÖhÖjÖr Öu~ÃÖÖ„Ö†ÖŽÖ‘Ö•ÖžÖ Ö¢Ö©Ì<ÌDÌHÌLÌTÌWÌ`ÌdÌfÌhÌpÌų̴̸̘̜̠̫̼ÌÄÌÇÌÉÌÐÌÔÌäÌìÌðÍÍÍ ÍÍÍÍÍ$Í(Í,Í9Í\Í`ÍdÍlÍoÍqÍx͈Í”͘ÍœͤͧÍ©ͰÍÄÍÌÍÐÍèÍìÍðÍøÍûÍýÎÎÎ ÎÎÎ Î$Î(Î0Î3Î5ÄAÖ«Ö­Ö±ÖºÖ¼ÖÆÖÉÄaÖÍÖÒÖÕÖØÖÚÖáÖåÖé~ÄÖîÖñÖöÖþ× ××ÎXÎ\Î_ÎhÎkÎmÎtÎxÎ|΄·ΉÎΔΘΠΣάÎÁÎäÎèÎëÎôÎ÷ÏÏÏÏÏÏÏÏ Ï$Ï,Ï/Ï8ÏTÏXÏ\ÏdÏgÏiÏpÏtÏxπυόϡϨϰÏÄÏàÏäÏèÏðÏóÏõÏüÐÐÐÐÐ-Ð4Ð8Ð<ÅA××××!×*×,×.×6×9Åa×:×=×E×H×J×R×U×Z~Å×_×b×d×f×j×m×q×u×~ׂ׊ÐDÐGÐIÐPÐTÐXÐ`ÐlÐpÐtÐ|ÐФШЬдзйÐÀÐÄÐÈÐÐÐÓÐÜÐàÐäÐìÐïÐøÑ Ñ0Ñ4Ñ8Ñ:Ñ@ÑCÑLÑPÑTÑ\Ñ_ÑaÑhÑlÑ|Ñ„шÑ ѤѨѰѳѵѺѼÑÀÑØÑôÑøÒÒ ÒÒ,Ò0Ò4Ò<Ò?ÒAÒHÒ\ÆA×בךלמ^Æ¡ÒdÒ€Ò„ÒˆÒҕҜҠҤҬұҸҼҿÒÂÒÈÒËÒÔÒØÒÜÒäÒðÒôÒøÓÓÓÓ ÓÓÓÓÓÓ%Ó(Ó,Ó0Ó8Ó;ÓDÓ|Ó€Ó„ÓŒÓӘӜӠӨӫӭӴӸӼÓÄÓÈÓÐÓØÓáÓãÓìÓðÓôÓüÓÿÔ^Ç¡ÔÔÔ@ÔDÔ\Ô`ÔdÔmÔoÔxÔ|ÔÔ‚ÔˆÔ‹ÔÔ”Ô©ÔÌÔÐÔÔÔÜÔßÔèÔìÔðÔøÔûÔýÕÕÕ ÕÕÕ<Õ@ÕDÕLÕOÕQÕXÕ\Õ`ÕeÕhÕkÕmÕtÕxÕ|Õ„Õ‡ÕÕ¥ÕÈÕÌÕÐÕÒÕØÕÛÕÝÕäÕèÕìÕôÕ÷ÕùÖÖÖÖÖÖÖ ^È¡Ö$Ö-Ö8Ö<Ö@ÖEÖHÖKÖMÖQÖTÖXÖ\ÖgÖiÖpÖtÖƒÖ…ÖŒÖÖ”ÖÖŸÖ¡Ö¨Ö¬Ö°Ö¹Ö»ÖÄÖÈÖÌÖÑÖÔÖ×ÖÙÖàÖäÖèÖðÖõÖü×××××× ×(×+×-×4×8×<×D×G×I×P×T×V×`×c×e×i×l×p×t×|×׈׌×ט×›×^Ê¡O=OsPGPùR SïTuTåV ZÁ[¶f‡g¶gïkLsÂuÂz<‚ÛƒˆWˆˆŠ6ŒÈÏŽûæ™ÕR;StT`jadk¼sωº‰Ò•£OƒR X¾YxYæ^r^yaÇcÀgFgìho—vNw xõzzÿ|!€‚n‚qŠë•“NkUf÷n4x£zí„[‰‡N—¨RØWNX*]Laa¾b!ebgÑjDnuu³vãw°}:¯”QŸ•^Ë¡S#\¬u2€Û’@•˜R[XYÜ\¡]^·_:_Jawl_uzu†|à}s}±ŒT‚!…‘‰A‹’ü–MœGNËN÷P QñXOa7a>ahe9iêou¥v†vÖ{‡‚¥„Ëù“§•‹U€[¢WQù|³¹‘µP(S»\E]èbÒcndÚdçn p¬y[ÝŽù}’E’øN~NöPe]þ^úaiWq†TŽG“uš+N^P‘gph@Q RR’j¢^Ì¡w¼’žÔR«`/òPHa©cídÊh<j„oÀˆ‰¡–”Xr}r¬u}y~m€©‰‹‹tcQb‰lzoT}P:Š#Q|aJ{‹’W“ŒN¬OÓPP¾QRÁRÍSWpXƒ^š_‘ava¬dÎelfof»fôh—m‡p…pñtŸt¥tÊuÙxlxìzßzö}E}“€€?ƒ–‹f“ᘘ8šZ›èOÂUSX:YQ[c\F`¸bhBh°^Í¡hènªuLvxxÎz=|û~k~|ŠŠ¡Œ?–ŽÄSäSéTJTqVúYÑ[d\;^«b÷e7eEerf g¯iÁl½uüvw~z?”€€¡‚æ‚ýƒð…Áˆ1ˆ´Š¥ùœ“.–ǘgšØŸTíe›fòhz@Œ7`VðWd]fh±hÍnþt(ˆž›älhùš¨O›QlQqRŸ[T]å`P`mbñc§e;sÙzz†£Œ¢—N2[ábgœtÜ^ΡyÑƒÓЇвèN“K˜F^Óiè…ÿíùQ [˜[ìachúk>pLt/tØ{¡PƒÅ‰ÀŒ«•Ü™(R.`]bìOŠQIS!XÙ^ãfàm8pšrÂsÖ{P€ñ”[Sfc›kNVP€XJXÞ`*a'bÐiЛA[}€±_N¤PÑT¬U¬[ ] ]çe*eNh!jKrávŽwï}^ù …N†ßNÊ™šU›«NNEN]NÇOñQwRþ^Ï¡S@SãSåTŽVWuW¢[Ç]‡^ÐaübØeQg¸géiËkPkÆkìlBnpxr×s–tw¿wézv}€ ü‚‚ ‚߈b‹3ŒüŽÀ±’d’¶™ÒšEœéןœW \@ƒÊ— —«ž´Tz˜¤ˆÙŽÍáX\Hc˜zŸ[®_zyz®‚ŽެP&R8RøSwWbócrk mÃw7S¥sW…hŽv•Õg:jÃopŠmŽÌ™KùfwkxŒ´^С›<ùSëW-YNcÆiûsêxEzºzÅ|þ„u‰s5•¨RûWGuG{`ƒÌ’ùjXQKRKR‡bhØiu–™PÅR¤RäaÃe¤h9iÿt~{K‚¹ƒë‰²‹9Ñ™Iù NÊY—dÒfjŽt4yy½‚©ˆ~‰_ù “&O SÊ`%bqlr}}fN˜QbwÜ€¯OOQvQ€UÜVhW;WúWüYYGY“[Ä\]]ñ^~_Ìb€e×eã^Ñ¡gg^hËhÄj_k:l#l}l‚mÇs˜t&t*t‚t£uxuxxïyAyGyz{•}}ºˆ€€-€ŒŠ‹OŒHw“!“$˜â™Qššež’}ÊOvT bîhT‘ÑU«Q:ù Zaæù bÏbÿù£ùŠþùf–ùqVù–ãù cOczSWù!gi`nsù"u7ù#^Ò¡} ù&ˆrVÊZù(NCù-QgYHgð€ù.Ys^tdšyÊ_õ`lbÈc{[ç[×Rªù/Yt_)`ù0tYù3™Ñ ù9oÃùD¿²`ñùFfùH\?ùJZéŠ%g{}ùR€ýùX\<låS?nºYƒ6^Ó¡N9N¶OFU®WXÇ_Ve·eæj€kµnMwízï|}ކˈ’‘2“[d»o¾szu¸TUVWMaºdÔfÇmán[omo¹uð€C½…A‰ƒŠÇ‹Z“l“uS{TŽ]UXXX^bbdžhàuv|Ö‡³žèNãWˆWnY'\ \±^6_…b4dás³úˆ‹Œ¸–ŠžÛ[…_·`³PRR0WX5XW\\`\ö]‹^¦_’`¼cc‰dhC^Ô¡hùjÂmØn!nÔoäqþvÜwyy±z;„‰©ŒíóŽHSý“M–v—ÜkÒprXr¢shwcy¿{ä~›‹€X©`Çefeýf¾lŒqqÉŒZ˜NmzNÝQ¬QÍRÕT a§gqhPhßmo|u¼w³zå€ô„c’…Q\e—g\g“uØzǃsùZŒF˜-\oÀ‚šAo’ _—]jYqÈv{{I…ä‹‘'š0U‡aöù[vi…^Õ¡†?‡ºˆøù\mpÙsÞ}a„=ù]‘j™ñù^N‚Sukkp>r†-žRL£]Pdåe,koë|C~œ…͉d‰½bÉØˆ^Êgmjrütto‡‚ÞO†] _ „ Q·c ueN®PQiQÉhj|®|±|ç‚oŠÒ‘ÏO¶Q7RõTB^ìanb>eÅjÚoþy*…܈#•­šbšjž—žÎR›fÆkwpy+b—Babe#o#^Ö¡qIt‰}ô€o„î&#“JQ½RR£m pȈÂ^Ée‚k®oÂ|>suNäO6Vùù_\º]º`s²{-šÎ€F’4–ö—H˜ŸaO‹o§y®‘´–·RÞù`dˆdÄjÓo^prv瀆†\ï—2›oúžuxŒy} ƒÉ“žž“ŠÖXß_g'p'tÏ|`€~Q!p(rbxʌŒڌô–÷N†PÚ[î^Öe™qÎvBw­€J„ü^ס|›'ŸXØZA\bjmÚov;}/~7…‰8“ä–KR‰eÒgói´mAnœpt t`uYv$xk‹,˜^Qmb.–xO–P+]mê}¸*_‹aDhùa–†RÒ€‹QÜQÌi^z}¾ƒñ–uOÚR)S˜TU\e`§gNh¨mlrrøttƒùbuâ|ly¸ƒ‰ˆÏˆá‘̑Жâ›ÉTo~qÐt˜…úŽª–£œWžŸg—mËt3è—x,^Ø¡zË{ |’ditjuòx¼x虬›Tž»[Þ^Uo œƒ«ˆNSMZ)]Ò_Nabc=fifünÿo+pcwž„,…ˆ;™Eœ;Ub¹g+l«ƒ ‰j—zN¡Y„_Øg}²T‚’ƒ+ƒ½™WËY¹Z’[Ðf'gšh…kÏqduŒ·Œã›EŒŠ–Lš@ž¥[_lsvòvß„ Qª‰“QMQ•RÉhÉl”ww }¿}ì—bžµnÅ^Ù¡…Q¥T T}ffi'nŸv¿w‘ƒ„‡Ÿ‘i’˜œôˆ‚O®Q’RßYÆ^=aUdxf®gÐj!kÍkÛr_ratAw8wÛ€‚¼ƒ‹‹(ŒŒg(lrgvîwfzF©kl’Y"g&„™SoX“Y™^ßcÏf4gsn:s+zׂד(RÙ]ëa®aËb bÇd«eàiYkfkËq!s÷u]~F‚ƒ…jŠ£Œ¿—'aX¨žØPRT;UOe‡^Ú¡lv} €^†Š•€–ïRÿl•riTsZš\>]K_L_®g*h¶icn<nDw |sŽ…‡‹÷—ažô\·`¶a a«eOeûllïsŸsÉ}á•”[Ƈ‹R]SZbÍdd²g4j8lÊsÀtž{”|•~Š‚6…„ë–ù™ÁO4SJSÍSÛbÌd,ee‘iÃlîoXsíuTv"vävüxÐxûy,}F‚,‡àÔ˜˜ïRÃbÔd¥n$oQ^Û¡v|Ë‘±’bšî›CP#PWJY¨\(^G_wb?e>e¹eÁf g‹iœnÂxÅ}!€ª€‚+‚³„¡†ŒŠ*‹¦–2ŸP OóùcWù_˜bÜc’gonCqvÀ̀ڈô‰Œà)‘M–jO/Op^gÏh"v}›D^aj qiqÔujùd~A…C…é˜ÜO{Op•¥Qá^hµl>lNlÛr¯{ălÕt:PûRˆXÁdØj—t§vV^Ü¡x§†•â—9ùeS^_‹Š¨¯ŠR%w¥œIŸNPQu\[^wff:gÄhÅp³uuÅyÉzÝ'™ šOÝX!X1[öfnkemnzo}säu+ƒéˆÜ‰‹\OPÕSS\[“_©g yyƒ/…‰‰†9;™¥œg,NvOøYI\\ïcghÒpýq¢t+~+„ì‡"’ÒœóN NØOïP…RVRoT&TWàY+Zf^Ý¡[Z[u[Ì^œùfbvewe§mnn¥r6{&|?6Pš‚@‚™ƒ©ŠŒ ŒæŒûtºè‘Ü––D™ÙœçSRT)VtX³YTYn_ÿa¤bnfl~qvÆ|‰|Þ}‚¬ŒÁ–ðùgO[__bÂ])g hÚx|~ClNP™SS*SQYƒZb^‡`²aŠbIbyeg‡i§kÔkÖl¸ùht5uúxx‘yÕyØ|ƒ}Ëဥ^Þ¡>ƒò‡ˆèй‹lŒ»‘—^˜ÛŸ;V¬[*_leŒj³k¯m\oñpr]s­Œ§ŒÓ˜;a‘l7€XšNMN‹N›NÕO:O<OOßPÿSòSøUUãVÛXëYbZ[ë[ú\]ó^+_™`cheœe¯gögûh­k{l™l×n#p sExy>y@y`yÁ{é}}r€†‚ ƒŽ„цLjߊPŠ^‹ŒÜf­ª˜ü™ßžRJùigùj^ß¡P˜R*\qeclUsÊu#u{—„œ‘x—0Nwd’kºq^…©N ùkgIhîn‚Ÿ…ˆkc÷o’˜¯N P·PÏQUFUªV[@\\à^8^Š^ ^Â`óhQjanXr=r@rÀvøye{±Ôˆó‰ôŠsŒaŒÞ—X^t½ŒýUÇùlza}"‚rrruu%ùm{X…Xû]¼^^¶_`Ub’ceMf‘fÙføhhòr€t^{n}n}Ör^ࡀ傅¯‰Š“’äžÍŸ YYm^-`ÜffsglPmÅo_wóx©„Ƒ˓+NÙPÊQHU„[ [£bGe~eËn2q}ttDt‡t¿vlyª}Ú~U¨z³‚9†‡ìŠuãx’‘”%™M›®Sh\QiTlÄm)n+‚ …›‰;Š-Šª–êŸgRaf¹k²~–‡þ •ƒ–]em‰qîùnWÎYÓ[¬`'`úbff_s)sùvÛw{l^á¡€V€reŠ ‘’NRâkrmz{9}0ùoŒ°SìV/XQ[µ\\]âb@cƒdf-h³l¼mˆn¯pp¤qÒu&uuŽv{{à|+} }9…,…m†Š4 aµ’·—öš7O×\lg_m‘|Ÿ~Œ‹[k]ýd „À\˜ás‡[‹`šg~mÞŠЦ˜ R7ùppQxŽ“–ˆp‘×OîS×UýVÚW‚XýZÂ[ˆ\«\À^%a^â¡b bKcˆde6exj9kŠl4mo1qçrésxtt²v&wayÀzWzê|¹}}¬~až)ƒ1„„څꈖа‹8Bƒ‘l’–’¹–‹–§–Ö—˜™–šÓ›SÔX~Y[p[¿mÑoZqŸt!t¹€…ƒý]á_‡_ª`BeìhiojSk‰m5mósãvþw¬{M}#‚ƒ@„ô…cŠbŠÄ‘‡“˜™´b ˆSð’e]]'^ã¡]it_‡hoÕbþÒ‰6‰rNNXPçRÝSGbf~iˆ–^OSV6YËZ¤\8\N\M^_`Ce½f/fBg¾gôswây:Å„”„͉–ŠfŠiŠáŒUŒzWô[Ô_`obíi k–n\q„{Ò‡U‹XŽþ˜ß˜þO8OOáT{Z [¸a<e°fhqüu3y^}3Nヘ…ª…Î‡Š Ž«›ùqÅY1[¤[æ`‰[é\ _Ãl^ä¡ùrmñp u‚¯ŠöNÀSAùs–ÙlNžOÄQRU^Z%\èbrY‚½ƒª†þˆYŠ–?–Å™ ]X \³]½^D`áacájn%‘“T˜NœŸw[‰\¸c fOhHw<–Á—˜T›Ÿe¡‹ŽË•¼U5\©]Ö^µf—vLƒô•ÇXÓb¼rÎ(NðY.`f;kƒyç&S“TÀWÃ]afÖm¯x‚~–˜—DS„b|c–m²~ K˜M^å¡jûL¯žN_P;Q¶Y`ùcöi0r:€6ùt‘Î_1ùu}‚å„o„»…åŽùwOoùxXä[C`YcÚeemf˜ùziJj#m pqluÒv y³zpù{Šù|‰Dù}‹“‘À–}ù~™ W_¡e¼ovy¦Šž™­›ZŸlQa¶b‘jÆPCX0_fq ŠŠú[|†OúQ<V´YDc©mù]ªimQ†NˆOYùY‚ù‚^æ¡ùƒk_l]ù„tµyù…‚‚Eƒ9?]ù†™ù‡N¦ùŠWß_yfù‹u«~y‹oùš[V¥X'YøZ[´ùŽ^öùcPc;ù‘i=l‡l¿mŽm“mõoù’pßq6qYù“qÃqÕù”xOxoù•{u}ãù–~/ù—ˆMŽßù˜’[ù›œöùœ`…m…ùŸq±ù •±S­ù¢gÓù¥pŽq0t0‚v‚Ò^ç¡ù¦•»šåž}fÄù§qÁ„Iù¨XKùª]¸_qù¬f fŽiyi®l8lón6oAoÚpp/qPqßspù­t[ù®tÔvÈzN~“ù¯‚ñŠ`Îù±“Hù²—ù³NBP*ùµRSáfólmoÊs wzb‚®…݆ù¶ˆÔŠc‹}Œkù·’³ù¸—˜N”O OÉP²SHT>T3UÚXbXºYgZ[ä`Ÿù¹aÊeVeÿfdh§lZo³^è¡pÏq¬sR{}‡Фœ2Ÿ\KlƒsDs‰’:n«tevzi~† Q@XÅdÁtîuvpÁ•–Í™Tn&tæz©å†Ù‡xŠZI[Œ[›h¡imcs©tt,x—}éëUƒžŒL–.˜fð_€eúg‰ljs‹P-ZkjwîY]l]Ís%uOùºPåQùX/Y-Y–YÚ[åù¼]¢b×dd“dþù¾fÜù¿jHùÀqÿtdùÁ^é¡zˆz¯~G~^€pù‡ YùÀ™Ra~k2mt~‰%±OÑP­Q—RÇWÇX‰[¹^¸aBi•mŒngn¶q”tbu(u,€sƒ8„ÉŽ “”“ÞùÄNŽOQPvQ*SÈSËSó[‡[Ó\$aa‚eôr[s—t@vÂyPy‘y¹}½‚‹…Õ†^ÂGõ‘ê–…–èRÖ_geíf1h/q\z6Á˜ N‘ùÅjRkžoq‰€‚¸…S^ê¡K–•–ò—û…›1NqŠ–ÄQCSŸTáWWW£Z›ZÄ[Ã`(a?côl…m9nrnr0s?tW‚шE`ùÆ–b˜XgŠ’^OMPIPÞSqW YÔZ\ apfn-r2tK}ï€Ã„„f…?‡_ˆ[‰‹U—Ë›ONsO‘QQjùÇU/U©[z[¥^|^¾` `ßacÄe8g ùÈgÔgÚùÉial¹m'ùÊn8ùË^ë¡oás6ùÌt\u1ùÍvRùÎ}­þ„8ˆÕŠ˜ŠÛŠíŽ0ŽBJ>z‘I‘É“nùÐX ùÒkÓ€‰€²ùÓQAYk\9ùÕods§€äù×’•ùØ€bp}h‡ùÜW `iaGk·о’€–±NYTmë…-–p—ó˜îcÖlã‘QÝaɺùOPQ[œaaÿdìikÅu‘wã©‚d…‡ûˆcм^ì¡‹p‘«NŒNåO ùÝY7Yèùß]ò__[`!ùàr>såùäupuÍùåyûùæ€ €3€„‚áƒQù猽Œ³‡ùé˜ô™ ùëp7vÊÊÌü‹NºNÁRSpùíT½VàYû[Å__Ínnùî}jƒ5ùð†“Šùñ—m—wùòNOZO~Xùeån¢8“°™¹NûXìYŠYÙ`AùôzùöƒOŒÃQeSD^í¡ù÷NÍRi[U‚¿NÔR:T¨YÉYÿ[P[W[\`caHnËp™qns†t÷uµxÁ}+€êƒ(……ÉŠîŒÇ–ÌO\RúV¼e«f(p|p¸r5}½‚‘L–Àr[qhçk˜ozvÞ\‘f«o[{´|*ˆ6–ÜNN×S X4X»XïYl\^3^„_5cŒf²gVjj£k o?rFùúsPt‹zà|§xß烊„l…#…”…ψݑ¬•w^î¡–œQTÉW([°bMgPh=h“n=nÓp}~!ˆÁŒ¡ ŸKŸNr-{ŠÍ“OGONQ2T€YÐ^•bµguinjl®nrÙs*u½{¸}5‚çƒù„W…÷Š[Œ¯އ¸–Ο_RãT Zá[ÂdXeunôrÄùûv„zM{|M~>߃{‹+ŒÊdáŽ_êùi“ÑOCOzP³QhQxRMRjXaX|Y`\\U^Û`›b0hk¿lo±^ï¡qNt u0u8uQvr{L{‹{­{Æ~Šn>I’?’““"”+–û˜Z˜k™Rb*b˜mYvdzÊ{À}vS`\¾^—o8p¹|˜—›ŽžÞc¥dz‡vNN•N­P\PuTHYÃ[š^@^­^÷_`Åc:e?eteÌfvfxgþihj‰kcl@mÀmènn^pp¡sŽsýu:w[x‡yŽz z}|¾}Ž‚GŠŠêŒž‘-‘J‘Ø’f’Ì“ ——V^ð¡—\˜ŸR6R‘U|X$^_`ŒcÐh¯oßym{,Í…ºˆýŠøŽD‘–d–›—=˜LŸJOÎQFQËR©V2__kcªdÍeéfAfúfùghh×iýoonqgqår*tªw:yVyZyßz z•|—|ß}D~p€‡…û†¤ŠTŠ¿™Ž m‘ã–;–ÕœåeÏ|³“Ã[X\ SRbÙsP'[—_ž`°akhÕmÙt.z.}B}œ~1k^ñ¡Ž*Ž5“~”OPWP]æ^§c+jN;OOOPZYÝ€ÄTjThUþYO[™]Þ^Úf]g1gñh*lèm2nJop·sàu‡|L}},}¢‚†ÛŠ;Š…pŽŠ31‘N‘R”D™Ðzù|¥OÊQQÆWÈ[ï\ûfYj=mZn–oìq uozãˆ"!u–Ë™ÿƒN-NòˆF‘ÍS}jÛiklA„zXžaŽfþbïpÝuuÇ~R„¸‹INKSê^ò¡T«W0W@_×ccdoe/eèfzgg³kbl`lšo,wåx%yIyW}€¢ó‚‚·‡ŠŒùü¾rvôzz7~T€wUUÔXuc/d"fIfKhmi›k„m%n±sÍtht¡u[u¹váww‹yæ~ ~û…/ˆ—Š:ŒÑŽë°2“­–c–s—O„SñYêZÉ^hNtÆu¾yéz’£†íŒêÌíeŸgùýW÷oW}Ý/^ó¡“ö–Æ_µaòo„NO˜PSÉUß]o]îk!kdxË{šùþŽIŽÊncId>w@z„“/”Ÿjd°o¯qæt¨tÚzÄ|~‚|²~˜‹š ”}™™LR9[ßdæg-}.PíSÃXyaXaúe¬zÙ‹’‹–P P!RuU1Z<^à_pa4e^f f6f¢iÍnÄo2sv!z“9‚YƒÖ„¼PµWð[À[è_ic¡x&}µƒÜ…!‘Ç‘õQŠgõ{V^ô¡Œ¬QÄY»`½†UPùÿRT\:a}bbÓdòe¥nÌv  Ž`–_–»NßSCU˜Y)]ÝdÅlÉmús”z‚…¦ŒäŽw‘ç•á–!—ÆQøTòU†_¹d¤oˆ}´M”5PÉ\l¾mûuw»|=|dŠyŠÂXY¾^cwrRuŠwkŠÜŒ¼^óftmø€}ƒÁŠË—Q›ÖúRCfÿm•nï}àŠæ.^šÔRRTèa”b„bÛh¢^õ¡iiZj5p’q&x]yyyÒz €–‚x‚ÕƒI…IŒ‚…‘b‘‹‘®OÃVÑqíwׇ‰ø[ø_ÖgQ¨SâXZ[õ`¤ad`~=€p…%’ƒd®P¬]gXœb½c¨iixjnkvºyË‚»„)ŠÏ¨ý‘‘K‘œ“““š–Ûš6œ Nu\y]zú{Q{É~.„ÄŽYŽtŽøf%i?tCQúg.žÜQE_àl–‡òˆ]ˆw`´µ„^ö¡SÖT9V4Z6\1pŠà€Zí£‘‰š_òPtNÄS `ûn,\dOˆP$Uä\Ù^_`eh”l»mÄq¾uÔuôvazzI}Ç}ûnô†©–É™³ŸRRGRŘ퉪NgÒoOµ[âg•lˆmxtx'‘Ý“|‡Äyäz1_ëNÖT¤U>X®Y¥`ðbSbÖg6iU‚5–@™±™ÝP,SSUDW|úbXúdâfkgÝoÁoït"t8Š^÷¡”8TQVWf_HaškNpXp­}»Š•Yj+c¢w€=ŒªXTd-i»[•^noú…iQLSðY*` aKk†lplð{€Î‚ÔÆ°˜±údÇo¤d‘eQNTWŠa_hvúuÛ{R}qXỉ*˜9PxYWY¬b•›*a]ry•ÖWaZF]ôbŠd­dúgwlâm>r,t6x4w‚­Û˜R$WBgrHt㌩¦’^ø¡–*QkSícLOiU`–eWl›mrLrýz‰‡Œ_moŽpù¨aO¿PObArG{Ç}èéM—­šŒ¶Wj^sg°„ ŠUT [^c^â_ eƒ€º…=•‰–[OHSS ST†TúW^`b›b±cUúlámfu±x2€Þ/‚Þ„a„²ˆ‰ ’ê˜ý›‘^Ef´fÝprúOõR}_jaSgSjotâyhˆhŒy˜Ç˜ÄšC^ù¡TÁziSŠ÷ŒJ˜¨™®_|b«u²v®ˆ«–BS9_<_ÅlÌsÌubu‹{F‚þ™NO<N OUS¦Y^Èf0l³tUƒw‡fŒÀP—œXÑ[x†P‹´[Ò`h`eñlWo"o£pUð•‘–P—ÓRrDQýT+T¸UcUŠj»mµ}Ø‚f’œ–wžyTTÈv҆䕤•Ô–\N¢O YîZæ]÷`Rb—gmhAl†n/8€›‚*^ú¡ú˜N¥PUT³W“YZ[i[³aÈiwmwp#‡ù‰ãŠrŠç‚™íš¸R¾h8P^xgOƒGˆLN«TV®sæ‘—ÿ™ ™W™™VSXŸ†[Š1a²jös{ŽÒkG–ªšWYUrk—iOÔ\ô_&aøf[lëp«s„s¹sþw)wM}C}b~#‚7ˆRú Œâ’I˜o[Qztˆ@˜ZÌOàSTY>\ýc>myrùƒ¢’Ϙ0N¨QDRW‹^û¡_blÂnÎppPp¯q’sétiƒJ‡¢ˆa¢“£™¨Qn_W`àagf³…YŽJ‘¯—‹NNN’T|XÕXúY}\µ_'b6bHf fgkëmimÏnVnøo”oàoép]rÐt%tZtàv“y\|Ê~€á‚¦„k„¿†N†_‡t‹wŒj“¬˜˜e`Ñb‘wZZfm÷n>t?›B_ý`Ú{TÄ_l^lÓm*pØ}†yŠ ;STŒ[j:pkuu^ü¡yy¾‚±ƒïŠq‹AŒ¨—tú dôe+xºzkN8UšYP[¦^{`£cÛkafehSnqet°}„šiœ%m;nÑs>ŒA•ÊQð^L_¨`M`öa0aLfCi¥lÁn_nÉobqLtœv‡{Á|'ƒR‡WQ–žÃS/VÞ^û_Š`b`”a÷ffgjœmîo®ppsj~j¾ƒ4†ÔЍŒÄRƒsr[–jk”TîV†[]eHe…fÉhŸmmÆ^ý¡r;€´‘ušMO¯PSšTT<U‰UÅ^?_Œg=qfsÝRÛRóXdXÎqqqû…°Šfˆ…¨U§f„qJ„1SIU™kÁ_Y_½cîf‰qGŠñž¾Od:pËuf†g`d‹NøQGQöSm6€øžÑfk#p˜uÕT\y}Šk k=kFT8`pm=Õ‚PÖQÞUœVkVÍYì[ ^ a™a˜b1f^fæq™q¹r§y§z²Špopensrs-client-3.0.0/required/0000755017777601777760000000000010770014215017355 5ustar nobodynogroup00000000000000opensrs-client-3.0.0/required/Locale-Codes-1.06.tar.gz0000644017777601777760000004236610770014202023327 0ustar nobodynogroup00000000000000‹Š¢:Locale-Codes-1.06.tarì=éZÛȲó=E2Ÿc/,38â$ܰ]LÎl™/_ÛnÛ²äÑ‚cfrßö¾Ç­êEÖÒRp„3óMŒT]]][WWWKGN‡ZlõÀé2oµV©n<ÿ®ð‹¬U7××Éw„F£*þ­Öø¿òª²Y_¯âÿ€ÔjõïÈzñ¤¤¯Àó©KÈw63­vÜ„å=ý½ŽRò÷ ×€ùå_¯Õ×å—NþÀu™Ý™Vübú¨U«kk™òßhlrù¯ÕëõMÿZ}³ú©Ó}þõÿ\þKO*ÏÇ̵Œ%c‰ÌOV‰Ï<ß#=Ç%BG¶¶äc€ <–º½mK«Å\@ËÅÀôüŸÚ„º.§'Hª&í øo|ή¨µÜ%”C²Oc—yžéØ@qØ#¦Ï àÄwÈë½£V³Lü³É¢íøÄ’“EÄ3vMÛg]>`xÌñ—‰¸Æ»Èa+Å òåE³uÑ";ÆŠ±°´3çMˆhÿúôœtÀ~ëJ|_ƒÍ |XÄcëøÀ@ä7ûDGc 87˜Àroà°Ú²p9°€ÿ6 ì.ë‘è°Èò¸eÚÀÌY+¥å2I^KÄv@Àý`ÄlŸììJ|.ó0d#ãp ŒK²5àƒ¿æ@¶x}½˜¤n‰˜–ÅúÔâ°!¶\$)4_…$IÊüH‚á8¤ßsíö|°wÓî— €†Â™^GÚý×ê4YNÚ²X"ì²xĆ‹Ëe „ïIˆVg#Ò´pm§-áö˼2©íèá쮂spëä•cYÔÕÂvœ±„=p,gÔ¤äŒyzÄÝáP¿¢¶é È;×±™´w©hxm^æR`v] yŒM:Г9è)+òÈk—Ú-äèj†®gN)ÕCÔHÞM©¯™„ ð·ˆ<Ž?qH×ìõ˜‹æŠMÄ!`ÒX®G),ÒP=ÐZp¿Rd:øî.9¦˜yNÕöp1ÿR:ÚDÕ#„´# .‚èðµsð‘¥t @25·÷/ôìna¢3/ìŒñ‚N&³^`Íñ- qÿtÿFæC»Ê$öì®S/·æ Ù-‘žézÜó¿Ú»Øƒù¢ž[#ù‰²€_ÍQ›¶'lfˆÆ¢,·Ÿeÿu¤æ̓Q²n=ÆÝvŒ![LÍ‚ˆŒÆþ¦ ˆúsaÛ§6ü/†32—,±é(2¡«þqZÀW;6häìBÝdᜇ>¦îpH#àÜ3GZàs“Y1Ìz8pµÐgïöÒÐíÉX ´AaRh£!SsL2Ž+iˆj—Ö.KÛó™,Ö*•Å2ø+"|-•Éâ{žbä`vÉ©mà †éü&Q°ÆŸ0„ädQ \Yá %ò/ò#l‰åÃûÃ"Ù‚{2JÝ/AˆHÒ”±! ï‘§/Ì?ÿ)ïoŸ ƒ}‚%AuÛøÖ뮇ri×ÿŽ ‹b–ZÅ$¾°þ¯5ª›*ÿÓH\ÿ¯5jëÿû¸âëÿ™àõ õ ã)õ æ'Â/€-®¨ âèô`ï¨ùñàôUóãÞÑÙÛ½un¤Ïž‘lFÈÉûãæùár-²wð5ÞûgƒY‹?”îBp5„‘';yÄÜ …¤-»E#£Ez4õ/¦ŽQ¯š¯÷Þ](bV4ÏÈŽnÄuc᯿t¨ôà›‚«±¦ÛøÒ`À£;¿í¥óÿÁ°¨Ì¯¸¾àÿ×Ö6Áÿcæ·ZÛÜ€8#¬o<úÿû¸bþŸáøÛw§dbú² añcROäTûíÅô„À€÷OÜÙÚúÈ›~ä!ér0\Æð¹ß^.=æçdáùc!¢´lŽP¥]5Ç—Í™Mukäè"9¿µ.9œÈÉf·½¤º¶’mF.ENV±þ@Š’ýÓxú'šüQ0c•­;£C#:g«\$³‘:˜@¥tßÛ&ZEËG ÒAÒn<Û´åÖ—²M¡„&‰\Ób,å ]Ó¦HÆI~gÚý®3˜PÏܨîT¸» ŽwûÐòTªæ6¸HÓ¯0¸Hk]Þ(fpb2ÂÜQѥ⒎i,c„Êq©Ò4ù 6¸ûKªý¯›cÛNI€^¨ÒY¡ÈÁPªì¬%€vÃÌ|¶ÅE±„†VŠ`3TXÓHÿ—.þ·¨ÝhŸÝSýÇæÆÖÔªkõõõõÏÿÔkkñÿ}\±ø&xí*àH>NÔ¨Ûñûœƒ,:~Wâ{HñD„¬Bê?BdEÔ„ÈnSÿ1Cr™*º$—”«B•³¢}®Ë.ëð=õ@η(¦'ˆ¡LÅÕW,ÉÏ€Ú^¸&ðl3¨3P%:‚ÐÁÑC±ŠuÀ¼ô@A¸ Q-‹^™=èÕ ôŠz-ÐàZ½e.Ë là(Ó5ɱãZ°¡© Ìa0Í€¹T0µ§tDõPŠòwÎÈÔBŒG©ë °BFe+<'ôŠ^êg«]¼“.kƒé–IË |=³Â²˜öÄq³`û!¬c÷õã´Õ:ÐLXËN¦°Lò†zðv |ߎþ7cðÓPüàzØ„nrj_êIq:ú´Ó1AÙÉÊØ“ª­W«%}¥ø§žÇ| e›ˆ_ze+å8£–i–MM;sÛÎêëP싧Ѻ.ØéžðœÈŠŒ%ûò¶=Ò¦Ô ýF­ÛŽ•!ã5×è!5ÕzÀÌ=¸®Ž &ÃÌ8Sƒ)‡‘qôšÖ¶¾yãfÍ«õj†mܤùÚ9m÷éÀ¥f¶d´EQfR$õÛqÉE*)º%‚3¶'Ñÿ^™¾&Ãf•c§eÜ…&Z&ª:æžàt¥sNpõ ½óßn\ä13’›Uzèá³Ë=ôðÙ5¹ðñÂ0¥,øœê)Š\?yÃÕòt|”&ñÀ Îkp óâ GÎÖÐÏx9ƒÜi.RÀY4ÊEß½‰ŒbÙæu…ó2–«»¿Uÿº´%-zú²Äÿi,àŸOÎÚï%cnⳬôæ¶±ðÙXà§z i0|øùï\y÷0.]þ¦»BåçëÕÚº|ÿ×ÚæÚúæžÿ©×ÏÞËËÿrÁÇr¿pçã?ˆë>ÌŽ8#ci!•^H.hÞ…Y]æ2˜/à\UÎ÷#}æJ,an¡3õÊx"õй>ñHy¢Ú _TV&K!d›v†˜ÄE˜šÅ7‹ðü*ñÔÇdêtÀ¤ª‹‹ e“ #]'¼‰íP-||á?ó¤HS$x’ *àg%37®¯—Ìx‹ÖÌÿ×Ä©Nc4%Oq@Ûü—"÷eø‡3ÿº ˜á)ˆê"sô§ï‚¾ ‹@E„Ð@”˜—7{&ë–ñÈ.Ÿ$¢N“FŒ61"d•6:3{+áSÅ-h[Oó–¥Ù,ƃªšôTð'ú®n‡7p¥³™µ”xO‘eSˆP×™l3wg|bVŠT g,Ÿ¥Ö­ Ô¿ÂÔDK|F‹‹Û*gI9n¼Üq¥ù&:£‹To¤Fú ÷>uëæ<(…«Ç®þí®ñ0®ñõ ×øæ §§àA)\#®po¢pê%ßXã’oc˜CãTÓo§qy<([‹kÜšÔ¸» Ë”Cu›)Ÿäa€aŒñí½Äh‚ª˜>bž?¦u狜æNJÉn ¨LóÛ…FŸÖãú´~ìfJ¤{oÌCÖ¢y¢´¢Uë›Äg…èÛF\ß6’¾ÝqÐvú–¤ÍômÁfŸ|!MEûƒ,ïÙ>u;¾Ù¡ËÆÂùë/{¼ïW° ?ô,jwµNÇñÈÊ;Æðu»% êéa®éù#êå!äo¤i3ßuÆŽ…§p´€ü|y÷/ßûŠYq·Npß-œ·Œº] !ÞÛyåØÔêæ¶ÚwMÏXÚ]<öqÚaðß æÂmÇf ªiÌA›LßElë–›6w§oMQ]óh;¦SÇ÷™öÙ¯ÔtÙriû=Ïê…xžÍ¸çÙ|žç^‚÷B=O~°þèy=Ï}xž{Z°ây~ˆ{žÔš-o­Rô©ü³z x:Ë^s(ÛÄ ñ£43”~Áücœù?f3?äl\žr†²¸  cüWiŒn šØ¨Jö禘änSzëE>݃zW|Îæ‹¹÷c/Áž¡,RKâ¿0¡¸Œ‰í/,bÄ7$n‰G 0׈o Lhø!Î ²š÷-„°iìƒ) nÐæÍÜÀ´I}Þ Õ®=íÚS7Û„…gϤ€áÖòh2\&±;×£ár&€ «$Pú—o­´É}«Z¶Ò*Œ+nVp5‡"“3ø²ç«¿ÆÒtÜOlâÔä.η®sx¼ôWºþGÜ)ò#€ó}ÿO¼ÿ÷ñû÷seÊ_Õ£TÆ£Ûöñ…ú¯µú†’mm ¿ÿ·ÞXüþß½\…%.Œ£Ý9Ù;nFÞú¬fØUrØ:•ñ‘Å`ÍéF>›ÎÃf—Ù¾Ù3;”ä¯`›µzm³¢oýrrzÖ:l| Ê( ³6~_&9“.^Ö´D„k¦Ï|ÖÐ-ùY”åœI¹¸Žl¿$aDs‘‹èø¥ƺpXÌ/yŒ‘’¡Œa§ø¦·Œ1í qu”f2?îÓyÝe°ì'ë•jµ^dzMÉïU³up~xvqxzb¤¼HR´KFN7€huì:W&ò’òRzLÅaÆ&T¤U¡HÆL‘¤þð¼Ç¬,‡¸½Àîze<8­‚'ˆ¸•~UŒ_œâu›0S.aÐÀ~9þuôBâññ°.r×X˜Žk¶µœI©l9¼t߆˜àÇLÔÙñN^Yè…UÊD§ŽkÄîrí¨p¾É:JD.7x5ºöT”3ú0xL[‰N¡½ìxpÁõ|Ç‘p¦'y¾‚r`xd ~˜>‘Ÿ/ÀÖZ¢ ¯Ã_€ì2¹Wê»C9¦ä{Lo¶wГó›ïÏÏ›'‡ðDÜ„Í{`-ó›ô¬§'JÎOß_ž4[IO¡q][à€ãSdi—ûK¸ÿhÝnEù†”'bw`ÎÊÑŸÑù&fý¨‹I îP|bή ˆõ©i 'ÌßÝäˆwj¤¢ðê}©é¸ú¤`3–Ù÷›À÷©@¾Ÿãà?ÓµkLLp¼m¾yª’U¨õ¹bKœqYl‰¹õ'ÄHà©7vì.²$›…e\Ë{0Œ}©¤bHV„¯äêð3ŒÈÏŒgüm(q"ÊFŒ $“ ÚØHîZðýþ5œÞ1–0°i2Gè[¨íWŒ“uùò<æÑ‹w'§?ý÷oZdïä9:<>¼ØÃØ¡µ+æÙÔ”Q”UyA;.d™ R•øèafÏGSÆûr6'ÛÂè!– ÚŽ§Ÿ;©¤ŽyÊÈŸüéçd6Föƒ‰¦uøÑªx“Û:·"œ¶¹¢ÅôïIñ=Ey9K5 ‘Äæ–ˆH„YÎ!h°3i.ø©Iè¾ÿä ÙrI~;áÜŸ\ ŸÉþû}óü—ÌI,ô£rš€ \Ï¡ÃÁiã¤?LdÄÃê2›qõVjz;x¡[ÀíÆy8cE,E×$‰H¾"|!tpý€âË0™ ÈÇöàΘ»Š³làlÀ½# Åž’1žEê°:Ú!t¯d(—™$ÆGÌxÁEŸ³Øä3BzâÑŠŸœ’ˆpL:6}˜p=<ö£è_ܘ3;óßiéI!yȦž ض•ƒI³3Þ߯b­ _"7Þ;>;’Š2²@1p‰%‘ã;2ˆ”ø^0›]5qœ2¡~늗˜9£±z‹M…G¢.ÂÇêj"‘˜ mÉ€à/¾±"g“Óë‘v€ß Ç6HžjkÚ)MÚ"ò|qgàŒWÔù¢uñêðd·÷Òù#1÷žtÒ’…ŸÃðãu¹.Z¶ZæÍ–UÔ¢-ŸD°)afG0©•ö? ãÐŽJ<6²Æp<Væ&Ü¥>E*\@îa"_+gȤ <²ÚUFÈE9`‡±‘ãN+Ʊèõ4žLÔÛ­ˆIXÒsMfw­i%BåÅ,_$y îXú6½ÅÒaÚ‡äq+‹ âÐ7 kerf!v0*æw*²³?€–¢¢ST]X±PÖS'Àsœ¢$+’Á0|üB½7¶è4âü¢g4˜ON˜i‘¡íLoÝu€ÚD?‚…ôm¶Ñuø‹:¤m<ïhúQ¶¨¥„à‰PEt¨0"0ƒŽX› øæ£bBÅ8ˆMÜ—"¯¤XSàÒ˜¯¿“Éš¸LÂ9’/øÞ³L·„Î ÖÀŒéØÌéQÇ^ãÓCÅÐmWo‘ÑdÈ[‰-jÁ¢ë‘¸'v°…»ÉÙ±ÞŠnX è/ìUoáµÜªnËÙ4¾ÊšÅŽÍ“TbþƒJÇæ9èŒT(d0:%~jáˆÏÙ'Ð_?–Œ’™çf“ìµNSv›<Í!•“T9mTFUч€ÚÆF Ö>BÆ ~k< «õ²üÑsiD‡¼øøeW¨¸|Ù'Ú«³¸¡Ž(íܪýøãºaD…ï2|#fèbö2Kž†¨¾?Þzþ|2™TÚž¹Úçù”JÇ=7=û×LÆiŽÞ`ÂÚ0ù÷g}†Ö2¢øNM‹øp“à¦Ï -Êßlš²ˆáÀ·ÈOE Êõ+dßqRRÛ{ñöôÜ0ŽÁ Qf‘·Ì¶ñe›¤ùÂòwò¯—îu%°ÍÕ!u-Ï ¬ÒeÍ}1ƒ;‹}ŒÎ<ÑŒï½ì¸¬Ž¦×ŽS †~–9ûåüðÍÛ dõxêr­[é”þ½koŽÛFò»?/ÙZÙU’lIqpâ]I–í¬mÙkIÎ%Ù-8Äó1£™«û¸÷-îû5rÈyÈãÉž]•ˆ‚@Ý 4€_7¼ý;wö¼%j¸šc.Ë{ FH¾ãüà-˺Ð#åÝ<~yrk·?öò¦‚Á›èa5êß3Ìq¡0VEìו‰ Šâoë‚§ˆx8å³ão.Žê4ä½èÜ3)d"5ÆèÍœËA’{ŠQP]@{㦠tê´·:Íñs$"—ŠÛí Ã3×ø5Ï^áùEŠœr›Þ@G"©4Ȭ[`…¾ë´*êŒüÉH¼ÀŽ0‹¥y©ÅªÔÓ™Æ3Õ”IŒy]ÂÁP˜vyèáP§2.i ÅÙ$†‚ØÒ¡¸Èã@ÚÓ.ï¡f™ª4^ŒÄ1+›•J$äSñsmÚ•gqîÇ0yE§š­”&S1@¤Ç{óÐɯs¬rÑȃÍ4V Ãð+…U«wRjÛ`ŠLÓê½À”Ð`–ˆã™ÂàýD£û%Q 2ñì1âS$\Ѣ­Ç†ƒA’{ƒ†÷¤`»,‘46ô˜úôÞa*#%VH ×5&!<]p¼’)¦Xôýaø¿yñêø)•¦©p$NÂéÈÜDcéVØ+“¡$¬óÄÙÈRã4[U¾8Õ©GæÊž¸(HÕ…ày‰hg‚!^âa|ÙŠÜ0‰‡2M ZÞÐ]}ÂÙ<ß-& }È¿óÎ0M TzAaaB£0‰G±ÕeȆ-*„ü?€%Zâu>ÐÞ\IWjXà]6“VoÄßkUÍ á!ØfÜ9‚\ÉÚvr8 <…–·"%x I?ñ?—嬻Ù(.$Eº•9U¡x¤kHE5Z§yÙH…xY£ç"ŠÕHüX˜Ž5”Ç)ø©D¥ç…pîȬÅoä•ošοÍ0ôÓÅe"~(Ó·,5’â*?VvT{ʤÑ%ºæoæÕ`®`—i°™lQ¶ðËÔDåD ìì'*GxgÍx™„ Rg”DhH Z“l}ÁJB»^NFa.’b¡gÝû B–aþNôÏDb²vµ%SÖú)kD#޶d†áRå¡"J%º5Q ±xª|sý…ë¶4)ÄY{OežH×])ý4özØÒÒ\ÒUL):æi\ñ•8¶o*YR =­¯TM,B×’tÌWM6L”NM¹Ó¹Òe³ž¡íÓ§v®Ë‚ii Çf¯) ‡‚WG¡,§®è ‚ô@qY†¦M1‘d9š[‡EœÀ.ƒôc]?”Z<¯Ã:žâ”£œŠoXšAïžÉšJ0æØ¶gc–°!òãý$vÑFÙU.ž©+ÃûÓZµ•ñlZÒ¦vh‡Ã¤`®{Æ—_A²(GO1ú3ÙõeòøÀä±÷‹¿÷@žögðföÌu"æ÷|Ùq-È;ÂZ©TŽøãÏé¿`âaQnôNg,mX6<ÏØ‚ ‘ÄL#S_K)Ðbt†ùk² @üGºBFíÌ?‚¨4ñ¨]…£4¿¤ºšÒ¨RqŠ }Íô¸!}4…›ÍYÔúFâï` ¤Í(š5¿&X ¢·¼EJ±˜2Š—_4c\‰âÎ`piSWÂd8ãÉH/©B9@V5D*帑–ö2@þ:°Ê`å±Ä¨~6QA3yH*Cd[åˆ×úMqèœ3,«2詌!Ú¼Æ t–B|“fÞ*ÉÆL+µÑŒ+ó1¡,B‚Nf-ÃË ®16S9ˆ“Ô;“éÆPá&ÔsåÙ´˜Ï9åŒÕ’=÷u1‡£ŠªËFÓeœ¸~¬2žaØòª`Õœc•Vv´¼2š³…R$U#%ÎcŒL 3+7çu‘pïý©@ä9è6S%ËÛ9ä8Ôma+ç2žtª˜• v¦>ÚN ZFâq1#ÏCX<( ux%.BÃüöƒvU 2ï|þË»yÊë€@NoáEÙ}qÆË3ûbZ kÌÊ©¦”]Ì|å$ü ¶•3ôPÇ8gž êq=¯dUMJ6Ia»Ñ•Ä8þðÐ §wtrxŒ$ð5NaÙâ±¼)GW¾v jl£l¤!7ÊÄïÆ;þ2m^ æ¯8Å—˜ï;¼¾»þõÞ7t5Ä ‡>†òù¾šsã êÙƒ—t¥jqr|áݬyÍàí}÷Ý·;{û;{·èjX‹‹w¬Ú] µiIóS÷š}|røœ®F„Å1ºðjÄ9^8­½U¢Ù—$šªS%/aìˆ0­3#1nv€qˆ·2xìzÉ‹ú”Þ>díØ<+ìJÆxØÑ RׄRnZùñðŸëñ¿Î€,;ø-÷?Ümñ¿w¾6øß»wö?ã?Æ¿%XhÃö{&bãR²·Óž¡Ú´%è¥Ý{,Mú1^Wš¶ÇÞÞîžÙ»}çàö¯ ñâî·bï®g˜À(=ïOM(Å™º ÷ .ŽÞX‡b3é+bq¬ò’_é÷}ãF7õÁÉÃ˧\«!­é UÑ>ø"º½{oËvÀÙö¯Éæèàl×Õê(ã|+ˆ¹×lðœœ>xýz”»#}ÖÛ–뛵ç"Ưæ¸ùÃúVÁ‡¾_*ò~{îRNaÛ§¨ÆÍŽ ×’Ø}TÞEÕ™E÷vFC¯ÝBeÀ$Ñr”Ó¥H¨ËQOA㩆¥yß³±GQ¥Ád™3Š…Ï›sž’zç4voÓnåó¾Ó°F Û¦U <œ6ÐÓŒ©®iÂò`‘œÕ´fE¼ž‰ýÄFî ^ÚFÇÏ·*/’cæìø{¿{F…^,Ô€O±@GÁûÊÞÙ® ѦlùáɱeÛ5#Î홲2úkØçú`w£cÖSîÄ^÷ïn~¨Ó2›Ž¯9ÑiÃÂî®=ºîó6–ìòç­ ]ûýšÓš•'!ïï4ãØžfl{¿×“‹O=¹þþ­µÿÁÿàþ_{ß|óÍAkÿíÝýÊøÝùÿû£üûÀþ_5þ_½ìýÕnXåýõõÁw›8ÍcjÏM séïbô…-•7þ_­dsY.w¯t߬(œWº€ ëØ*/°Åx +½ÀcV|/°~,ò߃XCÑF^`}½X;/¯rü‚híz}¿/zG¿/ï=ù}µ*ÐóûjS¿¯ÏnQ½*>ˆ[Ô×ï×-ªåáŸû¼{Ëÿþ¼º8|ô;vŠj§Ö)ª?¬uŠš¸Ö)j>ö´ÿ_r‰ZšBßâÕ«q•KÆÆM=¢VN³ Q ½¶®OzÞÛ<¢Öôßoô‡ê‘ðŽþPëL…eO¨~Cÿ žP ÑŸ=¡Zg›žä}\O¨þt2g‰SÇÍYÂÜë©2³„W°¤²ÿËäXË–Å|ŸŽ5Ÿý æ~P}3³õƒêÛ™ëü —0ëý Z«|Á®ýÀ^P‹Ë§µöÛ»‘Ôš&ý1| úœÛ̪ߙ0¨®Ù¶‘Ô¢=ô¨žmèÅ/–ý zoäu­¹Õ ×½Áým~Pœç·úAõ'Âÿ'~PÇ­‡ÃÛã›vå¿rôv¨jÇqã)Ôw±´#³óùð±0Ù¥Ÿ Aø ‚îYçaÄ8|h~Ô¹úË'òVÙwto{íSß_Å~ìÆÿµ§×‡Ú츣+ªçò‚…ŒØûîÛo½›'·Þz«ß‹ÊWžè8¯—t0Qþnª»¡ßnÂë”ìú‚ºvöoó—‘ÎÔnTe)Ñc¾ ¸õ|q$íì·üúpÇ3ƒ[ ‹ùfÇxœü^h>;—¬¤asÉüêÇá\ÒÆ ~Gç’9Um–ù€}Kš ø–°ß{døâÐO"9‹eNR‰Ã±b]#9Äû"N¤ÌK’™8Ì"‰†d! éóS)K $×ëQ —’¯Ü¿á©Óº/=Þuò…=ª•ªto‰múÖÝ„a; tf>]è2!^³±R¾¶ª“-o…þÖG‰<Üðí÷9qm€8Yj¸Áo®‚™°8€øÂÞ»àL¨‰ÿÕÝŽià¹ÄÑ…ÍŽ –õCUØ“S‹D.Û½fáBoPÛËÁ„¾wáI,Ø<ÐV5Þ2¥ž×¼ÕìÂ4•›ˆÁóSÛ¶,&˜ÙºŒl¾¿»HÁS°´áÔ¡Á/|KDãÕÿÛÉ8è’ávÈ@Æi7¶ËœÌ™¶þ¨†Áø[jw íûóƒ†C°Ým™72fá=†œXŠdÊ£MÜ<º³s‡C°0óXÍØÐ=<˜wÞnrÛ¼)ä.nµ©s¤Òq£Js>’NMÛ™Ú o¯!O6ÂáÄ«¦°ž 5Žu ½±ªb$¼ ;7ûyथÈ8·Ì>%¹º|e#?!ÛÔI>oÿÂBŸ —Ó©=Vk61Ï;…™«à¬D-Æo’¥Ú ÔHå̧m˜³=­Ù:z¾µÍæñÿýç[¬[¾v2gC5ìÒO¼m- G{”Ä0 Fµ;ÎU߸7´½`:Þ€dŠi«äÝãùùÚG”qSe1²O+\@þÍ gÍß×ÏŸôÑg@Ͼy;ôìÜ™yÕ5{z¦ËàlÉY¶>èÆn[ÎUž#›úKý¡kêB×~ýç=—vqzþÒÆóæ´O]³aÞ®‹èí¬ß[÷·MRÇŽE¹ ß‹ ¾&з+Ïlxo{¿Úï“sïŸÞú×]ãô_ ö½°P`ÐUØÖÇØ©o®±·¡º]¿˜Æ[XßÝnõÎ §Þ±o6»õ›õÛ~wjݼ'–o—m–B×Ý(ܬŒL¹lecÄ7¥,ÅïvÆ{ÄuYÔq'ÁŽGíÆbl¼»ŽyV—Ör¯ó•D³"gñ8—>ÓÁƂ؟wq‡Vˆ[¾µÍ´®q]•ü—mÁ=@~©§C#Y×ÈõªÔ¸M㢜/ÌÄÄÏ´°ö”óu(Æ/v„Sæ¼a&^tºñ­hËë݉¯8vS­³ê__{÷½;Þ_lO¬rº}`¤eÛû˜¸,ÿŸ±M_ÖΠmL×ýö˜˜ƒ'¢—ùNDŽtÊN\¹Ïaª§Z'^=Z)ÕvƒÐåýIµ^ ÎÐéZÕ]ÔW.ýÎV¹ëàïÝý…UØ{í"w¿µcç+mwªz£Ç¿öCc±ýãÛi7Zqi-½Ý6óºðœ%€Í5HØÿ¦Õ€Øû¿6ÿsçþ&ðØ•_|‚Èôå#ßÐ5„»ÊÝLðC¿;›•š-Óí=Õ«ÐÎÌ\f¡ù便åÃOÆþOÂùÎúŶñ& u?¸ÅSØ Ð2ñ¾Xa ;à µ­ÊÿøÂÒëg˜±Fv’až¯K_7Ë8‘Y!^’¦žš¢—d«g¶6ó•µÅ"yú_#±s*{V`“k»!¢_róÙ½?>ÚíÀѪ}ѵ·Cô¶ôû†ÿ&é€Ü‡½&¢w´°!­½^Ø+½`7Îc›5ÈÜò}äô5í;e‹µ%“·$ÒlÉ-ÅÎövˆ£¸[Ħ͚÷v›ºÿkïJ›ã6’ìç®_•cGÖD‹BßPŽÃ;Ôes$Ê S¶gw± «Ñ Náhª{Âÿ}_VÐ胢쑽G4"Á:²®¬ÌB½|Q(Gw;çßúFæNÄ¡OøØdÙNµæ@”ÏûLHŽßŸè¢;÷,Ø_µ—u–¯¾þ#f„õË.cÆÎ±Ñ穼¹eþ‘ê?ûG"®È:sq~ 7~÷>d{»×ÅÐ&áãÜœ=™cµ2ÌX+F‚ö놎³¯¾·©ÓcnâG¿ÇiصSâügÿØa‚t+6ëoÙ§ŸÏç>‘>‡\.%þ;×AõWÃ-bBZfÈ’O†«¥‰²w.ω»Ÿð²xúš`€Y2ãÞYϼ&Ïêí}¶nÎþÍ©º Ãt ¼Æ %/T²o•!G‚×!bÚ›ÙªéŽÜ àÈ+Lß׎C¸:êS&TåmVD–[î5hËx°Ûž~<¿Ч|nþU_UÒŸhÌ7œ¾åeø]Ì妣7U¿5¾wó™qORÑ~éiÈÛÙAƒ¦ Ïê6± æ³ï¹õÀÅdIrõ=K7àçº%??P߸R&IwH„KüùA‹}¸Ë2Ý3Ò>"1½Ž&Pò˜Û´];í.Ã_Ex×)õ%\UÀ®ÆmÞýïôl²?‘Óh÷ø>J£Ž‰s€æù`žn­ŸÆiôQSý]ª#ã=Þƒò1Éþi£®çóâ»Ëó‹·êÆú’?¡VY¼’ñá.á¹lŽg©·ûÛ«+k‹‘ñe¡Lu­»4Æêä›w÷/ÕæZB+¶:…]B*}üÍ1É`W—|R®6äÉ’u®gl|¦Íœí[Ͼ’óúkþég‰úd+)@ã…J³9%nÎE?ûª.¿þ‹Àèëý¿Þ×gÖ9Œ\uB\þÛoDN©ƺ/¿ùž´'lo™†Ü<—n!Ð@² ª¿ÜóVÝòè0¿]††ÈêvŠ^?»Ÿ Ì&v]ñò~Fí­£:E}«i©w¬gztô„ùŠÝæjN‰éÞúThYå¸Iü tme=+BžeGSüpv}v~Ær_˜Ãî‡XÒh›°‚ðPKÊk>ÆéO0Ê¿X©ÛçU)º÷ÞÚˆ.ÿ7o¿Z¶™wģ»CèmÃ>}~¸˜¸.Æßõµc"k­Ó„–ì(«cœHØSÎæòIPÀMé“Ô-ñÏ›3BŒ‹OÜ'^¤åA¶Ñݲþ"z¿4â5CùIò™Ï{J>“ñ7Ø)å@@Sª–P›É‡TZ„OöÐnµì A3gLÆŽa`£õ2 •wÄHwm†- Œ È­ðzèÓha/U “¿›Ös”’º4rEA k ïbrc%9 ¼†•n‘=4X9ì™±¢ÉÈ>ÆÕy2rƒ ¹äŒË}OÄB@92§c3Ý¢†-7—Ë0M·DMƒ)ë,µH¸¹uEöØÖL],CW%J˜nÉ»„{K®w ÁFš»‹1žîF"Õ ƒõd¤§.ÉžÙ–©úå[Yl$69ÅóÈ+ГaKá%¼9yf‚\°Lbf›Z2TÔ“1ÞN5Ÿ³a-È[¸äLÆ C‹PžõÊ-3Æ‘zAAÛnñ¤ 'õ–Zæ4_Œ+õæ!’9 ±—ðnPIJC ð3ŒÒ$ä%5Ù;Mõ¥0¨^‘’ýtÚ})Â-¥ó2ò2H9uÎ/F§z…‹N˜º/F©zKtéx¬Ù¾\´¹"&ú²§x¥. o…‘|–Õ+츚¢D Ç½[. •Uå­É‹ÑÖÁ°AÒ oƒW²±¡ýb(,Ƙ˜'Ø?´èûćg~sìµ”|Tù¨aBþœ°UÐÀ±IqõÕÁå Ø¦>C}l¿Ú61Έð(ALµ!øb¤°¯ø¿tRá(4 ÁÌÑ…2×_b±a@¯oÃj£g·ðCòà ýó 󋇫ŒÉüDŠÿƒ¦•6F91 0…™ðòt ösìÛŠyËO‘=€Ê‹å2ö×Ç@ fvËJ&ü‚üÂq:´d ökO‡Š–ŒñÀ~¾¢–Ô–—Lø¸C—4Ƴ1MÌT6À\ÑleÂß…2´G†®¬í ¹¤¹¬iˆy¢Åk1¿¡ùMHÃé°e.óˆæi„f5J³YBóÄ¥!æ@C^&æÁNûq‡Ðl[׆æÌ$ä0ÜfBú$ÑÔáÀ¡—~Íô1BJ‚NC¬rƒO2 ¬ÉáTLd&äi–4Coü„İ¡J– û–¡`äÒKxxpóÌ,g3ÌÃ뜗 ¬z i-ÏcaŒÒpÅ>”CÓà7µîŠCŠ1­ÆÐŠoBl-•L¡9°@Dqäb{oéûŒ†ºi ÛÒð÷‰¸¤¸„XXàod©PÝqEqUÓxloˆ¸¦¸þ€—ÑG#ˆW.r;&*ˆ×¨b*Æ •Ÿ2§yò,C¶Ç®…Œ&˜šÚ/‰O 6ç1&Ð%–$¿™S2GÁèBÃõ·;I€¿4†Š¾„" ÜÒg²¿%%0 &0š`í $1+ c϶1ô ­b4-¬¯ƒ iW»õÄ” ÇPï— OJØÎ`áѸ„+M)I! flQ*$®Þâl>U’#QÉlMÞÈ{æ¥:©t·¾§¤zOã™’V{È!AP[R`âÁ†Ò\„j8’’’’;ÑæJ«š€9+HËim® )!?vì-‘¡HVè»Ú4äTóp¯"¹¥ä휌IÍ‹ä%Î}ÉĆLfHÉ…Mœ–ÓP$J² äàqÚðÞÂ2ce¦Ð,lCm(RŸRXm“±­¸¸ž»± ‘Âl˜@š·aÀ\† J±ÙOÐ èªE7fG€vEÒ©NʹC‚™CÈôÊ©p9¦HSÏi‚YÙq¡8˜DŠ>AOêËô#’æ ûŠ LÁ!&Ò¢Æ » lQ£|¼@¾ ¹eJ7È1w‰9¤D†y0ÁæÉŠ:z&Ø5®0Ä ó(RŽfN1q®$ Δ¯y›wšmþ*‹×zŸÈÊÑÖ &ÿ•›Ã³äªÌž›/)ÇŸ¢Ã·ü‹¥È#TˆNs¦-#«€•BSŒÊVð»„Jü›¢µ¹ 1q4â’GŽ©¡És˜ÎS´å*¬|‰È hÓ¦PWµ,ªŒÍ䌃`ä% ÛÙ„ÃcÀTÁ¶ûR•_硜s”ŒÓxŠžÕÑ2ÐÛù-å1­|(¨w½è~äH«ÖkÑŽšR±+IX}¨jH?bAl -]± h°zÀËþN«ú–1Ù9°Ì ­Se? éXÜ«”WÕ¸ @#V5­ê ›¥C?ºiÍT¢· ºä`jü¤"S)_ÕóÇÞ–t‹Uì(åÅgzkIkÉ/fš?S¬+ô>TCVUR¬kZc€ìNуɇ‘Þ¸ š lãÁéã±IhçÑÚøíuލÃ#èG– üZNÄ€Õd=·W‹å܇ߨ ùÂcVgÜT£ŒÚ‹ðÐE/ç–þ b}%çõ—E–fåY*ù²›ÒÕú³ÌØA«0ÐPµW~¨8–Õ\®W¨TÈüXçæש×s©Þš¡¯šP ,$zªÅKW…‹ð¤L·LÖeçš¹ºmmŸ±?ÀË/ß)-Á(Œ§ÏÓÐÕ,ϯÎßžÌÂßðñÿ¶&øgªã>ÿof·þßdÊößlt²ÿþç ¡£„˜ׄ¼zNè;ÕóŽ Hâ‹ÞÁ%ïí«†R¤ó¦¹±ÍÕ¼ ùü8‘Ôëzy_XçuµÌ êu.ëâís¾–˯7Ý®ÿ/„ ÀöòCõ,¡’"Éÿ˜¹Tüé§J¨)ûËýˆg IÙþÆÈ<-åÃþ~Ê×ï¶©·)õ*9LoÂtý׫ì¦ïzÕ‡¹¸cwäùÇóï.¯¾y}­aƒ›0Ø·®xõêâïæÍÃ_öKá[«ÿ”Þ;\ÿÚÛþ\ó‹Ÿ{Öÿp<´þßLñ§“ÓùÏòÀ\íÝíòá½Ï s½« º1ÛØ_j¼–£á ¢ê8ÙÐ>Us7œ.›•[ºŸ?iôÆŠºUE½ý˜²ŸÆ/ûiÖÅá Ö5ÂZvðãnÑ{ÞVxopkã<ꃼCugÌÝŽªÍkc S¿ ß„=Øç`R@•½6r¨Ñƒ6šë¢mlÔxï0d®n±IÐò1m»Ûì RÊèˆ$&r¿õF«’çÛ–h²òϕϢç[_GYÐ~Ô6ª»Buzêîý«•3p¢»á]‚_›ŸÊtm1ujLP3ÅÙj: ˆ†ÛåÙüÌRð;èA7÷%¤F½qL ³`Üô±ò7è`&÷÷§—õ±?&­ŽÊÖ@Ï`qï§SžÁ-vGð<}öý}+W “ì£([óªTäJä™õºžgÊ£2E@‚+m„cN°ÅÐèÆ=a<ƒÈ|©£w™ˤl£wQ(¿c¥bþ&1¯ø0ÏWG<ðk>Í]ŒÓnÎ''çáôœžÓszNÏé9=§çôœžÓszNÏé9=§çôü|þË™Ä@opensrs-client-3.0.0/templates/0000755017777601777760000000000010770014215017533 5ustar nobodynogroup00000000000000opensrs-client-3.0.0/templates/PUNYCODE/0000755017777601777760000000000010770014215020761 5ustar nobodynogroup00000000000000opensrs-client-3.0.0/templates/PUNYCODE/base.html0000644017777601777760000000225210770014202022556 0ustar nobodynogroup00000000000000 IDN Converter


opensrs-client-3.0.0/templates/PUNYCODE/index.html0000644017777601777760000001210410770014202022750 0ustar nobodynogroup00000000000000
IDN Conversion Tool

This conversion tool will convert an International Domain Name (IDN) or nameserver from any one of the following formats to the others:

To convert an IDN or nameserver from native characters or RACE to the Punycode version that is stored in the VeriSign Whois database:

  1. Type the domain name or nameserver name that you would like to check in the input field.
  2. Select input encoding type.
  3. Click on "convert" and the results will show RACE, Native, and Punycode encoding for that domain.

IMPORTANT: Please make sure your browser has the encoding enabled.

  • How to enable encoding (example: Unicode (UTF-8)) for Internet Explorer.
  • How to enable encoding (example: Unicode (UTF-8)) for Netscape.
Input:    
Type: Native Characters RACE Punycode
Results:
DescriptionTypeResult
Input String
Prepared StringRACE
Prepared StringNATIVE
Prepared StringPUNYCODE

opensrs-client-3.0.0/templates/antispam/0000755017777601777760000000000010770014215021347 5ustar nobodynogroup00000000000000opensrs-client-3.0.0/templates/antispam/add_contact_info.html0000644017777601777760000000461110770014202025511 0ustar nobodynogroup00000000000000
Email Defense Contact Information for
Admin Contact:   -or-
First Name:
Last Name:
Street Address:
City:
State/Province:
Zip/Postal Code:
Country:
Phone: (e.g. +1.4165551122x1234)
Email:
opensrs-client-3.0.0/templates/antispam/add_email_servers.html0000644017777601777760000000504310770014202025703 0ustar nobodynogroup00000000000000
Destination Email Servers for

Destination email servers are the mail servers that legimate mail will be delivered to after being filtered. You must specify the SMTP host of the mail server (e.g. mymailserver.com) or the IP address of the mail server (1.2.3.4), the port (e.g. 25 is the general standard), and the preference for the mail server (e.g. 1 if there is only 1 mail server). After the Email Defense Service has been purchased, these settings can be updated directly in the Email Defense Portal under the Setup tab.

SMTP Host Address Port Number Preference Number
opensrs-client-3.0.0/templates/antispam/add_features.html0000644017777601777760000000411310770014202024656 0ustar nobodynogroup00000000000000
Add Features
Feature Set for

The domain is currently subscribed to the Email Defense Service. Listed below are the current features and the available upgrades. These features will apply to all Email Defense users on the domain. Individual users may not have different features.

Anti-Spam
>Anti-Virus
>Content & Attachment Filtering
opensrs-client-3.0.0/templates/antispam/add_manage_feature_set.html0000644017777601777760000000563710770014202026672 0ustar nobodynogroup00000000000000
Add Features

Feature Set for

The domain () is currently subscribed to the Email Defense Service. Listed below are the current features and the available upgrades. These features will apply to all Email Defense users on the domain. Individual users may not have different features.

Anti-Spam
disabled >Anti-Virus
disabled >Content & Attachment Filtering
opensrs-client-3.0.0/templates/antispam/add_manage_user_accounts.html0000644017777601777760000000371510770014202027234 0ustar nobodynogroup00000000000000
Add Email Defense Users
Email Defense Users for

Enter all user email addresses for which you are purchasing the Email Defense Service. Only enter the portion before the "@" symbol of the email address. (e.g. for jsmith@isp.com, enter "jsmith"). Those added will have the same features as all other Email Defense users on the domain.

(Enter one user per line)

e.g. jsmith


max users
opensrs-client-3.0.0/templates/antispam/add_new_purchase_feature_set.html0000644017777601777760000000433210770014202030114 0ustar nobodynogroup00000000000000
Select Feature Set

Select Feature Set for

Select the feature set to be applied to all Email Defense users on the domain. Individuals may not have different features. The Anti-Spam feature is not optional and is included by default.

Anti-Spam
" >Anti-Virus
" >Content & Attachment Filtering
opensrs-client-3.0.0/templates/antispam/add_user_accounts.html0000644017777601777760000000365710770014202025731 0ustar nobodynogroup00000000000000
Email Defense Users
Email Defense Users for

Enter all user email addresses for which you are purchasing the Email Defense Service. Only enter the portion before the "@" symbol of the email address. (e.g. for jsmith@isp.com, enter "jsmith")

(Enter one user per line)

e.g. jsmith


max users
opensrs-client-3.0.0/templates/antispam/add_user_roles_and_pass_info.html0000644017777601777760000001160210770014202030106 0ustar nobodynogroup00000000000000
Email Defense User Roles and Password Information for

Select the Email Defense uer role for those that require administrator responsibility. If a user does not equire administrator responsibility, use the default end user role. Administrator options incklude domain administrator, quarantine manager, and report manager. After the domain has been purchased, the role can be updated directly in the Email Defense Portal.

If users on a domain are enabled to login to the Email Degense Portal, they may set a password vis their Spam Quarantine Report (each user's spam report will include a hyperlink to set a password). Users do not require a password to login directly to the Email Defense Portal from thier Spam Quarantine Report.

IMPORTANT NOTE: You may wish to assign a domain administrator a password now so that they can login to the Email Defense Portal in advance of receiving their first Spam Quarantine Report. To enable the domain administrator to login, you will need to ensure that "Allow recipients to set an Email Defense Portal password" is enabled on your Reseller default settings or the Email Defense Portal.

Email Defense User Email Defense User Role Password Assignment Password (min 6)
(only valid if assignment set to 'Now')
Confirm Password
> Now
checked> Via Quarantine Report
opensrs-client-3.0.0/templates/antispam/base.html0000644017777601777760000000116210770014202023143 0ustar nobodynogroup00000000000000 <TMPL_VAR TITLE>





opensrs-client-3.0.0/templates/antispam/cancel_emaildefense_service.html0000644017777601777760000000201610770014202027676 0ustar nobodynogroup00000000000000
Confirmation of Cancellation

You have requested to cancel Email Defense Service for . Please confirm that you want to cancel this service.

opensrs-client-3.0.0/templates/antispam/cancel_new_purchase_order.html0000644017777601777760000000055510770014202027421 0ustar nobodynogroup00000000000000
Order Cancelled
Your order has been cancelled.
opensrs-client-3.0.0/templates/antispam/cc_fields.html0000644017777601777760000000257010770014202024150 0ustar nobodynogroup00000000000000
Payment Information
Please ensure you are obtaining payment with the information gathered. This template does no credit card processing by default.
Method of Payment: Expiration Date
Card Number:  
opensrs-client-3.0.0/templates/antispam/confirm_add_manage_order.html0000644017777601777760000000520710770014202027205 0ustar nobodynogroup00000000000000
Email Defense Service Order Confirmation

The following shows the features and users you are purchasing for the Email Defense service.

Service Details
Domain Name
Added Features
Added Email Defense Users
()
Both user accounts and feature set are empty. Cannot process empty order.
opensrs-client-3.0.0/templates/antispam/confirm_manage_remove_order.html0000644017777601777760000000264210770014202027752 0ustar nobodynogroup00000000000000
Email Defense Service Order Confirmation

The features and/or users that will be removed from the the Email Defense service are shown below.

Service Details
Domain Name
Removed Features
Removed Email Defense Users
()
opensrs-client-3.0.0/templates/antispam/confirm_new_purchase_order.html0000644017777601777760000001027710770014202027633 0ustar nobodynogroup00000000000000
Email Defense Service Order Confirmation

The following shows the features and users you are purchasing for the Email Defense service.

Service Details
Domain Name
Features  
Email Defense Users
Administrative Contact
First Name
Last Name
Street Address
City
State/Province
Zip/Postal Code
Country
Phone
Email
Both user accounts and feature set are empty. Cannot process empty order.
opensrs-client-3.0.0/templates/antispam/confirm_remove_manage_order.html0000644017777601777760000000506610770014202027755 0ustar nobodynogroup00000000000000
Email Defense Service Order Confirmation

The features and/or users that will be removed from the the Email Defense service are shown below.

Service Details
Domain Name
Removed Features
Removed Email Defense Users
()
Both user accounts and feature set are empty. Cannot process empty order.
opensrs-client-3.0.0/templates/antispam/do_cancel_emaildefense_service.html0000644017777601777760000000175610770014202030372 0ustar nobodynogroup00000000000000
Email Defense Service Cancelled

The Email Defense Service for domain has been cancelled.

opensrs-client-3.0.0/templates/antispam/do_cancel_new_purchase_order.html0000644017777601777760000000153410770014202030101 0ustar nobodynogroup00000000000000
Email Defense Service Cancelled

The Email Defense Service for domain has been cancelled.

opensrs-client-3.0.0/templates/antispam/error.html0000644017777601777760000000024210770014202023360 0ustar nobodynogroup00000000000000

Registration Error

The error which occurred was:
opensrs-client-3.0.0/templates/antispam/keep_emaildefense_service.html0000644017777601777760000000167210770014202027404 0ustar nobodynogroup00000000000000
Email Defense Service Not Cancelled

The Email Defense Service for domain has not been cancelled. You may continue to manage the service on this domain or others using the serice.

opensrs-client-3.0.0/templates/antispam/list_features_and_users.html0000644017777601777760000000272710770014202027155 0ustar nobodynogroup00000000000000
Service Details for
Feature Set
Email Defense Users
()
opensrs-client-3.0.0/templates/antispam/lookup.html0000644017777601777760000000226010770014202023542 0ustar nobodynogroup00000000000000
Purchase or Manage Service

Enter the domain to which you want to add the service, add new users or upgrade the feature set.

Domain
opensrs-client-3.0.0/templates/antispam/manage_service.html0000644017777601777760000001052410770014202025203 0ustar nobodynogroup00000000000000
Select a Domain and Action

Below is a list of your domains that have the Email Defense service. You may select an action to perform on each domain.

  Add Features Add Users List Features & Users Remove Features Remove Users Cancel
opensrs-client-3.0.0/templates/antispam/manage_service_login.html0000644017777601777760000000353010770014202026372 0ustar nobodynogroup00000000000000
Existing User

The Defense Service already exists on this domain. Please enter the username and password used to purchase the Email Defense Service. You will only be able to manage the domain through this account.

Username
Password
opensrs-client-3.0.0/templates/antispam/new_purchase_service_login.html0000644017777601777760000000737310770014202027636 0ustar nobodynogroup00000000000000

User Profiles provide convenient access to the Email Defense Service for one or multiple domains. If this is the first Email Defense Service you are creating you have two options: 1) you can create a new user profile or 2) from a previous Email Defense Service purchase use an existing user profile.

Domain:
New User
Username
Password
Confirm
Existing User
Username
Password
 
opensrs-client-3.0.0/templates/antispam/order_results.html0000644017777601777760000000572610770014202025137 0ustar nobodynogroup00000000000000
Email Defense Service Order Results

The results of your Email Defense Service order are listed below. When making inquiries about this order, please refer to the Order ID. Any questions can be sent to .

Order ID:
Order ID Domain Action Feature Set Users

The Email Defense Service Portal can be accessed at using the email address and password used to enter this order. Through the Portal you can setup and manage the Email Defense Service.

 
opensrs-client-3.0.0/templates/antispam/password_recovery_msg.html0000644017777601777760000000144310770014202026661 0ustar nobodynogroup00000000000000
Password Recovery

An email has been sent with your password. Once you have receive the email, click on the button below to login again.

opensrs-client-3.0.0/templates/antispam/purchase_service_login.html0000644017777601777760000000737310770014202026765 0ustar nobodynogroup00000000000000

User Profiles provide convenient access to the Email Defense Service for one or multiple domains. If this is the first Email Defense Service you are creating you have two options: 1) you can create a new user profile or 2) from a previous Email Defense Service purchase use an existing user profile.

Domain:
New User
Username
Password
Confirm
Existing User
Username
Password
 
opensrs-client-3.0.0/templates/antispam/recover_password.html0000644017777601777760000000227510770014202025626 0ustar nobodynogroup00000000000000
Password Recovery

Enter your username below and click the "Send Password" button. Your password will be sent to your email address on file.

Username
opensrs-client-3.0.0/templates/antispam/remove_manage_feature_set.html0000644017777601777760000000456510770014202027436 0ustar nobodynogroup00000000000000
Remove Feature Set

Feature Set for

Listed below are the features that can be removed from . Select which feature(s) you wish to remove, if any. These features will be removed from all Email Defense users on the domain. Individual Email Defense users may not have different features.

No features to remove. You cannot remove AntiSpam feature.
" >Anti-Virus
" >Content & Attachment Filtering
opensrs-client-3.0.0/templates/antispam/remove_manage_user_accounts.html0000644017777601777760000000436410770014202030002 0ustar nobodynogroup00000000000000
Remove Email Defense Users
Email Defense Users for

Enter the Email Defense users that you wish to remove from the Email Defense Service. Only enter the portion before the "@" symbol of the email address. (e.g. for jsmith@isp.com, enter "jsmith").

No user accounts to remove. If you want to remove the last user account, you should cancel the service for this domain.
(Enter one user per line)

e.g. jsmith


max users
opensrs-client-3.0.0/templates/antispam/select_feature_set.html0000644017777601777760000000352710770014202026105 0ustar nobodynogroup00000000000000
Select Feature Set

Select Feature Set for

Select the feature set to be applied to all Email Defense users on the domain. Individuals may not have different features. The Anti-Spam feature is not optional and is included by default.

Anti-Spam
Anti-Virus
Content & Attachment Filtering
opensrs-client-3.0.0/templates/ca_reg/0000755017777601777760000000000010770014215020753 5ustar nobodynogroup00000000000000opensrs-client-3.0.0/templates/ca_reg/blocked_domain.html0000644017777601777760000000363710770014202024600 0ustar nobodynogroup00000000000000
Blocked Domain

The domain you have requested is currently being blocked by one or more other domain owners.?

To obtain your domain you must be able to obtain permission from the owner(s) of the following domain(s):

If the list is empty, you can get the full list of blockers from CIRA Web server

Have the owner(s) of the domain(s) listed above granted their permission?

opensrs-client-3.0.0/templates/ca_reg/cc_info.html0000644017777601777760000000312610770014202023237 0ustar nobodynogroup00000000000000
Credit Card Details
* Card Type:
* Credit Card Number:
* Expiry Date (MM/YY):  
opensrs-client-3.0.0/templates/ca_reg/choose_legal_type.html0000644017777601777760000000453210770014202025326 0ustar nobodynogroup00000000000000
? * Legal Type:  
? * Registrant Name:  
? Registrant Description:   *optional*
For Help press ? in the above sections  
opensrs-client-3.0.0/templates/ca_reg/cira_rant_profile.html0000644017777601777760000000706010770014202025322 0ustar nobodynogroup00000000000000
Add Domain to Existing CA Registrant
Registrant Number:
The Registrant Number is NOT the CIRA User Account Number.

If you do not know the Registrant Number, you can obtain it from the CIRA WHOIS by looking up an existing domain name, or you may log into CIRA's Confirmation Site with your CIRA User Account Number and CIRA password to obtain the value.

The order will not be submitted to CIRA until the admin contact approves the order request.

DNS Information
* First DNS Hostname:
* Second DNS Hostname:
*optional* Third DNS Hostname:
*optional* Fourth DNS Hostname:
*optional* Fifth DNS Hostname:
*optional* Sixth DNS Hostname:
Domain Name Security
A domain must be part of an OpenSRS profile. You may add this domain to an existing profile. Alternatively, if you do not already have an OpenSRS profile you may create a new one. Creating a new profile is easy.

Add this domain to an existing OpenSRS profile
Create a new OpenSRS profile for this domain
 
opensrs-client-3.0.0/templates/ca_reg/cira_reg_profile.html0000644017777601777760000000633610770014202025140 0ustar nobodynogroup00000000000000
Add Domain to Existing CA Registrant and OpenSRS Profile
* Existing CA Domain Name:
* Existing OpenSRS User Name:
* Existing OpenSRS Password:
DNS Information
* First DNS Hostname:
* Second DNS Hostname:
*optional* Third DNS Hostname:
*optional* Fourth DNS Hostname:
*optional* Fifth DNS Hostname:
*optional* Sixth DNS Hostname:
 
opensrs-client-3.0.0/templates/ca_reg/complete.html0000644017777601777760000000070010770014202023442 0ustar nobodynogroup00000000000000 Domain name registration processed

Congratulations

Your order # has been placed successfully. You will be notified by e-mail once your order for domain has been processed by CIRA


Return to main page
opensrs-client-3.0.0/templates/ca_reg/complete_municipal.html0000644017777601777760000000220610770014202025506 0ustar nobodynogroup00000000000000 Domain name registration processed

Congratulations

Your order # has been placed successfully.

To obtain the municipal domain, CIRA requires that the registrant complete and sign a "Certificate of Authorization to Apply for Registration of a Municipal Name" form.
The form can be found at http://www.camunicipalforms.com
Please fax this form to the following fax number: (416) 531-2516 ATTN: CA Municipal Domain Team
Upon receipt of this form, we will initiate the validation process and either approve the registration or return the documents for futher clarification.
If the you do not follow these instructions, you will not obtain your domain .


Return to main page
opensrs-client-3.0.0/templates/ca_reg/complete_queued.html0000644017777601777760000000055510770014202025022 0ustar nobodynogroup00000000000000 Domain name registration processed

Congratulations

Your request to registrer domain has been placed into registrar queue.


Return to main page
opensrs-client-3.0.0/templates/ca_reg/domain_info.html0000644017777601777760000002572610770014202024133 0ustar nobodynogroup00000000000000



Admin Contact Information
* First Name:
* Last Name:
* Preferred Language:
* Organization Name:
* Street:
*optional*  
* City:
* Province:
Please use two letter acronym for canadian provinces
* Country:
* Postal Code:
* Phone:
*optional* Fax:
* Email:
must be a valid email address
Registrant would like to become a CIRA member?: Yes No Yes No
Technical Contact Information
Admin Contact is also the Technical Contact?    checked > Yes   checked> No
* First Name:
* Last Name:
* Preferred Language:
* Organization Name:
* Street:
*optional*  
* City:
* Province:
Please use two letter acronym for canadian provinces
* Country:
* Postal Code:
* Phone:
Fax:
* Email:
must be a valid email address
DNS Information
* First DNS Hostname:
* Second DNS Hostname:
*optional* Third DNS Hostname:
*optional* Fourth DNS Hostname:
*optional* Fifth DNS Hostname:
*optional* Sixth DNS Hostname:
Domain Name Security
A domain must be part of an OpenSRS profile. You may add this domain to an existing profile. Alternatively, if you do not already have an OpenSRS profile you may create a new one. Creating a new profile is easy.

checked> Add this domain to an existing OpenSRS profile
checked> Create a new OpenSRS profile for this domain
 
opensrs-client-3.0.0/templates/ca_reg/error.html0000644017777601777760000000036410770014202022771 0ustar nobodynogroup00000000000000
Click Back to correct the error
opensrs-client-3.0.0/templates/ca_reg/footer.html0000644017777601777760000000004210770014202023127 0ustar nobodynogroup00000000000000
opensrs-client-3.0.0/templates/ca_reg/government_org_name.html0000644017777601777760000000473610770014202025702 0ustar nobodynogroup00000000000000
Enter Government Organization Name

To register a municipal domain the registrant's Legal Type must be 'Government'.Government has been preselected in this form on your behalf. The registrant's name must be complete official name of the city, without any abbreviation, such as "City of Ottawa".

Once the domain is registered, you cannot easily change the registrant name, so please ensure that this name is correct. Please select the appropriate Legal Type and enter the appropriate Registrant Name below.

Click on the ? for further information on the Legal type, Registrant Name and Registrant Description

* Legal Type:  ?
** Organization Name:  ?
Organization Description:  ?
Note: Only fields marked with * are required.
 

opensrs-client-3.0.0/templates/ca_reg/header.html0000644017777601777760000000104610770014202023066 0ustar nobodynogroup00000000000000 Registration Management System

opensrs-client-3.0.0/templates/ca_reg/how_to_link_to_ca.html0000644017777601777760000000361110770014202025317 0ustar nobodynogroup00000000000000
CIRA Registrant Profile
You can add the new domain to an existing CIRA profile in 2 ways. You can specify:
selected> The account information for an existing OpenSRS CA domain profile

This method will submit your order request immediately to CIRA. However, it requires that an OpenSRS domain in the same registrant profile already exists (so that your request is username/password protected).

The new domain will be placed in the same OpenSRS profile as the existing domain.

selected> the CIRA Registrant Number

This method will send an email to the registrant's admin contact. Account/password information is not required. However, the order is not submitted to CIRA until the admin contact approves the order request.

 
opensrs-client-3.0.0/templates/ca_reg/legal_type_help.html0000644017777601777760000000031110770014202024765 0ustar nobodynogroup00000000000000Help
opensrs-client-3.0.0/templates/ca_reg/legal_type_questionnaire.html0000644017777601777760000000615610770014202026740 0ustar nobodynogroup00000000000000
Legal Type Selection

You must provide information about the "Registrant". (The Registrant is the owner of the domain.) To start with, you must select a legal type which characterizes the "Registrant".

It is important to identify the correct legal type for the registrant. This information is reviewed for accuracy by the CA Registry. Failure to properly identify a "registrant" will result in having to correct the information later and may cause your request to fail.

If you are familar with CA legal types and already know your legal type, you can:

Select from all available legal types

OR you can select the grouping that best describes the "Registrant" from the list below, and we will assist you in determining your legal type:

checked> an Individual (who wants the domain for personal use)
checked> a Sole Proprietorship (an individual who wants the domain for their business)
checked> a REGISTERED Corporation, Charity, Partnership, Trust or Trade Mark
checked> a Community Group (like a religious congregation, social club or a sportclub)
checked> a Government Entity, Educational Institution, Hospital, Trade Union, Political Party, Library, Archive or a Museum
checked> an Aboriginal Person, Group or an Indian Band
checked> none of the above
 
opensrs-client-3.0.0/templates/ca_reg/link_osrs_profile.html0000644017777601777760000000265310770014202025366 0ustar nobodynogroup00000000000000
Link to Existing OpenSRS Profile
* Existing Domain Name:
* Existing User Name:
* Existing Password:
 
opensrs-client-3.0.0/templates/ca_reg/lookup.html0000644017777601777760000000277410770014202023160 0ustar nobodynogroup00000000000000
Register Your Domain Today!
Enter Domain Name to Search For:
[example: yourdomain.ca]
Domain Name?: .
For Help press ? in the above section
 
opensrs-client-3.0.0/templates/ca_reg/message.txt0000644017777601777760000000232110770014202023132 0ustar nobodynogroup00000000000000To: {{mailto}} From: {{mailfrom}} Subject: Registration Request for {{domain}} {{admin_email}} submitted a registration for {{domain}}. ---------------------------------------------------------------------- Order Information: ---------------------------------------------------------------------- Order #: {{id}} Reg Type: {{reg_type}} CIRA Reg Type: {{ca_reg_type}} Domain: {{domain}} Reg Period: {{period}} Affiliate ID: {{affiliate_id}} ---------------------------------------------------------------------- Owner information: ---------------------------------------------------------------------- Org. Name: {{reg_name}} ---------------------------------------------------------------------- Admin information: ---------------------------------------------------------------------- First Name: {{admin_first_name}} Last Name: {{admin_last_name}} Org. Name: {{admin_org_name}} Address1: {{admin_address1}} Address2: {{admin_address2}} City: {{admin_city}} State: {{admin_state}} Country: {{admin_country}} Postal Code: {{admin_postal_code}} Phone: {{admin_phone}} Fax: {{admin_fax}} Email: {{admin_email}} opensrs-client-3.0.0/templates/ca_reg/municipal_domain.html0000644017777601777760000000374610770014202025157 0ustar nobodynogroup00000000000000
Attention: You are attempting to register a Municipal Domain
i. Registrar:

(For the purpose of this message, the word "town" will be used in place of city, village, municipality, etc.)

We received a request for and it has been placed under manual validation. As part of the validation processs, CIRA requires the following:

  1. A letter written on the town's letter head stating that the town is the registrant for the domain name . This letter must be signed by a person of authority for the town, such as the mayor, town manager, town administrator, etc. Please fax this letter to CIRA's office at fax number: (613) 237-0534, ATTN: ECAC.

  2. Within the same letter described in #1 or in a separate letter, the town must officially name someone from the town's administration to be its admin contact. The town is also required to supply all relevant contact information for this admin contact, such as job title, email address, phone number, etc.

  3. The letter appointing the admin contact CANNOT be signed by the admin contct. Another officer for the town must do this.

Upon receipt of these document(s), CIRA will continue the validation process and -

  • Approve the registration.
  • Or return the documents to the registrar for further clarification.

 
opensrs-client-3.0.0/templates/ca_reg/new_ca_domain.html0000644017777601777760000000572510770014202024431 0ustar nobodynogroup00000000000000
.CA Domain Registration Form
Chosen Domain Name:
*Registration Period: Year(s)
********ATTENTION********
A payment system must be implemented before giving your customers access to turn auto renew on for a new domain.

Auto Renew:
Yes
No
Yes
No
 
Supplementary Domain Information
Is this domain a registered trademark? Yes No Yes No
Add domain to existing CIRA profile ? Yes  No Yes  No
For Help press ? in the above section
opensrs-client-3.0.0/templates/ca_reg/new_municipal_domain.html0000644017777601777760000000505210770014202026020 0ustar nobodynogroup00000000000000
You have chosen municipality restricted domain name [?]
Domain Name:
Registration Period: Year(s)
********ATTENTION********
A payment system must be implemented before giving your customers access to turn auto renew on for a new domain.

Auto Renew:
Yes
No
Yes
No
 
Supplementary Domain Information
Add domain to existing CIRA profile? Yes  No Yes  No
opensrs-client-3.0.0/templates/ca_reg/new_profile.html0000644017777601777760000000254510770014202024154 0ustar nobodynogroup00000000000000
Create New OpenSRS Profile
* New User Name:
* New Password:
Verify Password:
 
opensrs-client-3.0.0/templates/ca_reg/ret_domain_info.html0000644017777601777760000000435610770014202025001 0ustar nobodynogroup00000000000000
Retrieve Domain Information
This domain requires domain information for the registration to be successful. You can retrieve contact and DNS data from another source or you can input it manually on the next screen. If you retrieve the data from another source you will be able to make any corrections to that data on the next screen. How would you like to proceed?

checked> Retrieve data from the following registrant profile
* Domain Name:
* UserName:
*Password:
checked> I will enter all the required data
   
opensrs-client-3.0.0/templates/ca_reg/thankyou.txt0000644017777601777760000000040610770014202023352 0ustar nobodynogroup00000000000000To: {{mailto}} From: {{mailfrom}} Subject: Registration Request for {{domain}} Received. Thank you for your order {{admin_first_name}}! Your order ID for {{domain}} is {{id}}. Please keep this for future reference. We will be processing your order shortly. opensrs-client-3.0.0/templates/ca_reg/verify_order.html0000644017777601777760000001640310770014202024340 0ustar nobodynogroup00000000000000
Domain Information
Domain Name:
Registration Period Year(s)
Is this domain a registered trademark? YesNo
Registrant Information
Registrant Number:
The admin contact of registrant id will be contacted to approve this request
Registrant: Owner of
Registrant Name:
Registrant Description
Legal Type:
Domain Name Security
Existing OpenSRS profile: /
New OpenSRS profile:
Admin Contact Information
First Name:
Last Name:
Preferred Language:
Organization Name:
Street:
   
City:
Province:
Country:
Postal Code:
Phone:
Fax:  
Email:

Technical Contact Information
Admin Contact is also the Technical Contact
First Name:
Last Name:
Preferred Language:
Organization Name:
Street:
   
City:
Province:
Country:
Postal Code:
Phone:
Fax:  
Email:

DNS Information
First DNS Hostname:
Second DNS Hostname:
Third DNS Hostname:  
Fourth DNS Hostname:  
Fifth DNS Hostname:  
Sixth DNS Hostname:  

Credit Card Information
Card Type:
Card Number:
Expiration: /
 
opensrs-client-3.0.0/templates/ca_reg/verify_reg_name.html0000644017777601777760000000347210770014202025004 0ustar nobodynogroup00000000000000
Verify Registrant Name

Please review the following information to ensure that the format of the Registrant Name adheres to CIRA's established guidelines which are listed below. Failure to provide an appropriate Registrant Name for the selected legal type may result in an unsuccessful registration. ?

Legal Type:

* Registrant Name:  

For this legal type, the Registrant Name should be like: And should NOT be like:

 
opensrs-client-3.0.0/templates/dns_manage/0000755017777601777760000000000010770014215021627 5ustar nobodynogroup00000000000000opensrs-client-3.0.0/templates/dns_manage/base.html0000644017777601777760000000135010770014202023422 0ustar nobodynogroup00000000000000 <TMPL_VAR NAME=title>


opensrs-client-3.0.0/templates/dns_manage/dns_domain_forwarding.html0000644017777601777760000002146010770014202027051 0ustar nobodynogroup00000000000000
Domain forwarding provides you with the option of forwarding visitors to your web site to another website if you prefer. If you don't have a website to forward your domain name to, you have been provided alternative options including an "Under Construction" page, a "Domain For Sale" page and the option to not display anything. Only one domain forwarding option may be selected. After making your changes, select the "Update Domain Forwarding" button at the bottom of the page.

Apply the same to www. domain.

> Domain Forwarding
Please enter the URL for the website you would like your visitors to be forwarded to when they type your domain name in the browser address window. The "URL frame" option provides you with the ability to maintain your domain name (e.g., http://www.yourdomain.com) in the browser address window no matter what link a person clicks on within your Website, instead of the actual address (e.g., http://www.somehostingprovider.com/~mysite/123).

Forward To URL Frame
"checked" >

> Domain for Sale Template
You may use this option to make visitors to your web site aware that your domain is for sale. You have the option of using the generic text provided or you may customize the text by selecting the Domain For Sale option, selecting the "Update Domain Forwarding" button and selecting the "Edit" link. Please note that if you have the Domain For Sale option selected and you select and save another Domain Forwarding option, your Domain For Sale Template customizations will be deleted.    Edit

> Domain Under Construction Template
You may use this option to make visitors aware that your web site is under construction. A generic "Under Contruction" page will be displayed.

> Display Nothing


Subdomain Forwarding
Subdomains are like having extra domain forwarding addresses. With subdomains you can setup "anything.yourdomain.com" to go to any web site you wish. For example, you may wish to setup a help center for your customers and have "help.yourdomain.com" forwarded there. The "URL frame" option provides you with the ability to maintain your domain name (e.g., help.yourdomain.com) in the browser address window no matter what link a person clicks on within your Website, instead of the actual address (e.g., http://www.somehostingprovider.com/~mysite/123).
Forward To URL Frame Remove
There are no subdomain forwardings defined.
. "checked">
Add New Subdomain Forwarding
Forward To URL Frame
. >



opensrs-client-3.0.0/templates/dns_manage/dns_manage_zone.html0000644017777601777760000004345410770014202025652 0ustar nobodynogroup00000000000000
Hostnames (A Records)
An A record specifies the numeric IP address for a hostname. If you wish to create an A record for , simply enter the IP address. If you wish to create an A record for a subdomain (e.g., www.), enter the subdomain and the IP address.
Hostname IP Address Remove

> Manage Domain Forwarding
Add New Hostname
Hostname IP Address
.

Aliases (CNAME Records)
A CNAME record is used to create an alias for . This record points a hostname for this domain to another hostname.
Alias Hostname Remove
>  
Add New Alias
Alias Hostname
.

Mail Exchanges (MX Records)
An MX record specifies where mail is delivered for or a subdomain. The mail server that mail is delivered to is referred to as the mail exchange. If you wish to create an MX record for mail sent to , enter the mail exchange and preference. If you wish to create an MX record for mail sent to a subdomain (e.g., office2.), enter the subdomain (e.g., office2), mail exchange and preference.
Hostname Mail Exchange Preference Remove
> >  
Add New Mail Exchange
Hostname Mail Exchange Preference
.

TXT Records
The purpose of a TXT record is to store general information about particular hostname or device. The fields for a TXT record are hostname and comments. The hostname is the host for which you are adding comments, and the comments field is the plain text that you wish to associate with this device
Hostname Comments Remove
>  
Add New TXT Record
Hostname Comments
.

Subdomain Delegation (NS Records)
To delegate subdomains specify the subdomain and Fully Qualified Domain Name (FQDN) of the nameserver(s) that will act for the subdomain.
Subdomain Nameserver Hostname Remove
>  
Add New Subdomain
Subdomain Nameserver Hostname
.


Retrieve Zone Information
This allows you to retrieve the zone records for the zone if it is currently active with another DNS provider. This retrieve option will attempt to retrieve all records in the zone, but may not successfully retrieve all records. Retrieved zone records will be added to existing records by default. If you wish to overwrite and delete your current zone record entries so that they are replaced with the retrieved entries, then check the Delete All Current Zone Records checkbox and click the Retrieve button.
Delete All Current Zone Records   

Restore Current Default Zone Settings
If at any time you'd like to restore ALL of the zone records to the current default settings, click the Reset (all) Zone Defaults button below. As an important note, this will overwrite and delete your current zone entries and replace them with the default entries.


opensrs-client-3.0.0/templates/dns_manage/error.html0000644017777601777760000000025710770014202023646 0ustar nobodynogroup00000000000000

Error

The error which occurred was:
opensrs-client-3.0.0/templates/dns_manage/for_sale_template.html0000644017777601777760000000247610770014202026207 0ustar nobodynogroup00000000000000
Heading
    [max 255 characters]
 
Description
    [max 3999 characters]
 
opensrs-client-3.0.0/templates/dns_manage/login.html0000644017777601777760000000266110770014202023626 0ustar nobodynogroup00000000000000
Login to DNS
 
Username:
Password:
Forgot your password?
Click here
opensrs-client-3.0.0/templates/dns_manage/main.html0000644017777601777760000000434210770014202023440 0ustar nobodynogroup00000000000000
User Name:
Zone Name Service Type Creation Date Select Task
There are no inventory items at this time


opensrs-client-3.0.0/templates/dns_manage/message.html0000644017777601777760000000034510770014202024137 0ustar nobodynogroup00000000000000
opensrs-client-3.0.0/templates/dns_manage/title.html0000644017777601777760000000131010770014202023625 0ustar nobodynogroup00000000000000
class="nav"> class="nav">  
opensrs-client-3.0.0/templates/emaildefense/0000755017777601777760000000000010770014215022154 5ustar nobodynogroup00000000000000opensrs-client-3.0.0/templates/emaildefense/add_contact_info.html0000644017777601777760000000461110770014202026316 0ustar nobodynogroup00000000000000
Email Defense Contact Information for
Admin Contact:   -or-
First Name:
Last Name:
Street Address:
City:
State/Province:
Zip/Postal Code:
Country:
Phone: (e.g. +1.4165551122x1234)
Email:
opensrs-client-3.0.0/templates/emaildefense/add_email_servers.html0000644017777601777760000000504310770014202026510 0ustar nobodynogroup00000000000000
Destination Email Servers for

Destination email servers are the mail servers that legimate mail will be delivered to after being filtered. You must specify the SMTP host of the mail server (e.g. mymailserver.com) or the IP address of the mail server (1.2.3.4), the port (e.g. 25 is the general standard), and the preference for the mail server (e.g. 1 if there is only 1 mail server). After the Email Defense Service has been purchased, these settings can be updated directly in the Email Defense Portal under the Setup tab.

SMTP Host Address Port Number Preference Number
opensrs-client-3.0.0/templates/emaildefense/add_features.html0000644017777601777760000000411310770014202025463 0ustar nobodynogroup00000000000000
Add Features
Feature Set for

The domain is currently subscribed to the Email Defense Service. Listed below are the current features and the available upgrades. These features will apply to all Email Defense users on the domain. Individual users may not have different features.

Anti-Spam
>Anti-Virus
>Content & Attachment Filtering
opensrs-client-3.0.0/templates/emaildefense/add_manage_feature_set.html0000644017777601777760000000563710770014202027477 0ustar nobodynogroup00000000000000
Add Features

Feature Set for

The domain () is currently subscribed to the Email Defense Service. Listed below are the current features and the available upgrades. These features will apply to all Email Defense users on the domain. Individual users may not have different features.

Anti-Spam
disabled >Anti-Virus
disabled >Content & Attachment Filtering
opensrs-client-3.0.0/templates/emaildefense/add_manage_user_accounts.html0000644017777601777760000000356010770014202030037 0ustar nobodynogroup00000000000000
Add Email Defense Users
Email Defense Users for

Enter all user email addresses for which you are purchasing the Email Defense Service. Only enter the portion before the "@" symbol of the email address. (e.g. for jsmith@isp.com, enter "jsmith").

(Enter one user per line)

e.g. jsmith


max users
opensrs-client-3.0.0/templates/emaildefense/add_new_purchase_feature_set.html0000644017777601777760000000433010770014202030717 0ustar nobodynogroup00000000000000
Select Feature Set

Select Feature Set for

Select the feature set to be applied to all Email Defense users on the domain. Individuals may not have different features. The Anti-Spam feature is not optional and is included by default.

Anti-Spam
>Anti-Virus
" >Content & Attachment Filtering
opensrs-client-3.0.0/templates/emaildefense/add_user_accounts.html0000644017777601777760000000365710770014202026536 0ustar nobodynogroup00000000000000
Email Defense Users
Email Defense Users for

Enter all user email addresses for which you are purchasing the Email Defense Service. Only enter the portion before the "@" symbol of the email address. (e.g. for jsmith@isp.com, enter "jsmith")

(Enter one user per line)

e.g. jsmith


max users
opensrs-client-3.0.0/templates/emaildefense/add_user_roles_and_pass_info.html0000644017777601777760000001120610770014202030713 0ustar nobodynogroup00000000000000
Email Defense User Information for

Select the Email Defense user role for those users that require administrator responsibility. If a user does not require administrator responsibility, use the default end user role. After the domain has been purchased, the role can be updated directly in the Email Defense Portal by an administrator.

If users on a domain are enabled to login to the Email Degense Portal, they may set a password vis their Spam Quarantine Report (each user's spam report will include a hyperlink to set a password). Users do not require a password to login directly to the Email Defense Portal from thier Spam Quarantine Report.

IMPORTANT NOTE: You may wish to assign a domain administrator a password now so that they can login to the Email Defense Portal in advance of receiving their first Spam Quarantine Report. To enable the domain administrator to login, you will need to ensure that "Allow recipients to set an Email Defense Portal password" is enabled on your Reseller default settings or the Email Defense Portal.

Email Defense User Email Defense User Role Password Assignment Password (min 6)
(only valid if assignment set to 'Now')
Confirm Password
> Now
checked> Via Quarantine Report
opensrs-client-3.0.0/templates/emaildefense/base.html0000644017777601777760000000116610770014202023754 0ustar nobodynogroup00000000000000 <TMPL_VAR TITLE>





opensrs-client-3.0.0/templates/emaildefense/cancel_emaildefense_service.html0000644017777601777760000000201610770014202030503 0ustar nobodynogroup00000000000000
Confirmation of Cancellation

You have requested to cancel Email Defense Service for . Please confirm that you want to cancel this service.

opensrs-client-3.0.0/templates/emaildefense/cancel_new_purchase_order.html0000644017777601777760000000055510770014202030226 0ustar nobodynogroup00000000000000
Order Cancelled
Your order has been cancelled.
opensrs-client-3.0.0/templates/emaildefense/cc_fields.html0000644017777601777760000000257010770014202024755 0ustar nobodynogroup00000000000000
Payment Information
Please ensure you are obtaining payment with the information gathered. This template does no credit card processing by default.
Method of Payment: Expiration Date
Card Number:  
opensrs-client-3.0.0/templates/emaildefense/confirm_add_manage_order.html0000644017777601777760000000415310770014202030011 0ustar nobodynogroup00000000000000
Email Defense Service Order Confirmation

The following shows the users you are purchasing for the Email Defense service.

Service Details
Domain Name
Added Email Defense Users
()
None added
User accounts set are empty. Cannot process empty order.
opensrs-client-3.0.0/templates/emaildefense/confirm_manage_remove_order.html0000644017777601777760000000241210770014202030552 0ustar nobodynogroup00000000000000
Email Defense Service Order Confirmation

The users that will be removed from the the Email Defense service are shown below.

Service Details
Domain Name
Removed Email Defense Users
()
opensrs-client-3.0.0/templates/emaildefense/confirm_new_purchase_order.html0000644017777601777760000000707310770014202030440 0ustar nobodynogroup00000000000000
Email Defense Service Order Confirmation

The following shows the users you are purchasing for the Email Defense service.

Service Details
Domain Name
Email Defense Users
Administrative Contact
First Name
Last Name
Street Address
City
State/Province
Zip/Postal Code
Country
Phone
Email
User accounts are empty. Cannot process empty order.
opensrs-client-3.0.0/templates/emaildefense/confirm_remove_manage_order.html0000644017777601777760000000401110770014202030547 0ustar nobodynogroup00000000000000
Email Defense Service Order Confirmation

The users that will be removed from the the Email Defense service are shown below.

Service Details
Domain Name
Removed Email Defense Users
()
None removed
User accounts are empty. Cannot process empty order.
opensrs-client-3.0.0/templates/emaildefense/do_cancel_emaildefense_service.html0000644017777601777760000000175610770014202031177 0ustar nobodynogroup00000000000000
Email Defense Service Cancelled

The Email Defense Service for domain has been cancelled.

opensrs-client-3.0.0/templates/emaildefense/do_cancel_new_purchase_order.html0000644017777601777760000000153410770014202030706 0ustar nobodynogroup00000000000000
Email Defense Service Cancelled

The Email Defense Service for domain has been cancelled.

opensrs-client-3.0.0/templates/emaildefense/error.html0000644017777601777760000000024210770014202024165 0ustar nobodynogroup00000000000000

Registration Error

The error which occurred was:
opensrs-client-3.0.0/templates/emaildefense/keep_emaildefense_service.html0000644017777601777760000000167210770014202030211 0ustar nobodynogroup00000000000000
Email Defense Service Not Cancelled

The Email Defense Service for domain has not been cancelled. You may continue to manage the service on this domain or others using the serice.

opensrs-client-3.0.0/templates/emaildefense/list_features_and_users.html0000644017777601777760000000244610770014202027760 0ustar nobodynogroup00000000000000
Service Details for
Email Defense Users
()
opensrs-client-3.0.0/templates/emaildefense/lookup.html0000644017777601777760000000222710770014202024352 0ustar nobodynogroup00000000000000
Purchase or Manage Service

Enter the domain to which you want to add the service or add new users.

Domain
opensrs-client-3.0.0/templates/emaildefense/manage_service.html0000644017777601777760000000627210770014202026015 0ustar nobodynogroup00000000000000
Select a Domain and Action

Below is a list of your domains that have the Email Defense service. You may select an action to perform on each domain.

  Add Users List Users Remove Users Cancel
opensrs-client-3.0.0/templates/emaildefense/manage_service_login.html0000644017777601777760000000353010770014202027177 0ustar nobodynogroup00000000000000
Existing User

The Defense Service already exists on this domain. Please enter the username and password used to purchase the Email Defense Service. You will only be able to manage the domain through this account.

Username
Password
opensrs-client-3.0.0/templates/emaildefense/new_purchase_service_login.html0000644017777601777760000000737310770014202030443 0ustar nobodynogroup00000000000000

User Profiles provide convenient access to the Email Defense Service for one or multiple domains. If this is the first Email Defense Service you are creating you have two options: 1) you can create a new user profile or 2) from a previous Email Defense Service purchase use an existing user profile.

Domain:
New User
Username
Password
Confirm
Existing User
Username
Password
 
opensrs-client-3.0.0/templates/emaildefense/order_results.html0000644017777601777760000000560210770014202025735 0ustar nobodynogroup00000000000000
Email Defense Service Order Results

The results of your Email Defense Service order are listed below. When making inquiries about this order, please refer to the Order ID. Any questions can be sent to .

Order ID:
Order ID Domain Action Users

The Email Defense Service Portal can be accessed at using the email address and password used to enter this order. Through the Portal you can setup and manage the Email Defense Service.

 
opensrs-client-3.0.0/templates/emaildefense/password_recovery_msg.html0000644017777601777760000000144310770014202027466 0ustar nobodynogroup00000000000000
Password Recovery

An email has been sent with your password. Once you have receive the email, click on the button below to login again.

opensrs-client-3.0.0/templates/emaildefense/purchase_service_login.html0000644017777601777760000000737310770014202027572 0ustar nobodynogroup00000000000000

User Profiles provide convenient access to the Email Defense Service for one or multiple domains. If this is the first Email Defense Service you are creating you have two options: 1) you can create a new user profile or 2) from a previous Email Defense Service purchase use an existing user profile.

Domain:
New User
Username
Password
Confirm
Existing User
Username
Password
 
opensrs-client-3.0.0/templates/emaildefense/recover_password.html0000644017777601777760000000227510770014202026433 0ustar nobodynogroup00000000000000
Password Recovery

Enter your username below and click the "Send Password" button. Your password will be sent to your email address on file.

Username
opensrs-client-3.0.0/templates/emaildefense/remove_manage_feature_set.html0000644017777601777760000000456510770014202030243 0ustar nobodynogroup00000000000000
Remove Feature Set

Feature Set for

Listed below are the features that can be removed from . Select which feature(s) you wish to remove, if any. These features will be removed from all Email Defense users on the domain. Individual Email Defense users may not have different features.

No features to remove. You cannot remove AntiSpam feature.
" >Anti-Virus
" >Content & Attachment Filtering
opensrs-client-3.0.0/templates/emaildefense/remove_manage_user_accounts.html0000644017777601777760000000413010770014202030576 0ustar nobodynogroup00000000000000
Remove Email Defense Users
Email Defense Users for

Enter the Email Defense users that you wish to remove from the Email Defense Service. Only enter the portion before the "@" symbol of the email address. (e.g. for jsmith@isp.com, enter "jsmith").

No user accounts to remove. If you want to remove the last user account, you should cancel the service for this domain.
(Enter one user per line)

e.g. jsmith


max users
opensrs-client-3.0.0/templates/emaildefense/select_feature_set.html0000644017777601777760000000352710770014202026712 0ustar nobodynogroup00000000000000
Select Feature Set

Select Feature Set for

Select the feature set to be applied to all Email Defense users on the domain. Individuals may not have different features. The Anti-Spam feature is not optional and is included by default.

Anti-Spam
Anti-Virus
Content & Attachment Filtering
opensrs-client-3.0.0/templates/help/0000755017777601777760000000000010770014215020463 5ustar nobodynogroup00000000000000opensrs-client-3.0.0/templates/help/ca/0000755017777601777760000000000010770014215021046 5ustar nobodynogroup00000000000000opensrs-client-3.0.0/templates/help/ca/CA_domain_name_help.htm0000644017777601777760000000621310770014202025400 0ustar nobodynogroup00000000000000
{{select_auto_renew}} opensrs-client-3.0.0/templates/manage/manage_subuser.html0000644017777601777760000001070410770014202024647 0ustar nobodynogroup00000000000000

CA Domain Names

.CA domains are unique from other domain types like .com, .net or .org. There are two special domain types:

1. Municipal Domain Names, and
2. Conflicting or "Blocked" Domain Names.

Municipal Domain Names

CIRA has reserved a domain name for every village and town in Canada.

The syntax for these names is: Qualifier.name.province.ca where 'qualifier' is town, village, etc. (examples: city.toronto.on.ca and town.orangeville.on.ca)

Registration orders for these names are submitted like normal orders. However, CIRA has instituted a manual process to complete the registration. Once the order has been submitted, it is reviewed for completeness. If the order appears to be a legitimate registration, the order is submitted to CIRA. At this point, the registrant should fax a letter to CIRA verifying the claim to the name. Once the order is successfully submitted, the registrant is provided with instructions for completing the order!

Conflicting or "Blocked" Domain Names

Once a .ca name (or it's provincial variant) has been registered, all other variants of that name are blocked to other registrants. For example, if the name smith.on.ca was registered to Jessica Smith, then only Jessica Smith could register smith.qc.ca (or any other provincial variant) or smith.ca.

Jessica Smith can order any and all of the other variants of her name by linking the new registration request to the existing CIRA profile. Jessica Smith can also grant permission to any other party that is eligible for .ca names to register one or some of the other variants of her name.

To place a request for a 'blocked' name, simply enter the order as you normally would for a .ca name. Our systems will determine that the name has other variants, and will engage the blocker process. The system emails the administrative contacts of all the 'blocking' domains to get their approval. If all blocking parties agree to grant the new name to your Registrant, our system will send the registration command to CIRA.

If you already own a domain and are trying to obtain the provincial variant, you should "add the domain to your existing CIRA profile" by selecting YES to this option on the order form. If you have the only variant of this name, you will not enter the "blocker" process.

opensrs-client-3.0.0/templates/help/ca/CIRA_Profile_help.htm0000644017777601777760000000525610770014202024772 0ustar nobodynogroup00000000000000
CIRA Registrant Profiles

CIRA uses ‘Registrant Profiles’ for grouping domains owned by registrant. If, for example, one registrant orders a number of domain names, CIRA specifies that we process each of the domains with the Registrant ID number, as opposed to including full contact information with each order.

NOTE: These profiles are not the same as OpenSRS profiles. The OpenSRS profile allows you to group “unrelated” domains together. The OpenSRS profile allows the administrator to manage domains which have different admin and tech contacts through one interface.

The CIRA registrant profile requires that all the domains in the profile ALWAYS have the same admin and tech contact information.

For every .ca domain, there is both a CIRA profile AND an OpenSRS profile. Although you can structure the CIRA profile and OpenSRS differently, it is best to keep the same profile structure.

For example, given the scenario where:

- Jane Doe has two domains for her personal use: jdoe.ca and janedoe.ca. Jane is the admin and technical contact for the domains jdoe.ca and janedoe.ca.

- Jane also has a group of friends who have an informal fitness club, and she administers the domain befit.ca for them, but the technical contact for is a webhosting firm that the club has hired.

In this case, the profiles for the domains should be:

- CIRA Profile A for domains jdoe.ca and janedoe.ca where registrant name is "Jane Doe". Jane Doe would be listed as both the admin and tech contact.

- CIRA Profile B for domain befit.ca where registrant name is "Jane Doe o/a The Fitness Gang". Jane Doe would be listed as the admin and the web hosting company as the tech contact.

Similarly there should be two OpenSRS profiles to match the two CIRA Profiles.

opensrs-client-3.0.0/templates/help/ca/province_list.html0000644017777601777760000000050110770014202024604 0ustar nobodynogroup00000000000000 Canadian province and territiry acronyms
ON Ontario
MB Manitoba
YK Yukon
NB New Brunswick
NS Nova Scotia
SK Saskatchewan
NT Northwest Territories
NU Nunavut
NL Newfoundland and Labrador
AB Alberta
QC Quebec
PE Prince Edward Island
BC British Columbia
opensrs-client-3.0.0/templates/manage/0000755017777601777760000000000010770014215020763 5ustar nobodynogroup00000000000000opensrs-client-3.0.0/templates/manage/asia_ced_form.html0000644017777601777760000001565210770014202024431 0ustar nobodynogroup00000000000000
.ASIA CED Contact Information
Contact Type

Charter Eligibility is the basic requirement to register a .ASIA domain name, at least one of the domain contacts (admin, billing, owner/registrant, tech) must be a legal entity in the DotAsia Community.
Country/Locality  [-]
City
*optional*
State/Province
*optional*
Legal Entity Type
Identification Type
     Type:
Identification Number

opensrs-client-3.0.0/templates/manage/base.html0000644017777601777760000000341010770014202022555 0ustar nobodynogroup00000000000000 Manage Your Domain - {{DOMAIN_NAME}} {{AUTORENDATA}}
Manage Your Domain
Domain Name: {{DOMAIN_NAME}} {{CONVERT_LINK}}  {{dom_locked}}
{{INACCURATEWHOIS}} {{AUCTION_ESCROW}}
Expires: {{EXPIREDATE}}    Waiting Requests: {{WAITING_REQUESTS_NO}}
{{TOP_NAVBAR}}
{{SUB_USER}} {{LAST_ACCESS}}
{{SEARCH_BOX}}
{{DNS_ERRORS}}
{{MESSAGE}}
{{CONTENT}} opensrs-client-3.0.0/templates/manage/base2.html0000644017777601777760000000463710770014202022653 0ustar nobodynogroup00000000000000 Manage Your Domain - {{DOMAIN_NAME}} {{AUTORENDATA}}
Warning! Names expiring!
{{EXPIRING}} 
 {{EXPIRED}} 
Manage Your Domain
Domain Name:{{DOMAIN_NAME}} {{CONVERT_LINK}}  {{dom_locked}}
{{INACCURATEWHOIS}} {{AUCTION_ESCROW}}
Expires: {{EXPIREDATE}}    Waiting Requests: {{WAITING_REQUESTS_NO}} 
{{TOP_NAVBAR}}
{{SUB_USER}} {{LAST_ACCESS}}
{{SEARCH_BOX}}
{{DNS_ERRORS}}
{{MESSAGE}}
{{CONTENT}}



  opensrs-client-3.0.0/templates/manage/base_autoren.html0000644017777601777760000000101310770014202024307 0ustar nobodynogroup00000000000000

Auto-Renew !
Notice: this domain is set to be automatically renewed on {{AUTORENDATA}}
opensrs-client-3.0.0/templates/manage/cant_change_ips_tag.html0000644017777601777760000000040710770014202025606 0ustar nobodynogroup00000000000000
Please contact your Reseller to change your IPS tag.
Reseller Contact

opensrs-client-3.0.0/templates/manage/change_ips_tag.html0000644017777601777760000000241210770014202024577 0ustar nobodynogroup00000000000000


Domain Tag change away
New Domain Tag:
Apply tag change to all .uk domains in this profile? No    Yes
Please note that changing the Domain Tag will transfer your domain(s) to the new Tag Holder. You will have to contact your new Tag Holder(registrar) for all further support.


opensrs-client-3.0.0/templates/manage/change_ownership.html0000644017777601777760000000202710770014202025171 0ustar nobodynogroup00000000000000
Change Ownership of Domain


Username:
Password:
Confirm:

Move to existing profile
Move all domains associated with this profile
Previously registered domain:
opensrs-client-3.0.0/templates/manage/change_password.html0000644017777601777760000000140410770014202025013 0ustar nobodynogroup00000000000000
Change Password for Domain Management


New Password:
Confirm Password:
opensrs-client-3.0.0/templates/manage/cira_email_pwd.html0000644017777601777760000000064110770014202024605 0ustar nobodynogroup00000000000000



Email CIRA Password to Admin Contact

opensrs-client-3.0.0/templates/manage/dns_error_form.html0000644017777601777760000000144510770014202024671 0ustar nobodynogroup00000000000000
DNS Errors
DNS Error
Validate domain

NOTE: After changing the nameservers, if the domain still reports DNS errors, check the 'Validate domain' box above to have the registry re-validate the new nameserver, and clear the error. This can take up to 24-48 hours to complete.

opensrs-client-3.0.0/templates/manage/domain_auth_code_form.html0000644017777601777760000000107110770014202026151 0ustar nobodynogroup00000000000000
Domain Authorization Information
Domain Auth Code
must contain between 1 and 32 characters

opensrs-client-3.0.0/templates/manage/domain_locking.html0000644017777601777760000000164110770014202024624 0ustar nobodynogroup00000000000000
- Domain Locking -

When locking is enabled for a domain, any requests to transfer the domain to another registrar or hosting company will automatically fail. This can be used to prevent fraudulent transfers of the domain, while locking is enabled.

Should you ever want to transfer the domain, or modify nameservers based on the domain, domain locking must first be disabled, before the relevant action is performed.

Note that only the owner for a domain can enable/disable locking. The sub-user for the domain, if any, will not be able to perform this action.

{{FORM}}
opensrs-client-3.0.0/templates/manage/error.html0000644017777601777760000000023510770014202022776 0ustar nobodynogroup00000000000000
Error Page


{{ERROR}}

{{SHOW_PASS}} opensrs-client-3.0.0/templates/manage/expire_domains_result.html0000644017777601777760000000165410770014202026257 0ustar nobodynogroup00000000000000
{{TITLE}}
{{NAVBAR}}
{{DOMAINS}}
Domain Name Domain Status
opensrs-client-3.0.0/templates/manage/forwarding_email_form.html0000644017777601777760000000130010770014202026173 0ustar nobodynogroup00000000000000 <{{email_comment}}TD>
must be a valid non-.name email address
<{{text_comment}}TD> No Forwarding Email available to be modified
Forwarding Email
Forwarding Email Address

opensrs-client-3.0.0/templates/manage/login.html0000644017777601777760000000304010770014202022752 0ustar nobodynogroup00000000000000 Manage Your Domain - Login

{{MESSAGE}}
Manage Your Domain
Domain Name:
User Name:
Password:
* User Name and Password are case sensitive
* Do not put www. as part of your domain name



Click here to manage your CH, FR, NL, AT, MX, ES, DK and IT domains

* Cookies must be enabled on your browser to use this interface
opensrs-client-3.0.0/templates/manage/main_menu.html0000644017777601777760000000477210770014202023627 0ustar nobodynogroup00000000000000
{{expiry_notice}}
Navigation Help
{{sub_user}}
You may change your password, create or modify an additional username, or move this domain to a different ownership profile. You can restrict access for the sub-user to allow only certain records to be modified.



{{f_modify_owner}} {{f_modify_admin}}
This is the person or entity who is named as "authoritative" as related to decisions made for significant changes to your records.

{{f_modify_billing}}
This is the contact responsible for billing issues with regard to this domain's registration. In order to avoid interruption in service, the registration fee must be up to date at all times. This record should be accurate in order to maintain renewal fees properly.

{{f_modify_tech}}
This is the contact who is considered authoritative for this domain name as related to Web hosting, mail, and other DNS records. This is typically your ISP or Web Hosting Provider but it can be anyone you desire. NOTE: Not used for .UK domains (deprecated by .UK Registry Nominet since Nov 15, 2005)

{{f_modify_nameservers}}
Controls which ISP or Hosting company is designated as the primary/secondary name server. If you are unsure of how to use this feature, please refer to your ISP. You can add a username and password to allow your ISP to get in and change your Name Servers for you if you like.

{{f_modify_domain_extras}}
This page contains non-classifiable domain data like: domain auth info, forwarding email address, nexus data (.us), ced contact info (.asia) and domain validation.

{{f_modify_whois_rsp_info}}
This is information about the company or entity which "sponsors" the domain name registration, and who is tasked with providing technical and customer support for issues relating to this registration.

{{domain_locking}}
Allows the domain to be 'locked' to prevent transfers. By enabling this, transfers will automatically be rejected, and nameservers cannot be modified.

Logout




opensrs-client-3.0.0/templates/manage/manage_nameservers.html0000644017777601777760000000402310770014202025506 0ustar nobodynogroup00000000000000
Manage Nameserver Hosts

NOTE: If you rename the nameserver hostname to a different base domain, you will
have to manage the new domain's profile in order to make additional changes
to the nameserver.

E.g., changing ns1.foo.com -> ns1.bar.com would require you to login to
bar.com's profile to manage the nameserver after you made your changes.


{{nameservers}}
NameServer New HostName IP Address Action
 



- Create Name Server -

NOTE: If you do not have dns software running on this host/ip, you probably do not want to use this feature.

Once you have created your name servers, if you wish to use them on your domain, you must manually add them through the main "Name Servers" section.


Server Hostname .{{DOMAIN_NAME}}
Server IP Address

opensrs-client-3.0.0/templates/manage/manage_profile.html0000644017777601777760000000160110770014202024613 0ustar nobodynogroup00000000000000
Profile Management


  • Change Password Change the password used to manage this profile.

  • Create/Manage a Sub-User You may add an additional username and password associated with this domain in
    order to allow multiple people to update your records. You can restrict access
    for this sub-user to allow only certain records to be modified.

    Note: Only one sub-user can be created for each domain.

  • Change Ownership of Domain You may create a new profile for this domain or move it to a different
    profile you own.
opensrs-client-3.0.0/templates/manage/manage_rview_btns.html0000644017777601777760000000115210770014202025336 0ustar nobodynogroup00000000000000
 
- Manage Sub-User -

Use this area to manage an additional user who you can give permission to edit all or part of your domain information. This is typically setup in order to allow an ISP to come in and modify your Name Servers while not having access to change your other records. You can of course, allow full access to another person, or simply partial access as outlined below.

Note: Only one sub-user can be created for each domain. Modifying the sub-user profile will result in the old data being overwritten.

Username:
New Password:
Re-enter Password:
* Note: Usernames and passwords are case sensitive
- Permissions -
Edit Record YES No
Name Servers
Organization Contact
Admin Contact
Billing/Zone Contact
Technical Contact
Domain Extras
Reseller Contact


opensrs-client-3.0.0/templates/manage/modify_ca_org_contact.html0000644017777601777760000000342710770014202026167 0ustar nobodynogroup00000000000000
- Edit {{contact_type}} Contact -

{{contact_type}} Contact Information
Organization Name: {{org_name}} 
Legal Type: {{legal_type_field}}
Description:
*CWA Flag: {{cwa_field}}
* Setting the CWA (Change Without Approval) flag will allow your registrar (Tucows) to modify your email address without submitting the request to the registry (CIRA) for processing. If you set this flag to yes, you will be required to confirm this change at:

https://registrants.cira.ca/user





opensrs-client-3.0.0/templates/manage/modify_contact.html0000644017777601777760000000677610770014202024667 0ustar nobodynogroup00000000000000
- Edit {{contact_type}} Contact -

{{revoke_registrant_changes}} <{{org_comment}}TR> <{{uk_org_comment}}TR>
{{contact_type}} Contact Information
First Name:
Last Name:
Organization Name: Organization Name: {{org_name}}
Street Address:
Address 2:
Address 3:
City:
State:
Country:
Postal Code:
Phone Number:
(eg. +1.4165551212x1234)
<{{fax_opt_comment}}font color=red size=-1> *optional* Fax Number:
(eg. +1.4165551212x1234)
Email:
{{GLOBAL_CHANGE_MENU}}



opensrs-client-3.0.0/templates/manage/modify_contact_beu.html0000644017777601777760000000711410770014202025505 0ustar nobodynogroup00000000000000
- Edit {{contact_type}} Contact -

{{revoke_registrant_changes}}
{{contact_type}} Contact Information
First Name:
Last Name:
Organization Name:
Street Address:
Address 2:
Address 3:
City:
State:
Country:
Postal Code:
Phone Number:
(eg. +1.4165551211)
*optional* Fax Number:
(eg. +1.4165551212)
Email:
*optional* VAT Registration Number:
Language of Correspondence:
{{GLOBAL_CHANGE_MENU}}



opensrs-client-3.0.0/templates/manage/modify_contact_ca.html0000644017777601777760000001126210770014202025314 0ustar nobodynogroup00000000000000
- Edit {{contact_type}} Contact -

{{cc_warning}} {{language_type_field}} {{nationality_field}}
{{contact_type}} Contact Information
Title:
See bottom for valid value
First Name:
Middle Name:
Last Name:
Company:
Job Title:
Additional Delivery Information
Civic Number:
Street Type:
See valid values at the bottom
Street Name:
Street Orientation:
See valid values at the bottom
Office Number:
City:
State/Province:
Country
Postal Code:
Phone Number:
(eg. 416-555-1122 x333)
*optional* Fax Number:
(eg. 416-555-1122)
Email:

{{GLOBAL_CHANGE_MENU}}



    Title:
  • MR
  • MRS
  • MS
  • DR

    Street Type:
  • AV - Avenue
  • BL - Boulevard
  • CT - Court
  • CR - Crescent
  • DR - Drive
  • HW - Highway
  • PL - Place
  • PZ - Plaza
  • RD - Road
  • SQ - Square
  • ST - Street
  • WY - Way

    Street Orientation:
  • E - East
  • N - North
  • NE - North-East
  • NW - North-West
  • S - South
  • SE - South-East
  • SW - South-West
  • W - West
    opensrs-client-3.0.0/templates/manage/modify_de_org_contact.html0000644017777601777760000000220510770014202026165 0ustar nobodynogroup00000000000000
    - View {{contact_type}} Contact -

    {{contact_type}} Contact Information
    Description:

    {{GLOBAL_CHANGE_MENU}}



    opensrs-client-3.0.0/templates/manage/modify_domain_extras.html0000644017777601777760000000106310770014202026051 0ustar nobodynogroup00000000000000
    - Manage Domain Extra Information -

    {{domain_auth_code_form}} {{forwarding_email_form}} {{us_nexus_form}} {{asia_ced_form}} {{trademark_form}} {{dns_error_form}} {{uk_whois_opt_form}} {{whois_privacy_form}} {{cira_email_pwd}} {{change_ips_tag_form}}


    opensrs-client-3.0.0/templates/manage/modify_nameservers.html0000644017777601777760000000330310770014202025545 0ustar nobodynogroup00000000000000

    - Manage Name Servers -

    • To replace a nameserver, simply edit the existing hostname.
    • To remove a nameserver, simply cleanup the existing hostname.
    • To add a nameserver, simply fill an empty field for hostname.
    • IP addresses are not displayed by certain registries. This does not affect the operation of the nameserver.
    • ** IMPORTANT: Before adding additional name servers to your configuration, you should be sure that the name server has {{domain}} setup correctly. 24 - 48 hours after you submit a request for an additional name server, it will be in the rotation for authoritative lookups and if it is not setup correctly, your site will take a long time to resolve when visitors try to find you.
    • The order of the nameservers is not relevant
    {{NAMESERVERS}}
    Server Hostname Server IP Address

    {{INACCURATEWHOISLOCK}}


    {{CREATE_NAMESERVERS}}


    opensrs-client-3.0.0/templates/manage/trademark_form.html0000644017777601777760000000114610770014202024644 0ustar nobodynogroup00000000000000
    Manage Domain Trademark
    Domain Trademark Yes No

    opensrs-client-3.0.0/templates/manage/uk_whois_opt_form.html0000644017777601777760000000322710770014202025406 0ustar nobodynogroup00000000000000
    Displaying personal information in the Nominet whois
    Display personal info in whois? No    Yes
    Registrant Type Individual (UK)
    Individual (non-UK)
    Other
    Please note that only Individuals can choose not to have their personal info displayed
    Apply to all .uk domains in this profile? No    Yes

    opensrs-client-3.0.0/templates/manage/us_nexus_form.html0000644017777601777760000000404110770014202024540 0ustar nobodynogroup00000000000000
    Nexus Information
    Domain Name Application Purpose
    Nexus Category of Applicant (please choose one) Category 1 - A natural person:
    Who is a United States citizen
    Who is a permanent resident of the United States of America or any of its possessions or territories

    Category 2 - U.S. Corporation
    U.S. organization incorporated within one of the 50 states of a U.S. territory

    Category 3 - Bona Fide U.S. Presence
    Regularly engages in lawful activities (sales of good or services or other business, commercial or non-commercial, including not-for-profit relations in the United States).
    Entity has an office or other facility in the U.S.
    Country of Citizenship:  

    opensrs-client-3.0.0/templates/manage/view_domains.html0000644017777601777760000000170610770014202024335 0ustar nobodynogroup00000000000000
    List of domains in profile

    {{NAVBAR}} Number of selected domains: {{DOMAIN_COUNT}}

    {{header}} {{DOMAINS}}
    Domain Name Expiry DateWhois Privacy WP Expiry Date
    opensrs-client-3.0.0/templates/manage/view_expire_domains.html0000644017777601777760000000333510770014202025711 0ustar nobodynogroup00000000000000
    {{TITLE}}
    {{NAVBAR}} Number of selected domains: {{DOMAIN_COUNT}}
    {{header}} {{DOMAINS}} {{diff_rsp_msg}}
    ********ATTENTION********
    A payment system must be implemented before
    giving your customers access to turn on auto renew
    or to renew their active domains.
    Domain Name Renew Renewal Term *

    * (2 years only for ".uk" and 1 year for ".de", ".be" and ".eu" domains)
    opensrs-client-3.0.0/templates/manage/waiting_history.html0000644017777601777760000000075710770014202025101 0ustar nobodynogroup00000000000000
    Domain Change Requests

    Please note that we cannot control the order in which Registry will complete submitted requests.

    {{waiting_history}}
    Request ID Action Date
    Submitted
    Date
    Responded
    Status Response Text
    opensrs-client-3.0.0/templates/manage/whois_privacy_form.html0000644017777601777760000000207710770014202025564 0ustar nobodynogroup00000000000000
    WHOIS Privacy
    WHOIS Privacy will allow the registrant information to not be displayed in the public WHOIS, but will still be available in the event that an authorized request is made.
    WHOIS Privacy currently {{wp_state_cur}}
    {{wp_state_change_to}} WHOIS Privacy {{whois_privacy_radio_button}}
    {{whois_privacy_changes_menu}}

    opensrs-client-3.0.0/templates/manage/whois_rsp_info_off.html0000644017777601777760000000046010770014202025527 0ustar nobodynogroup00000000000000
    Reseller Contact
     Registration Service Provider:
    {{rsp_info}}
    opensrs-client-3.0.0/templates/manage/whois_rsp_info_on.html0000644017777601777760000000164310770014202025375 0ustar nobodynogroup00000000000000
    Reseller Contact
     Registration Service Provider:
    {{rsp_info}}

    This setting will enable/disable viewing the above information in public whois.
    Show     Hide     {{alldom}}

    opensrs-client-3.0.0/templates/reg_cert/0000755017777601777760000000000010770014215021325 5ustar nobodynogroup00000000000000opensrs-client-3.0.0/templates/reg_cert/base.html0000644017777601777760000000127310770014202023124 0ustar nobodynogroup00000000000000 <tmpl_var title>

    Logout


    opensrs-client-3.0.0/templates/reg_cert/cert_info.html0000644017777601777760000003077610770014202024174 0ustar nobodynogroup00000000000000
    Step 1: Digital Certificate Product Selection.
    Step 2: Enter Product Order Details.
    Step 3: Credit Card Information. Order Confirmation.

    Errors occurred:

    New Digital Certificate Order Form
    Product Information
    Product:
    Domain:
    Approver E-mail:
    Period:
    Organization Contact: - or -
    Organization Legal Name:
    DUNS Number:    optional
    Street Address 1:
    Street Address 2:    optional
    Street Address 3:    optional
    City:
    State/Province:
    Zip/Postal Code:
    Country:
    Phone:    (eg. +1.4165551122x1234)
    Fax:    (eg. +1.4165551122x1234)
    Certificate Admin. Contact: - or -
    First Name:
    Last Name:
    Street Address:
    City:
    State/Province:
    Zip/Postal Code:
    Country:
    Phone:    (eg. +1.4165551122x1234)
    Email:
    Certificate Billing Contact: - or -
    First Name:
    Last Name:
    Street Address:
    City:
    State/Province:
    Zip/Postal Code:
    Country:
    Phone:    (eg. +1.4165551122x1234)
    Email:
    Certificate Technical Contact: - or -
    First Name:
    Last Name:
    Street Address:
    City:
    State/Province:
    Zip/Postal Code:
    Country:
    Phone:    (eg. +1.4165551122x1234)
    Email:
    Certificate Signing Request Information
    CSR:

    CSR Generation Instructions
    Web Server:
    Special Instructions:
    By submitting this order you are agreeing to the  GeoTrust Subscriber Agreement
    opensrs-client-3.0.0/templates/reg_cert/confirm_order.html0000644017777601777760000003357010770014202025047 0ustar nobodynogroup00000000000000
    Step 1: Digital Certificate Product Selection.
    Step 2: Enter Product Order Details.
    Step 3: Credit Card Information. Order Confirmation.

    New Digital Certificate Order Form
    Product Information
    Product:
    Domain:
    Approver E-mail:
    Period:
    Organization Contact
    Organization Legal Name:
    DUNS Number:
    Street Address 1:
    Street Address 2:
    Street Address 3:
    City:
    State/Province:
    Zip/Postal Code:
    Country:
    Phone:
    Fax:
    Certificate Admin. Contact
    First Name:
    Last Name:
    Street Address:
    City:
    State/Province:
    Zip/Postal Code:
    Country:
    Phone:
    Email:
    Certificate Billing Contact
    Same as Admin. contact
    First Name:
    Last Name:
    Street Address:
    City:
    State/Province:
    Zip/Postal Code:
    Country:
    Phone:
    Email:
    Certificate Technical Contact
    Same as Admin. Contact
    Same as Billing Contact
    First Name:
    Last Name:
    Street Address:
    City:
    State/Province:
    Zip/Postal Code:
    Country:
    Phone:
    Email:
    Certificate Signing Request Information
    CSR:
    None
    Web Server:
    Special Instructions: None
    Credit Card Information
    Please ensure you are obtaining payment with the information gathered.
    This template does no credit card processing by default.
    Credit Card:
    Card Holder Name:
    Card Number:
    Expiry Date: -
      
    opensrs-client-3.0.0/templates/reg_cert/error.html0000644017777601777760000000021010770014202023331 0ustar nobodynogroup00000000000000

    Error

    The error which occurred was:
    opensrs-client-3.0.0/templates/reg_cert/login.html0000644017777601777760000000220110770014202023312 0ustar nobodynogroup00000000000000
    Digital Certificate Registration
    Username:
    Password:
    Confirm Password:
    (required for new user)
    New User     Existing User
    opensrs-client-3.0.0/templates/reg_cert/main.html0000644017777601777760000000205210770014202023132 0ustar nobodynogroup00000000000000
    Step 1: Digital Certificate Product Selection.
    Step 2: Enter Product Order Details.
    Step 3: Credit Card Information. Order Confirmation.

    New Digital Certificate Order Form
    Product:
    Domain: (applies to QuickSSL and QuickSSL Premium products only)
    opensrs-client-3.0.0/templates/reg_cert/order_placement_confirmation.txt0000644017777601777760000000030410770014202027772 0ustar nobodynogroup00000000000000To: {{mailto}} From: {{mailfrom}} Subject: Digital Certificate Order Confirmation The following order was placed through your system: Order ID: {{order_id}} Order item ID: {{order_item_id}} opensrs-client-3.0.0/templates/reg_cert/primary_contact.html0000644017777601777760000000557610770014202025422 0ustar nobodynogroup00000000000000
    Primary contact creation.

    Errors occurred:

    Primary User Contact Form
    First Name: *
    Last Name: *
    Street Address: *
    City: *
    State/Province: *
    Zip/Postal Code: *
    Country: *
    Phone:    (eg. +1.4165551122x1234) *
    Email: *
    URL:
    * - Mandatory fields
    opensrs-client-3.0.0/templates/reg_cert/renew.html0000644017777601777760000000200110770014202023320 0ustar nobodynogroup00000000000000
    Step 1: Digital Certificate Product Selection.
    Step 2: Enter Product Order Details.
    Step 3: Credit Card Information. Order Confirmation.

    Digital Certificate Renewal Form
    Product:
    Domain:
    opensrs-client-3.0.0/templates/reg_cert/result.html0000644017777601777760000000065610770014202023534 0ustar nobodynogroup00000000000000

    Registration Result

    For tracking purposes, your order number is included below.
    Please include this number in an email to if
    you have any questions about the status of your order.

    Order successfully created with ID #


    Place a new order
    opensrs-client-3.0.0/templates/reg_email/0000755017777601777760000000000010770014215021457 5ustar nobodynogroup00000000000000opensrs-client-3.0.0/templates/reg_email/base.html0000644017777601777760000000146610770014202023262 0ustar nobodynogroup00000000000000 <TMPL_VAR TITLE>





    opensrs-client-3.0.0/templates/reg_email/enter_contact_data.html0000644017777601777760000001744610770014202026176 0ustar nobodynogroup00000000000000

    Step 1: E-mail Address Availability and Selection
    Step 2: Mailbox Information and Upgrades
    Step 3: Account Holder Contact Information
    Step 4: Order Confirmation

    Account Holder Contact Information
    Retrieve information from existing records:
    E-mail Address in this Domain:   @
    First Name:
    Last Name:
    Organization Name:
    *optional*
    Existing E-mail:
    *for confirmation(optional)*
    Street Address:
    Suite:
    Address Cont'd:
    City:
    State:
    Postal Code:
    Country:
    Phone Number:
    (eg. +1.4165350123 x1610) -or-
    (416-535-0123 x1610 only for US/CA)
    Fax Number:
    *optional*
    (eg. +1.4165350123 x1610) -or-
    (416-535-0123 x1610 only for US/CA)
    E-mail Address Information
    >
    Capacity:   Total capacity per mailbox of MB
    Features:
  • Base features (POP and Webmail)
  • IMAP
  • Mailbox Name Display Name E-mail Administrator
    Yes No
    * Duplicate account names have been skipped *
    Misaddressed E-mail Setting (optional)
    Reject with Notification
    Sender will receive a message stating the delivery of their message failed. Message will be discarded.
    Reject without Notification
    Sender will not receive a message stating the delivery of their message failed. Message will be discarded.
    Catch-all
    Message will be rerouted to an existing mailbox. Type the name of the mailbox in the field below


     

    Start over with a new search...

    opensrs-client-3.0.0/templates/reg_email/enter_order_data.html0000644017777601777760000001641710770014202025653 0ustar nobodynogroup00000000000000

    Step 1: E-mail Address Availability and Selection
    Step 2: Mailbox Information and Upgrades
    Step 3: Account Holder Contact Information
    Step 4: Order Confirmation

    Create New Mailbox(es) for
    Mailbox Names
    Domain Name
    Mailbox Upgrades
    Mailbox Each mailbox purchase includes MB storage $
    Storage Upgrades Add MB (Maximum ) $
    IMAP Upgrade CHECKED > Add IMAP Access $
    Total Price Per Mailbox
    The Total Price Per Mailbox represents the monthly amount you will be billed per mailbox. For the first month of the service, you will only be charged a pro-rated amount for the remaining days in the month.
    $
    Mailbox Password
    This is the password that the Mailbox User will use to login to their mailbox. For bulk orders, all Mailboxes will be assigned this same password. Users should be encouraged to personalize their password through the WebMail interface upon first use.
    Password (4 to 20 characters)
    Re-enter password for confirmation
    Start over with a new search...
    opensrs-client-3.0.0/templates/reg_email/error.html0000644017777601777760000000022510770014202023471 0ustar nobodynogroup00000000000000

    Registration Error

    The error which occurred was:
    opensrs-client-3.0.0/templates/reg_email/lookup.html0000644017777601777760000000560710770014202023662 0ustar nobodynogroup00000000000000
    Register Your E-mail Address Now!
    E-mail Address
    (eg. me@mydomain.com)

    -- or --

    Register E-mail Addresses in Bulk...
    Mailbox Names

    Mailbox name, followed by display name.
    eg. johnsmith John Smith

    One account per line
    Domain Name @
    opensrs-client-3.0.0/templates/reg_email/lookup_results.html0000644017777601777760000000756710770014202025452 0ustar nobodynogroup00000000000000
    Step 1: E-mail Address Availability and Selection
    Step 2: Mailbox Information and Upgrades
    Step 3: Account Holder Contact Information
    Step 4: Order Confirmation

    E-mail Address Availability
    Listed below are the addresses and their availability. All available e-mail addresses are automatically selected. If there are any you do not wish to acquire, please unselect them.

    >
    E-mail Address Available? Select?
    () Yes No


    User Profile
    User Profiles provide convenient access to the e-mail boxes you manage on a given domain or across many domains. If this is the first e-mail address you are creating on this domain you have two options; 1) you can create a new user account or 2) you can use an existing user account that is attributed to previously purchased e-mail addresses on other domains. If e-mail addresses exist on this domain you will only be able to add new mailboxes through the existing User Profile.

    Username
    Password
    New user Existing user

    Start with a new search...

    opensrs-client-3.0.0/templates/reg_email/order_confirmation.html0000644017777601777760000001276410770014202026236 0ustar nobodynogroup00000000000000

    Step 1: E-mail Address Availability and Selection
    Step 2: Mailbox Information and Upgrades
    Step 3: Account Holder Contact Information
    Step 4: Order Confirmation

    E-mail Order Confirmation
    Domain Name
    Contact Data
    First Name
    Last Name
    Organization  
    Address


    ,

    Phone
    Fax  
    Alternate E-mail  
    E-mail Address Information
    >
    Capacity:   Total capacity per mailbox of MB
    Features:
  • Base features (POP and Webmail)
  • IMAP
  • Mailbox Name Display Name E-mail Administrator
      YesNo
    Payment Information
    Method of Payment
    Card Number     CVV: *
    Expiration Date  
    Amount $

    *CVV is a 3 or 4 digit value at the end of your account number printed on the back of your credit card.

    Start over with a new search...

    opensrs-client-3.0.0/templates/reg_email/order_notification.txt0000644017777601777760000000217010770014202026075 0ustar nobodynogroup00000000000000To: {{mailto}} From: {{mailfrom}} Subject: Email Registration Request(s) in Domain {{email_domain}} {{first_name}} {{last_name}} submitted email registration(s) in the domain {{email_domain}}. ---------------------------------------------------------------------- Order Information: ---------------------------------------------------------------------- Order ID: {{order_id}} Domain: {{email_domain}} Order item IDs: {{ids}} Account Names: {{account_names}} Affiliate ID: {{affiliate_id}} Features: {{feature_set_text}} Capacity Upgrades: {{capacity_upgrade_text}} ---------------------------------------------------------------------- Owner information: ---------------------------------------------------------------------- First Name: {{first_name}} Last Name: {{last_name}} Org. Name: {{org_name}} Address1: {{address1}} Address2: {{address2}} Address3: {{address3}} City: {{city}} State: {{state}} Country: {{country}} Postal Code: {{postal_code}} Phone: {{phone}} Fax: {{fax}} Email: {{owner_email}} opensrs-client-3.0.0/templates/reg_email/register_results.html0000644017777601777760000000521210770014202025746 0ustar nobodynogroup00000000000000
    E-mail Registration Results
    Listed below are the individual results of your order for e-mail addresses: . Please note that each mailbox ordered has a unique order item ID. Please refer to the order ID when making any inquiries about this order.

    Order ID: >
    E-mail Address Message Item ID
    n/a

    The account(s) can be accessed through your favorite e-mail client or through the WebMail interface at http://mail.. The login username is the email account name (everything before the '@'). Instructions on how to set up your e-mail client can be found at http://help.webmaillogin.com. Note: you may want to reset your password prior to first use. This can be done through the WebMail interface.

    Your new e-mail addresses should provide you many happy hours of communicating however, you may have to make some technical adjustments to your DNS information before your e-mail address will be operational. Detailed instructions can be found at http://help.webmaillogin.com. If you don't know what DNS is or are uncertain about the implications of making DNS changes, please make certain you read these instructions carefully or contact your DNS or Domain Registration Service provider.

    Enjoy your account(s) and please e-mail responsibly.

    Start over with a new search... opensrs-client-3.0.0/templates/reg_email/thankyou.html.txt0000644017777601777760000000515610770014202025030 0ustar nobodynogroup00000000000000To: {{mailto}} From: {{mailfrom}} Subject: Email Registration Request(s) in Domain {{email_domain}} Content-Type: text/html; charset=us-ascii Thank you for your order, {{first_name}}!

    Your order ID is: {{order_id}}

    Congratulations on the registration of your new email address(es): {{accounts_and_ids}}
    Account and Password Information
    --------------------------------
    The account(s) can be accessed through your favorite e-mail client (e.g., Outlook Express, Eudora, etc.) via POP or IMAP (i.e., if you purchased IMAP) or through the WebMail interface at http://mail.{{email_domain}}. The user login name is the mailbox name (e.g., yourname@domainname.com) and the password you've chosen for the account(s) is {{password}}. As a note, you may wish to reset your password through the WebMail interface under the Password Management section or if you're an email administrator, you can modify the passwords in the Email Administrator, which can be found at https://mailadmin.webmaillogin.com/. To login to the Email Administrator, use your mailbox name (e.g., yourname@domainname.com) and password.

    Email Help
    ----------
    Full user help is provided for you at http://help.webmaillogin.com. Here you'll find information regarding:

    - Quick facts and set-up
    - How to access email using WebMail or via POP or IMAP using your email client
    - Frequently asked questions
    - WebMail help
    - Technical administrator set-up instructions

    Technical Set-Up
    ----------------
    If you are not responsible for technical set-up of email on your domain, please disregard this section. However if you are, you may need to make some technical adjustments to your DNS information before your mailboxes will be operational. If you are the technical administrator on your domain, visit http://help.webmaillogin.com to view the technical set-up that is required before mailboxes on the domain will be accessible.

    If you don't know what DNS is or are uncertain about the implications of making DNS changes, please make certain you read these instructions carefully or contact your DNS or Domain Registration Service provider.

    Email Administrators
    --------------------
    If you are an email administrator, you can use the Email Administrator to:
    - Manage passwords
    - Set catch-alls and misaddressed mail settings for the domain
    - Set aliases
    - Set auto-reply messages
    - View mailbox details such as storage space used

    To access the Email Administrator, go to:
    https://mailadmin.webmaillogin.com/

    Enjoy your account(s) and please e-mail responsibly! opensrs-client-3.0.0/templates/reg_email/thankyou.txt0000644017777601777760000000467610770014202024073 0ustar nobodynogroup00000000000000To: {{mailto}} From: {{mailfrom}} Subject: Email Registration Request(s) in Domain {{email_domain}} Thank you for your order, {{first_name}}! Your order ID is: {{order_id}} Congratulations on the registration of your new email address(es): {{accounts_and_ids}} Account and Password Information -------------------------------- The account(s) can be accessed through your favorite e-mail client (e.g., Outlook Express, Eudora, etc.) via POP or IMAP (i.e., if you purchased IMAP) or through the WebMail interface at http://mail.{{email_domain}}. The user login name is the mailbox name (e.g., yourname@domainname.com) and the password you've chosen for the account(s) is {{password}}. As a note, you may wish to reset your password through the WebMail interface under the Password Management section or if you're an email administrator, you can modify the passwords in the Email Administrator, which can be found at https://mailadmin.webmaillogin.com/. To login to the Email Administrator, use your mailbox name (e.g., yourname@domainname.com) and password. Email Help ---------- Full user help is provided for you at http://help.webmaillogin.com. Here you'll find information regarding: - Quick facts and set-up - How to access email using WebMail or via POP or IMAP using your email client - Frequently asked questions - WebMail help - Technical administrator set-up instructions Technical Set-Up ---------------- If you are not responsible for technical set-up of email on your domain, please disregard this section. However if you are, you may need to make some technical adjustments to your DNS information before your mailboxes will be operational. If you are the technical administrator on your domain, visit http://help.webmaillogin.com to view the technical set-up that is required before mailboxes on the domain will be accessible. If you don't know what DNS is or are uncertain about the implications of making DNS changes, please make certain you read these instructions carefully or contact your DNS or Domain Registration Service provider. Email Administrators -------------------- If you are an email administrator, you can use the Email Administrator to: - Manage passwords - Set catch-alls and misaddressed mail settings for the domain - Set aliases - Set auto-reply messages - View mailbox details such as storage space used To access the Email Administrator, go to: https://mailadmin.webmaillogin.com/ Enjoy your account(s) and please e-mail responsibly! opensrs-client-3.0.0/templates/reg_system/0000755017777601777760000000000010770014215021714 5ustar nobodynogroup00000000000000opensrs-client-3.0.0/templates/reg_system/avail.html0000644017777601777760000000375510770014202023704 0ustar nobodynogroup00000000000000

    {{domain}} is available!

    {{matches}}
    {{notes}}

    {{post_lookup}} Proceed to the order form by clicking on the button below
    or skip to the bottom of the page to check on another name.

    Enter Another Domain Name to Search For:
    [example: yourdomain.com]

    Domain Name:



    opensrs-client-3.0.0/templates/reg_system/base.html0000644017777601777760000000051010770014202023504 0ustar nobodynogroup00000000000000 Registration Management System

    {{CONTENT}} opensrs-client-3.0.0/templates/reg_system/bulk_order.html0000644017777601777760000002500110770014202024724 0ustar nobodynogroup00000000000000
    {{heading}} - Order Form
    Congratulations on your decision to move forward with your business and register your own domain name. Upon completing the form below, you will be brought to a second page where you may verify that all of the information you have provided is correct. After you approve the information, simply click the "Order It!" button and you're done. Please note that Bulk registration of IDN (Internationalized Domain Name - Non-ASCII) domain names cannot be processed using this interface. Any non ASCII based submissions will return an error.
    {{syntax_error_msg}}
    {{CC_FIELDS}}
    {{AUTO_RENEW}}
    Domain Information
    Domains:
    Registration Period: (2 years for .uk, max 5 years for .cn)
    Profile: {{reg_profile}}
    {{CUSTOM_TECH_CONTACT}} {{CUSTOM_NAMESERVERS}}
    Registration Type: {{reg_type_text}}
    Owner Contact Information
    First Name:
    Last Name:
    Organization Name:
    Street Address:
    *optional* (eg: Suite #245):
    *optional* Address 3:
    City:
    State:
    Country:
    Postal Code:
    Phone Number:
    (eg. +1.4165551122x1234 for .info/.biz/.us/.name/.cn/.org/.asia domains)
    *optional* Fax Number:
    (eg. +1.4165551122x1234 for .info/.biz/.us/.name/.cn/.org/.asia domains)
    Email:
    Must be currently valid address
    Admin Contact Information
    Same as Owner Information
    First Name:
    Last Name:
    Organization Name:
    Street Address:
    *optional* (eg: Suite #245):
    *optional* Address 3:
    City:
    State:
    Country:
    Postal Code:
    Phone Number:
    (eg. +1.4165551122x1234 for .info/.biz/.us/.name/.cn/.org/.asia domains)
    *optional* Fax Number:
    (eg. +1.4165551122x1234 for .info/.biz/.us/.name/.cn/.org/.asia domains)
    Email:
    Must be currently valid address
    Billing Contact Information
    Same as Owner Information
    Same as Admin Information
    If both checkboxes are selected, 'Owner Information' checkbox will be default.
    First Name:
    Last Name:
    Organization Name:
    Street Address:
    *optional* (eg: Suite #245):
    *optional* Address 3:
    City:
    State:
    Country:
    Postal Code:
    Phone Number:
    (eg. +1.4165551122x1234 for .info/.biz/.us/.name/.cn/.org/.asia domains)
    *optional* Fax Number:
    (eg. +1.4165551122x1234 for .info/.biz/.us/.name/.cn/.org/.asia domains)
    Email:
    Must be currently valid address


    * - Phone and fax formats are as follows (extention is optional):
        +{country_dialing_code}.{phone_number}[x{extension}]
        eg. "+44.02055511928"
    
    
    
    
    
    
    
    
    
    
    
    opensrs-client-3.0.0/templates/reg_system/bulk_order_asia.html0000644017777601777760000004013110770014202025722 0ustar nobodynogroup00000000000000
    {{heading}} - Order Form
    Congratulations on your decision to move forward with your business and register your own domain name. Upon completing the form below, you will be brought to a second page where you may verify that all of the information you have provided is correct. After you approve the information, simply click the "Order It!" button and you're done.
    {{syntax_error_msg}}
    {{CC_FIELDS}}
    {{AUTO_RENEW}}
    Domain Information
    Domains:
    Registration Period: (min 2 years for .us)
    Profile: {{reg_profile}}

    {{CUSTOM_TECH_CONTACT}} {{CUSTOM_NAMESERVERS}}
    Registration Type: {{reg_type_text}}
    .ASIA CED Contact Information
    Contact Type

    Charter Eligibility is the basic requirement to register a .ASIA domain name, at least one of the domain contacts (admin, billing, owner/registrant, tech) must be a legal entity in the DotAsia Community.
    Country/Locality  [-]
    City
    *optional*
    State/Province
    *optional*
    Legal Entity Type
    Identification Type
         Type:
    Identification Number
    Owner Contact Information
    First Name:
    Last Name:
    Organization Name:
    Street Address:
    *optional* (eg: Suite #245):
    *optional* Address 3:
    City:
    State:
    Country:
    Postal Code:
    Phone Number:
    (eg. +1.4165551122x333)*
    *optional* Fax Number:
    (eg. +1.4165551122)*
    Email:
    Must be currently valid address
    Admin Contact Information
    Same as Owner Information
    First Name:
    Last Name:
    Organization Name:
    Street Address:
    *optional* (eg: Suite #245):
    *optional* Address 3:
    City:
    State:
    Country:
    Postal Code:
    Phone Number:
    (eg. +1.4165551122x333)*
    *optional* Fax Number:
    (eg. +1.4165551122)*
    Email:
    Must be currently valid address
    Billing Contact Information
    Same as Owner Information
    Same as Admin Information
    If both checkboxes are selected, 'Owner Information' checkbox will be default.
    First Name:
    Last Name:
    Organization Name:
    Street Address:
    *optional* (eg: Suite #245):
    *optional* Address 3:
    City:
    State:
    Country:
    Postal Code:
    Phone Number:
    (eg. +1.4165551122x333)*
    *optional* Fax Number:
    (eg. +1.4165551122)*
    Email:
    Must be currently valid address


    * - Phone and fax formats are as follows (extention is optional):
        +{country_dialing_code}.{phone_number}[x{extension}]
        eg. "+44.02055511928"
    
    
    
    
    
    
    
    
    
    
    
    opensrs-client-3.0.0/templates/reg_system/bulk_order_ca.html0000644017777601777760000001315510770014202025376 0ustar nobodynogroup00000000000000
    .CA {{heading}} - Order Form
    Congratulations on your decision to move forward with your business and register your own .CA domain name. Upon completing the form below, you will be brought to a second page where you may verify that all of the information you have provided is correct. After you approve the information, simply click the "Order It!" button and you're done.

    Please note that the domains in the batch below will be added to ONE Registrant Profile at CIRA. The names will also be in the same profile for contact and DNS management.

    {{syntax_error_msg}}
    {{CC_FIELDS}}
    Domain Information
    Domains:
    Registration Period:
    Profile: The names above will be added to the CIRA Registrant Profile that contains the name {{reg_domain}} 
    Owner name {{owner_org_name}} 
    Owner Description (max 2000 characters) {{domain_description}}  
    Are these domains registered trade-marks? No  Yes
    Language Preference:
    {{CUSTOM_TECH_CONTACT}} {{CUSTOM_NAMESERVERS}}
    Registration Type: {{reg_type_text}}
    Admin Contact Information
    First Name: {{admin_first_name}} 
    Last Name: {{admin_last_name}} 
    Organization Name: {{admin_org_name}} 
    Street Address: {{admin_address1}} 
    City: {{admin_city}} 
    State: {{admin_state}} 
    Country: {{admin_country}} 
    Postal Code: {{admin_postal_code}} 
    Phone Number: {{admin_phone}} 
    Fax Number: {{admin_fax}} 
    Email: {{admin_email}} 


    opensrs-client-3.0.0/templates/reg_system/bulk_order_us.html0000644017777601777760000003051710770014202025443 0ustar nobodynogroup00000000000000
    {{heading}} - Order Form
    Congratulations on your decision to move forward with your business and register your own domain name. Upon completing the form below, you will be brought to a second page where you may verify that all of the information you have provided is correct. After you approve the information, simply click the "Order It!" button and you're done.
    {{syntax_error_msg}}
    {{CC_FIELDS}}
    {{AUTO_RENEW}}
    Domain Information
    Domains:
    Registration Period: (min 2 years for .us)
    Profile: {{reg_profile}}
    {{CUSTOM_TECH_CONTACT}} {{CUSTOM_NAMESERVERS}}
    Registration Type: {{reg_type_text}}
    .US Nexus Information
    Domain Name Application Purpose
    Nexus Category of Applicant (please choose one) Category 1 - A natural person:
    Who is a United States citizen
    Who is a permanent resident of the United States of America or any of its possessions or territories

    Category 2 - U.S. Corporation
    U.S. organization incorporated within one of the 50 states of a U.S. territory

    Category 3 - Bona Fide U.S. Presence
    Regularly engages in lawful activities (sales of good or services or other business, commercial or non-commercial, including not-for-profit relations in the United States).
    Entity has an office or other facility in the U.S.
    Country of Citizenship: (required for Category 3)  
    Owner Contact Information
    First Name:
    Last Name:
    Organization Name:
    Street Address:
    *optional* (eg: Suite #245):
    *optional* Address 3:
    City:
    State:
    Country:
    Postal Code:
    Phone Number:
    (eg. +1.4165551122x333)*
    *optional* Fax Number:
    (eg. +1.4165551122)*
    Email:
    Must be currently valid address
    Admin Contact Information
    Same as Owner Information
    First Name:
    Last Name:
    Organization Name:
    Street Address:
    *optional* (eg: Suite #245):
    *optional* Address 3:
    City:
    State:
    Country:
    Postal Code:
    Phone Number:
    (eg. +1.4165551122x333)*
    *optional* Fax Number:
    (eg. +1.4165551122)*
    Email:
    Must be currently valid address
    Billing Contact Information
    Same as Owner Information
    Same as Admin Information
    If both checkboxes are selected, 'Owner Information' checkbox will be default.
    First Name:
    Last Name:
    Organization Name:
    Street Address:
    *optional* (eg: Suite #245):
    *optional* Address 3:
    City:
    State:
    Country:
    Postal Code:
    Phone Number:
    (eg. +1.4165551122x333)*
    *optional* Fax Number:
    (eg. +1.4165551122)*
    Email:
    Must be currently valid address


    * - Phone and fax formats are as follows (extention is optional):
        +{country_dialing_code}.{phone_number}[x{extension}]
        eg. "+44.02055511928"
    
    
    
    
    
    
    
    
    
    
    
    opensrs-client-3.0.0/templates/reg_system/bulk_transfer.html0000644017777601777760000002432010770014202025440 0ustar nobodynogroup00000000000000
    {{heading}} - Order Form
    Thank you for deciding to transfer your domains to Tucows. Upon completing the form below, you will be brought to a second page where you may verify that all of the information you have provided is correct. After you approve the information, simply click the "Order It!" button and you're done.
    {{syntax_error_msg}}
    {{CC_FIELDS}}
    {{AUTO_RENEW}}
    Domain Information
    Domains:
    Registration Period:
    Profile: {{reg_profile}}
    {{CUSTOM_TECH_CONTACT}} {{CUSTOM_NAMESERVERS}}
    Registration Type: {{reg_type_text}}
    Owner Contact Information
    First Name:
    Last Name:
    Organization Name:
    Street Address:
    *optional* (eg: Suite #245):
    *optional* Address 3:
    City:
    State:
    Country:
    Postal Code:
    Phone Number:
    (eg. +1.4165551122x1234 for .info/.biz/.us/.name/.cn/.org/.asia domains)
    *optional* Fax Number:
    (eg. +1.4165551122x1234 for .info/.biz/.us/.name/.cn/.org/.asia domains)
    Email:
    Must be currently valid address
    Admin Contact Information
    Same as Owner Information
    First Name:
    Last Name:
    Organization Name:
    Street Address:
    *optional* (eg: Suite #245):
    *optional* Address 3:
    City:
    State:
    Country:
    Postal Code:
    Phone Number:
    (eg. +1.4165551122x1234 for .info/.biz/.us/.name/.cn/.org/.asia domains)
    *optional* Fax Number:
    (eg. +1.4165551122x1234 for .info/.biz/.us/.name/.cn/.org/.asia domains)
    Email:
    Must be currently valid address
    Billing Contact Information
    Same as Owner Information
    Same as Admin Information
    If both checkboxes are selected, 'Owner Information' checkbox will be default.
    First Name:
    Last Name:
    Organization Name:
    Street Address:
    *optional* (eg: Suite #245):
    *optional* Address 3:
    City:
    State:
    Country:
    Postal Code:
    Phone Number:
    (eg. +1.4165551122x1234 for .info/.biz/.us/.name/.cn/.org/.asia domains)
    *optional* Fax Number:
    (eg. +1.4165551122x1234 for .info/.biz/.us/.name/.cn/.org/.asia domains)
    Email:
    Must be currently valid address


    * - Phone and fax formats are as follows (extention is optional):
        +{country_dialing_code}.{phone_number}[x{extension}]
        eg. "+44.02055511928"
    
    
    
    
    
    
    
    
    
    
    
    opensrs-client-3.0.0/templates/reg_system/bulk_transfer_message.txt0000644017777601777760000000313510770014202027020 0ustar nobodynogroup00000000000000To: {{mailto}} From: {{mailfrom}} Subject: Batch Transfer Request # {{bulk_transfer_id}} {{owner_email}} submitted Batch Transfer request # {{bulk_transfer_id}} ---------------------------------------------------------------------- Domain Information: ---------------------------------------------------------------------- {{order_ids}} {{order_errors}} ---------------------------------------------------------------------- Order Information: ---------------------------------------------------------------------- Affiliate ID: {{affiliate_id}} First Name: {{owner_first_name}} Last Name: {{owner_last_name}} Org. Name: {{owner_org_name}} Address1: {{owner_address1}} Address2: {{owner_address2}} Address3: {{owner_address3}} City: {{owner_city}} State: {{owner_state}} Country: {{owner_country}} Postal Code: {{owner_postal_code}} Phone: {{owner_phone}} Fax: {{owner_fax}} Email: {{owner_email}} ---------------------------------------------------------------------- Billing Information: ---------------------------------------------------------------------- First Name: {{billing_first_name}} Last Name: {{billing_last_name}} Org. Name: {{billing_org_name}} Address1: {{billing_address1}} Address2: {{billing_address2}} Address3: {{billing_address3}} City: {{billing_city}} State: {{billing_state}} Country: {{billing_country}} Postal Code: {{billing_postal_code}} Phone: {{billing_phone}} Fax: {{billing_fax}} Email: {{billing_email}} opensrs-client-3.0.0/templates/reg_system/bulk_transfer_thankyou.html0000644017777601777760000000113110770014202027355 0ustar nobodynogroup00000000000000
    Registration Results

    For tracking purposes, your batch transfer order is listed below. Also included below are registration order numbers for the specific domains included in your batch transfer request. Please include these numbers and the name of your domains in an email to {{partner_email}} if you have any questions about the status of your registration.



    {{status}}

    Search for another domain
    Home Page
    opensrs-client-3.0.0/templates/reg_system/bulk_transfer_thankyou.txt0000644017777601777760000000064310770014202027237 0ustar nobodynogroup00000000000000To: {{mailto}} From: {{mailfrom}} Subject: Batch Transfer Request Received Thank you for your order {{owner_first_name}}! Your Batch Transfer ID is {{bulk_transfer_id}}. Please keep this for future reference. We will be processing your order shortly. Also listed below for your convenience are specific order numbers assigned to the domains you requested a transfer for. ---------------------------- {{order_ids}} opensrs-client-3.0.0/templates/reg_system/cc_fields.html0000644017777601777760000000271210770014202024513 0ustar nobodynogroup00000000000000
    Payment Information
    Please ensure you are obtaining payment with the information gathered. This template does no credit card processing by default.
    Method of Payment: Expiration Date
    Card Number:  
    opensrs-client-3.0.0/templates/reg_system/cert_request.html0000644017777601777760000000133410770014202025304 0ustar nobodynogroup00000000000000

    ...or...

    Purchase a digital certificate:

    opensrs-client-3.0.0/templates/reg_system/error.html0000644017777601777760000000021610770014202023726 0ustar nobodynogroup00000000000000

    Registration Error

    The error which occurred was:
    {{ERROR}}
    opensrs-client-3.0.0/templates/reg_system/main_menu.html0000644017777601777760000000477610770014202024564 0ustar nobodynogroup00000000000000

    Register Your Domain Today!

    Enter Domain Name to Search For:
    [example: yourdomain.com]

    Domain Name:



    ...or...

    Move Your Domain to Our Servers:
    [example: yourdomain.com]

    Domain Name:

    {{CERT_FORM}} opensrs-client-3.0.0/templates/reg_system/message.txt0000644017777601777760000000476610770014202024112 0ustar nobodynogroup00000000000000To: {{mailto}} From: {{mailfrom}} Subject: Registration Request for {{domain}} {{owner_email}} submitted a registration for {{domain}}. NOTE: if you have registered a IDN domain the above domain name will not appear in its native format. It will instead appear in a punycode format. RESELLERS: insert the path to your IDN converter (Punycode.cgi) to allow customers to verify their domain names. ---------------------------------------------------------------------- Order Information: ---------------------------------------------------------------------- Order #: {{id}} Reg Type: {{reg_type}} Domain: {{domain}} Reg Period: {{period_text}} Affiliate ID: {{affiliate_id}} ---------------------------------------------------------------------- Owner information: ---------------------------------------------------------------------- First Name: {{owner_first_name}} Last Name: {{owner_last_name}} Org. Name: {{owner_org_name}} Address1: {{owner_address1}} Address2: {{owner_address2}} Address3: {{owner_address3}} City: {{owner_city}} State: {{owner_state}} Country: {{owner_country}} Postal Code: {{owner_postal_code}} Phone: {{owner_phone}} Fax: {{owner_fax}} Email: {{owner_email}} ---------------------------------------------------------------------- Admin information: ---------------------------------------------------------------------- First Name: {{admin_first_name}} Last Name: {{admin_last_name}} Org. Name: {{admin_org_name}} Address1: {{admin_address1}} Address2: {{admin_address2}} Address3: {{admin_address3}} City: {{admin_city}} State: {{admin_state}} Country: {{admin_country}} Postal Code: {{admin_postal_code}} Phone: {{admin_phone}} Fax: {{admin_fax}} Email: {{admin_email}} ---------------------------------------------------------------------- Billing Information: ---------------------------------------------------------------------- First Name: {{billing_first_name}} Last Name: {{billing_last_name}} Org. Name: {{billing_org_name}} Address1: {{billing_address1}} Address2: {{billing_address2}} Address3: {{billing_address3}} City: {{billing_city}} State: {{billing_state}} Country: {{billing_country}} Postal Code: {{billing_postal_code}} Phone: {{billing_phone}} Fax: {{billing_fax}} Email: {{billing_email}} opensrs-client-3.0.0/templates/reg_system/order.html0000644017777601777760000002415210770014202023715 0ustar nobodynogroup00000000000000
    Domain {{reg_text}} - Order Form
    Congratulations on your decision to move forward with your business and register your own domain name. Upon completing the form below, you will be brought to a second page where you may verify that all of the information you have provided is correct. After you approve the information, simply click the "Order It!" button and you're done.
    {{syntax_error_msg}}


    {{CC_FIELDS}}
    {{AUTO_RENEW}} {{WHOIS_PRIVACY}} {{LOCK_DOMAIN}} {{LANGUAGE_LIST}}
    Domain Information
    Domains Desired: {{domains}}
    Registration Period: {{reg_period_hints}}
    Profile: {{reg_profile}}
    {{CUSTOM_TECH_CONTACT}} {{CUSTOM_NAMESERVERS}}
    Registration Type: {{reg_type_text}}
    Owner Contact Information
    First Name:
    Last Name:
    Organization Name:
    Street Address:
    *optional* (eg: Suite #245):
    *optional* Address 3:
    City:
    State:
    Country:
    Postal Code:
    Phone Number:
    (eg. +1.4165551122x1234 for .info/.biz/.us/.name/.cn/.org/.asia domains)
    *optional* Fax Number:
    (eg. +1.4165551122x1234 for .info/.biz/.us/.name/.cn/.org/.asia domains)
    Email:
    Must be currently valid address
    Admin Contact Information
    Same as Owner Information
    First Name:
    Last Name:
    Organization Name:
    Street Address:
    *optional* (eg: Suite #245):
    *optional* Address 3:
    City:
    State:
    Country:
    Postal Code:
    Phone Number:
    (eg. +1.4165551122x1234 for .info/.biz/.us/.name/.cn/.org/.asia domains)
    *optional* Fax Number:
    (eg. +1.4165551122x1234 for .info/.biz/.us/.name/.cn/.org/.asia domains)
    Email:
    Must be currently valid address
    Billing Contact Information
    Same as Owner Information
    Same as Admin Information
    If both checkboxes are selected, 'Owner Information' checkbox will be default.
    First Name:
    Last Name:
    Organization Name:
    Street Address:
    *optional* (eg: Suite #245):
    *optional* Address 3:
    City:
    State:
    Country:
    Postal Code:
    Phone Number:
    (eg. +1.4165551122x1234 for .info/.biz/.us/.name/.cn/.org/.asia domains)
    *optional* Fax Number:
    (eg. +1.4165551122x1234 for .info/.biz/.us/.name/.cn/.org/.asia domains)
    Email:
    Must be currently valid address


    * - Phone and fax formats are as follows (extention is optional):
        +{country_dialing_code}.{phone_number}[x{extension}]
        eg. "+44.02055511928"
    
    
    
    {{domain_string}}
    
    
    
    
    
    
    
    opensrs-client-3.0.0/templates/reg_system/order_asia.html0000644017777601777760000003755110770014202024721 0ustar nobodynogroup00000000000000
    Domain {{reg_text}} - Order Form
    Congratulations on your decision to move forward with your business and register your own domain name. Upon completing the form below, you will be brought to a second page where you may verify that all of the information you have provided is correct. After you approve the information, simply click the "Order It!" button and you're done.
    {{syntax_error_msg}}
    {{CC_FIELDS}}
    {{AUTO_RENEW}} {{LOCK_DOMAIN}}
    Domain Information
    Domains Desired: {{domains}}
    Registration Period: {{reg_period_hints}}
    Profile: {{reg_profile}}

    {{CUSTOM_TECH_CONTACT}} {{CUSTOM_NAMESERVERS}}
    Registration Type: {{reg_type_text}}
    .ASIA CED Contact Information
    Contact Type

    Charter Eligibility is the basic requirement to register a .ASIA domain name, at least one of the domain contacts (admin, billing, owner/registrant, tech) must be a legal entity in the DotAsia Community.
    Country/Locality  [-]
    City
    *optional*
    State/Province
    *optional*
    Legal Entity Type
    Identification Type
         Type:
    Identification Number
    Owner Contact Information
    First Name:
    Last Name:
    Organization Name:
    Street Address:
    *optional* (eg: Suite #245):
    *optional* Address 3:
    City:
    State:
    Country:
    Postal Code:
    Phone Number:
    (eg. +1.4165551122x333)*
    *optional* Fax Number:
    (eg. +1.4165551122)*
    Email:
    Must be currently valid address
    Admin Contact Information
    Same as Owner Information
    First Name:
    Last Name:
    Organization Name:
    Street Address:
    *optional* (eg: Suite #245):
    *optional* Address 3:
    City:
    State:
    Country:
    Postal Code:
    Phone Number:
    (eg. +1.4165551122x333)*
    *optional* Fax Number:
    (eg. +1.4165551122)*
    Email:
    Must be currently valid address
    Billing Contact Information
    Same as Owner Information
    Same as Admin Information
    If both checkboxes are selected, 'Owner Information' checkbox will be default.
    First Name:
    Last Name:
    Organization Name:
    Street Address:
    *optional* (eg: Suite #245):
    *optional* Address 3:
    City:
    State:
    Country:
    Postal Code:
    Phone Number:
    (eg. +1.4165551122x333)*
    *optional* Fax Number:
    (eg. +1.4165551122)*
    Email:
    Must be currently valid address


    * - Phone and fax formats are as follows (extention is optional):
        +{country_dialing_code}.{phone_number}[x{extension}]
        eg. "+44.02055511928"
    
    
    
    {{domain_string}}
    
    
    
    
    
    
    
    opensrs-client-3.0.0/templates/reg_system/order_be.html0000644017777601777760000001204710770014202024363 0ustar nobodynogroup00000000000000
    Domain {{reg_text}} - Order Form
    Congratulations on your decision to move forward with your business and register your own domain name. Upon completing the form below, you will be brought to a second page where you may verify that all of the information you have provided is correct. After you approve the information, simply click the "Order It!" button and you're done.
    {{syntax_error_msg}}


    {{AUTO_RENEW}} {{LOCK_DOMAIN}} {{LANGUAGE_LIST}}
    Domain Information
    Domains Desired: {{domains}}
    Registration Period:
    Profile: {{reg_profile}}
    {{CUSTOM_TECH_CONTACT}} {{CUSTOM_NAMESERVERS}}
    Registration Type: {{reg_type_text}}
    Owner Contact Information
    First Name:
    Last Name:
    Organization Name:
    Street Address:
    *optional* (eg: Suite #245):
    *optional* Address 3:
    City:
    State:
    Country:
    Postal Code:
    Phone Number:
    (eg. +44.1234123412)
    *optional* Fax Number:
    (eg. +44.1234123412)
    Email:
    Must be currently valid address
    *optional* VAT Registration Number:
    Language of Correspondence:


    * - Phone and fax formats are as follows (extention is optional):
        +{country_dialing_code}.{phone_number}[x{extension}]
        eg. "+44.02055511928"
    
    
    
    {{domain_string}}
    
    
    
    
    
    
    
    opensrs-client-3.0.0/templates/reg_system/order_ca.html0000644017777601777760000001370310770014202024360 0ustar nobodynogroup00000000000000
    .CA Domain {{reg_text}} - Order Form
    Congratulations on your decision to move forward with your business and register your own .CA domain name. Upon completing the form below, you will be brought to a second page where you may verify that all of the information you have provided is correct. After you approve the information, simply click the "Order It!" button and you're done.

    Please note that by CIRA request, you must have a presence in Canada in order to qualify for a .CA domain. This means that at least one of your contacts must be located in Canada.

    {{syntax_error_msg}}
    {{CC_FIELDS}}
    Domain Information
    Domains Desired: {{domains}}
    Registration Period:
    Profile: {{reg_profile}}
    NOTE: If an existing .ca domain, username and password are included in this section, then OpenSRS will ignore registration information included in this form, and the name will simply be added to the existing Registrant Profile at CIRA.
    Organization Name:
    Owner Description
    (max 2000 characters)
    Is this domain a registered trade-mark? No  Yes
    Language Preference:
    Legal Type:
    Become CIRA Member: Yes No
    {{CUSTOM_TECH_CONTACT}} {{CUSTOM_NAMESERVERS}}
    Registration Type: {{reg_type_text}}
    Admin Information
    First Name:
    Last Name:
    Organization Name:
    Street Address:
    City:
    Province: (If in Canada, please use AB, ON, QC, etc)
    Country:
    Postal Code:
    Phone Number:
    (eg. 416-555-1122 x333)
    *optional* Fax Number:
    (eg. 416-555-1122)
    Email:
    Must be currently valid address

    {{domain_string}}
    opensrs-client-3.0.0/templates/reg_system/order_de.html0000644017777601777760000002316610770014202024371 0ustar nobodynogroup00000000000000
    Domain {{reg_text}} - Order Form
    Congratulations on your decision to move forward with your business and register your own domain name. Upon completing the form below, you will be brought to a second page where you may verify that all of the information you have provided is correct. After you approve the information, simply click the "Order It!" button and you're done.
    {{CC_FIELDS}}
    {{LANGUAGE_LIST}} {{AUTO_RENEW}} {{LOCK_DOMAIN}}
    Domain Information
    Domains Desired: {{domains}}
    Registration Period:
    Profile: {{reg_profile}}
    {{CUSTOM_TECH_CONTACT}} {{CUSTOM_NAMESERVERS}}
    Registration Type: {{reg_type_text}}
    Owner Contact Information
    First Name:
    Last Name:
    Organization Name:
    Street Address:
    *optional* (eg: Suite #245):
    *optional* Address 3:
    City:
    State:
    Country:
    Postal Code:
    Phone Number:
    (eg. +1.4165551122x333)*
    *optional* Fax Number:
    (eg. +1.4165551122)*
    Email:
    Must be currently valid address
    Admin Contact Information
    Same as Owner Information
    First Name:
    Last Name:
    Organization Name:
    Street Address:
    *optional* (eg: Suite #245):
    *optional* Address 3:
    City:
    State:
    Country:
    Admin contact must reside in Germany
    Postal Code:
    Phone Number:
    (eg. +1.4165551122x333)*
    *optional* Fax Number:
    (eg. +1.4165551122)*
    Email:
    Must be currently valid address
    Zone Contact Information
    Same as Owner Information
    Same as Admin Information
    First Name:
    Last Name:
    Organization Name:
    Street Address:
    *optional* (eg: Suite #245):
    *optional* Address 3:
    City:
    State:
    Country:
    Postal Code:
    Phone Number:
    (eg. +1.4165551122x333)*
    Fax Number:
    (eg. +1.4165551122)*
    Email:
    Must be currently valid address


    * - Phone and fax formats are as follows (extention is optional):
        +{country_dialing_code}.{phone_number}[x{extension}]
        eg. "+44.02055511928"
    
    
    
    {{domain_string}}
    
    
    
    
    
    
    
    opensrs-client-3.0.0/templates/reg_system/order_eu.html0000644017777601777760000001207110770014202024403 0ustar nobodynogroup00000000000000
    Domain {{reg_text}} - Order Form
    Congratulations on your decision to move forward with your business and register your own domain name. Upon completing the form below, you will be brought to a second page where you may verify that all of the information you have provided is correct. After you approve the information, simply click the "Order It!" button and you're done.
    {{syntax_error_msg}}


    {{CC_FIELDS}}
    {{AUTO_RENEW}} {{LOCK_DOMAIN}} {{LANGUAGE_LIST}}
    Domain Information
    Domains Desired: {{domains}}
    Registration Period:
    Profile: {{reg_profile}}
    {{CUSTOM_TECH_CONTACT}} {{CUSTOM_NAMESERVERS}}
    Registration Type: {{reg_type_text}}
    Owner Contact Information
    First Name:
    Last Name:
    Organization Name:
    Street Address:
    *optional* (eg: Suite #245):
    *optional* Address 3:
    City:
    State:
    Country:
    Postal Code:
    Phone Number:
    (eg +44.1234123412)
    *optional* Fax Number:
    (eg +44.1234123412)
    Email:
    Must be currently valid address
    *optional* VAT Registration Number:
    Language of Correspondence:


    * - Phone and fax formats are as follows (extention is optional):
        +{country_dialing_code}.{phone_number}[x{extension}]
        eg. "+44.02055511928"
    
    
    
    {{domain_string}}
    
    
    
    
    
    
    
    opensrs-client-3.0.0/templates/reg_system/order_name.html0000644017777601777760000002443610770014202024722 0ustar nobodynogroup00000000000000
    Domain {{reg_text}} - Order Form
    Congratulations on your decision to move forward with your business and register your own domain name. Upon completing the form below, you will be brought to a second page where you may verify that all of the information you have provided is correct. After you approve the information, simply click the "Order It!" button and you're done.
    {{syntax_error_msg}}
    {{CC_FIELDS}}
    {{AUTO_RENEW}} {{LOCK_DOMAIN}}
    Domain Information
    Domains Desired: {{domains}}
    Registration Period: {{reg_period_hints}}
    Profile: {{reg_profile}}
    {{CUSTOM_TECH_CONTACT}} {{CUSTOM_NAMESERVERS}}
    Registration Type: {{reg_type_text}}
    Owner Contact Information
    First Name:
    Last Name:
    Organization Name:
    Street Address:
    *optional* (eg: Suite #245):
    *optional* Address 3:
    City:
    State:
    Country:
    Postal Code:
    Phone Number:
    (eg. +1.4165551122x333)*
    *optional* Fax Number:
    (eg. +1.4165551122)*
    Email:
    Must be currently valid address
    Admin Contact Information
    Same as Owner Information
    First Name:
    Last Name:
    Organization Name:
    Street Address:
    *optional* (eg: Suite #245):
    *optional* Address 3:
    City:
    State:
    Country:
    Postal Code:
    Phone Number:
    (eg. +1.4165551122x333)*
    *optional* Fax Number:
    (eg. +1.4165551122)*
    Email:
    Must be currently valid address
    Billing Contact Information
    Same as Owner Information
    Same as Admin Information
    If both checkboxes are selected, 'Owner Information' checkbox will be default.
    First Name:
    Last Name:
    Organization Name:
    Street Address:
    *optional* (eg: Suite #245):
    *optional* Address 3:
    City:
    State:
    Country:
    Postal Code:
    Phone Number:
    (eg. +1.4165551122x333)*
    *optional* Fax Number:
    (eg. +1.4165551122)*
    Email:
    Must be currently valid address
    Email Forwarding Option
    Forwarding Email Address
    You have selected to purchase the domain/email bundle. Please indicate an existing e-mail address that you wish your new .name email address to forward to.


    * - Phone and fax formats are as follows (extention is optional):
        +{country_dialing_code}.{phone_number}[x{extension}]
        eg. "+44.02055511928"
    
    
    
    {{domain_string}}
    
    
    
    
    
    
    
    opensrs-client-3.0.0/templates/reg_system/order_us.html0000644017777601777760000003012410770014202024420 0ustar nobodynogroup00000000000000
    Domain {{reg_text}} - Order Form
    Congratulations on your decision to move forward with your business and register your own domain name. Upon completing the form below, you will be brought to a second page where you may verify that all of the information you have provided is correct. After you approve the information, simply click the "Order It!" button and you're done.
    {{syntax_error_msg}}
    {{CC_FIELDS}}
    {{AUTO_RENEW}} {{LOCK_DOMAIN}}
    Domain Information
    Domains Desired: {{domains}}
    Registration Period: {{reg_period_hints}}
    Profile: {{reg_profile}}
    {{CUSTOM_TECH_CONTACT}} {{CUSTOM_NAMESERVERS}}
    Registration Type: {{reg_type_text}}
    .US Nexus Information
    Domain Name Application Purpose
    Nexus Category of Applicant (please choose one) Category 1 - A natural person:
    Who is a United States citizen
    Who is a permanent resident of the United States of America or any of its possessions or territories

    Category 2 - U.S. Corporation
    U.S. organization incorporated within one of the 50 states of a U.S. territory

    Category 3 - Bona Fide U.S. Presence
    Regularly engages in lawful activities (sales of good or services or other business, commercial or non-commercial, including not-for-profit relations in the United States).
    Entity has an office or other facility in the U.S.
    Country of Citizenship: (required for Category 3)  
    Owner Contact Information
    First Name:
    Last Name:
    Organization Name:
    Street Address:
    *optional* (eg: Suite #245):
    *optional* Address 3:
    City:
    State:
    Country:
    Postal Code:
    Phone Number:
    (eg. +1.4165551122x333)*
    *optional* Fax Number:
    (eg. +1.4165551122)*
    Email:
    Must be currently valid address
    Admin Contact Information
    Same as Owner Information
    First Name:
    Last Name:
    Organization Name:
    Street Address:
    *optional* (eg: Suite #245):
    *optional* Address 3:
    City:
    State:
    Country:
    Postal Code:
    Phone Number:
    (eg. +1.4165551122x333)*
    *optional* Fax Number:
    (eg. +1.4165551122)*
    Email:
    Must be currently valid address
    Billing Contact Information
    Same as Owner Information
    Same as Admin Information
    If both checkboxes are selected, 'Owner Information' checkbox will be default.
    First Name:
    Last Name:
    Organization Name:
    Street Address:
    *optional* (eg: Suite #245):
    *optional* Address 3:
    City:
    State:
    Country:
    Postal Code:
    Phone Number:
    (eg. +1.4165551122x333)*
    *optional* Fax Number:
    (eg. +1.4165551122)*
    Email:
    Must be currently valid address


    * - Phone and fax formats are as follows (extention is optional):
        +{country_dialing_code}.{phone_number}[x{extension}]
        eg. "+44.02055511928"
    
    
    
    {{domain_string}}
    
    
    
    
    
    
    
    opensrs-client-3.0.0/templates/reg_system/reg_period_hints.html0000644017777601777760000000012210770014202026115 0ustar nobodynogroup00000000000000(2 years for .uk, max 5 years for .cn and 1 year for .de, .eu and .be)
    opensrs-client-3.0.0/templates/reg_system/setup_profile.html0000644017777601777760000000321510770014202025457 0ustar nobodynogroup00000000000000

    {{title}}

    Setup your domain management profile below
    {{ca_hidden_fields}} {{domain_string}} {{email_bundle}}
    New client



    Existing client
     Previously registered domain name:
    Note: This domain name must authenticate with the username and password you use below.



    Enter a username and password you will use to manage this profile:
    (All clients)

    Username:
    Password:
    Confirm:
    opensrs-client-3.0.0/templates/reg_system/setup_profile_ca.html0000644017777601777760000000306010770014202026120 0ustar nobodynogroup00000000000000

    {{title}}

    Setup your domain management profile below
    {{ca_hidden_fields}} {{domain_string}}




    Existing client
     Previously registered .ca domain name:
    Note: This domain name must authenticate with the username and password you use below.



    Enter a username and password you will use to manage this profile:
    (All clients)

    Username:
    Password:
    Confirm:
    opensrs-client-3.0.0/templates/reg_system/setup_profile_must_match.html0000644017777601777760000000304110770014202027700 0ustar nobodynogroup00000000000000

    {{title}}

    Setup your domain management profile below
    {{ca_hidden_fields}} {{domain_string}}
    {{message}}




     Previously registered domain name:
    Note: This domain name must authenticate with the username and password you use below.



    Enter a username and password you will use to manage this profile:
    (All clients)

    Username:
    Password:
    Confirm:
    opensrs-client-3.0.0/templates/reg_system/taken.html0000644017777601777760000000247510770014202023710 0ustar nobodynogroup00000000000000
    Sorry, {{domain}} has already been reserved.
    {{matches}}

    Enter Another Domain Name to Search For:
    [example: yourdomain.com]

    Domain Name:

    opensrs-client-3.0.0/templates/reg_system/thankyou.html0000644017777601777760000000075110770014202024443 0ustar nobodynogroup00000000000000
    Registration Results

    For tracking purposes, your registration order numbers are included below. Please include this number and the name of your domain in an email to {{partner_email}} if you have any questions about the status of your registration.



    {{status}}

    Search for another domain
    Home Page
    opensrs-client-3.0.0/templates/reg_system/thankyou.txt0000644017777601777760000000101510770014202024310 0ustar nobodynogroup00000000000000To: {{mailto}} From: {{mailfrom}} Subject: Registration Request for {{domain}} Received. Thank you for your order {{owner_first_name}}! Your order ID for {{domain}} is {{id}}. Please keep this for future reference. We will be processing your order shortly. NOTE: if you have registered a IDN domain the above domain name will not appear in its native format. It will instead appear in a Punycode format.. RESELLERS: insert the path to your IDN converter (Punycode.cgi) to allow customers to verify their domain names. opensrs-client-3.0.0/templates/reg_system/transfer_ca.html0000644017777601777760000000377110770014202025075 0ustar nobodynogroup00000000000000

    .CA Domain {{reg_text}} - Order Form
    Congratulations on your decision to move forward with your business and transfer your existing .CA domain name to us. Upon completing the form below, you will be brought to a second page where you may verify that all of the information you have provided is correct. After you approve the information, simply click the "Order It!" button and you're done.

    Please note that there is no ownership changes allowed within .CA transfer

    {{syntax_error_msg}}
    {{CC_FIELDS}}
    Domain Information
    Domains to Trasnfer: {{domains}}
    Registration Period:
    Profile: {{reg_profile}}

    {{domain_string}}
    opensrs-client-3.0.0/templates/reg_system/transfer_de.html0000644017777601777760000001730210770014202025075 0ustar nobodynogroup00000000000000
    Domain {{reg_text}} - Order Form
    Congratulations on your decision to move forward with your business and register your own domain name. Upon completing the form below, you will be brought to a second page where you may verify that all of the information you have provided is correct. After you approve the information, simply click the "Order It!" button and you're done.
    NOTE: Owner contact can only be changed once the transfer has been completed.
    opensrs-client-3.0.0/templates/reg_system/verify_de.html0000644017777601777760000000720010770014202024551 0ustar nobodynogroup00000000000000
    Registration Verification
    One More Step...
    Please verify that the information submitted is correct. If everything looks good, and you agree to the Terms and Conditions linked below, please hit the "ACCEPT" button at the bottom of the page to complete the process.

    {{AUTO_RENEW}} {{LOCK_DOMAIN}}
    Domain Information
    Domains Desired: {{domains}}
    Registration Period:
    Profile: {{reg_profile}}
    {{CUSTOM_TECH_CONTACT}} {{CUSTOM_NAMESERVERS}}
    Registration Type: {{reg_type_text}}
    Admin Contact Information
    First Name:
    Last Name:
    Organization Name:
    Street Address:
    *optional* (eg: Suite #245):
    *optional* Address 3:
    City:
    State:
    Country:
    Admin contact must reside in Germany
    Postal Code:
    Phone Number:
    (eg. +1.4165551122x333)*
    *optional* Fax Number:
    (eg. +1.4165551122)*
    Email:
    Must be currently valid address
    Zone Contact Information
    Same as Admin Information
    First Name:
    Last Name:
    Organization Name:
    Street Address:
    *optional* (eg: Suite #245):
    *optional* Address 3:
    City:
    State:
    Country:
    Postal Code:
    Phone Number:
    (eg. +1.4165551122x333)*
    Fax Number:
    (eg. +1.4165551122)*
    Email:
    Must be currently valid address
    {{CC_FIELDS}}
    Payment Information
    Please ensure you are obtaining payment with the information gathered. This template does no credit card processing by default.


    * - Phone and fax formats are as follows (extention is optional):
        +{country_dialing_code}.{phone_number}[x{extension}]
        eg. "+44.02055511928"
    
    
    
    {{domain_string}}
    
    
    
    
    
    
    
    opensrs-client-3.0.0/templates/reg_system/transfer_uk.html0000644017777601777760000002475210770014202025133 0ustar nobodynogroup00000000000000
    Domain {{reg_text}} - Order Form
    Congratulations on your decision to move forward with your business and register your own domain name. Upon completing the form below, you will be brought to a second page where you may verify that all of the information you have provided is correct. After you approve the information, simply click the "Order It!" button and you're done.
    {{syntax_error_msg}}


    {{CC_FIELDS}}
    {{AUTO_RENEW}} {{LOCK_DOMAIN}}
    Domain Information
    Domains Desired: {{domains}}
    Registration Period: {{reg_period_hints}}
    Profile: {{reg_profile}}
    {{CUSTOM_TECH_CONTACT}} {{CUSTOM_NAMESERVERS}}
    Registration Type: {{reg_type_text}}
    Contact Changes Required?: Yes
    Admin Contact Information if contact changes are not required
    Email:
    Must be currently valid address
    Fill out the contact data below if contact changes are required
    Owner Contact Information
    First Name:
    Last Name:
    Organization Name:
    Street Address:
    *optional* (eg: Suite #245):
    *optional* Address 3:
    City:
    State:
    Country:
    Postal Code:
    Phone Number:
    (eg. +1.4165551122x1234)
    *optional* Fax Number:
    (eg. +1.4165551122x1234)
    Email:
    Must be currently valid address
    Admin Contact Information
    Same as Owner Information
    First Name:
    Last Name:
    Organization Name:
    Street Address:
    *optional* (eg: Suite #245):
    *optional* Address 3:
    City:
    State:
    Country:
    Postal Code:
    Phone Number:
    (eg. +1.4165551122x1234)
    *optional* Fax Number:
    (eg. +1.4165551122x1234)
    Email:
    Must be currently valid address
    Billing Contact Information
    Same as Owner Information
    Same as Admin Information
    If both checkboxes are selected, 'Owner Information' checkbox will be default.
    First Name:
    Last Name:
    Organization Name:
    Street Address:
    *optional* (eg: Suite #245):
    *optional* Address 3:
    City:
    State:
    Country:
    Postal Code:
    Phone Number:
    (eg. +1.4165551122x1234)
    *optional* Fax Number:
    (eg. +1.4165551122x1234)
    Email:
    Must be currently valid address


    * - Phone and fax formats are as follows (extention is optional):
        +{country_dialing_code}.{phone_number}[x{extension}]
        eg. "+44.02055511928"
    
    
    
    {{domain_string}}
    
    
    
    
    
    
    
    opensrs-client-3.0.0/templates/reg_system/verify.html0000644017777601777760000000540610770014202024107 0ustar nobodynogroup00000000000000
    Registration Verification
    One More Step...
    Please verify that the information submitted is correct. If everything looks good, hit the "Order Now!" button to complete the process.


    {{language}} {{auto_renew_section}} {{whois_privacy_section}} {{domain_locking_section}} {{VERIFY_CC_FIELDS}} {{TECH_CONTACT}} {{NAMESERVERS}}
    Registration Type: {{reg_type_text}}
    Domains:

    {{bad_domains}} Valid Domains:
    {{domains}}
    Registration Period: {{period_text}}
    Main Contact Information
    {{owner_first_name}} {{owner_last_name}}
    {{owner_org_name}}
    {{owner_address1}}
    {{owner_address2}} {{owner_address3}} {{owner_city}}, {{owner_state}} {{owner_postal_code}}
    {{owner_country}}
    Phone:{{owner_phone}}
    Fax:{{owner_fax}}
    E-mail:{{owner_email}}
    Admin Information
    {{admin_first_name}} {{admin_last_name}}
    {{admin_org_name}}
    {{admin_address1}}
    {{admin_address2}} {{admin_address3}} {{admin_city}}, {{admin_state}} {{admin_postal_code}}
    {{admin_country}}
    Phone:{{admin_phone}}
    Fax:{{admin_fax}}
    E-mail:{{admin_email}}
    Billing Information
    {{billing_first_name}} {{billing_last_name}}
    {{billing_org_name}}
    {{billing_address1}}
    {{billing_address2}} {{billing_address3}} {{billing_city}}, {{billing_state}} {{billing_postal_code}}
    {{billing_country}}
    Phone:{{billing_phone}}
    Fax:{{billing_fax}}
    E-mail:{{billing_email}}

    {{domain_string}} {{CONTACT_INFO}} {{NAMESERVER_INFO}} {{BILLING_INFO}}


    opensrs-client-3.0.0/templates/reg_system/verify_asia.html0000644017777601777760000000621110770014202025077 0ustar nobodynogroup00000000000000
    Registration Verification
    One More Step...
    Please verify that the information submitted is correct. If everything looks good, hit the "Order Now!" button to complete the process.


    {{auto_renew_section}} {{domain_locking_section}} {{VERIFY_CC_FIELDS}} {{TECH_CONTACT}} {{NAMESERVERS}}
    Registration Type: {{reg_type_text}}
    Domains:

    {{bad_domains}} Valid Domains:
    {{domains}}
    Registration Period: {{period_text}}
    .ASIA CED Contact Information
    Contact Type: {{ced_contact_type}}
    Country: {{ced_locality_country}}
    City: {{ced_locality_city}}
    State/Province: {{ced_locality_state_prov}}
    Legal Entity Type: {{ced_legal_entity_type}}
    Identification Type: {{ced_id_type}}
    Identification Number: {{ced_id_number}}
    Main Contact Information
    {{owner_first_name}} {{owner_last_name}}
    {{owner_org_name}}
    {{owner_address1}}
    {{owner_address2}} {{owner_address3}} {{owner_city}}, {{owner_state}} {{owner_postal_code}}
    {{owner_country}}
    Phone:{{owner_phone}}
    Fax:{{owner_fax}}
    E-mail:{{owner_email}}
    Admin Information
    {{admin_first_name}} {{admin_last_name}}
    {{admin_org_name}}
    {{admin_address1}}
    {{admin_address2}} {{admin_address3}} {{admin_city}}, {{admin_state}} {{admin_postal_code}}
    {{admin_country}}
    Phone:{{admin_phone}}
    Fax:{{admin_fax}}
    E-mail:{{admin_email}}
    Billing Information
    {{billing_first_name}} {{billing_last_name}}
    {{billing_org_name}}
    {{billing_address1}}
    {{billing_address2}} {{billing_address3}} {{billing_city}}, {{billing_state}} {{billing_postal_code}}
    {{billing_country}}
    Phone:{{billing_phone}}
    Fax:{{billing_fax}}
    E-mail:{{billing_email}}

    {{domain_string}} {{SPECIAL_DOMAIN_INFO}} {{CONTACT_INFO}} {{NAMESERVER_INFO}} {{BILLING_INFO}}


    opensrs-client-3.0.0/templates/reg_system/verify_be.html0000644017777601777760000000371210770014202024553 0ustar nobodynogroup00000000000000
    Registration Verification
    One More Step...
    Please verify that the information submitted is correct. If everything looks good, hit the "Order Now!" button to complete the process.


    {{language}} {{auto_renew_section}} {{VERIFY_CC_FIELDS}} {{TECH_CONTACT}} {{NAMESERVERS}}
    Registration Type: {{reg_type_text}}
    Domains:

    {{bad_domains}} Valid Domains:
    {{domains}}
    Registration Period: {{period_text}}
    Main Contact Information
    {{owner_first_name}} {{owner_last_name}}
    {{owner_org_name}}
    {{owner_address1}}
    {{owner_address2}} {{owner_address3}} {{owner_city}}, {{owner_state}} {{owner_postal_code}}
    {{owner_country}}
    Phone:{{owner_phone}}
    Fax:{{owner_fax}}
    E-mail:{{owner_email}}
    VAT:{{owner_vat}}
    language: {{owner_lang}}

    {{domain_string}} {{CONTACT_INFO}} {{NAMESERVER_INFO}} {{BILLING_INFO}}


    opensrs-client-3.0.0/templates/reg_system/verify_ca.html0000644017777601777760000000423510770014202024551 0ustar nobodynogroup00000000000000
    Registration Verification
    One More Step...
    Please verify that the information submitted is correct. If everything looks good, hit the "Order Now!" button to complete the process.


    {{VERIFY_CC_FIELDS}} {{TECH_CONTACT}} {{NAMESERVERS}}
    Registration Type: {{reg_type_text}}
    Domains:

    {{bad_domains}} Valid Domains:
    {{domains}}
    Registration Period: {{period_text}}
    Special Information
    Organization Name: {{owner_org_name}}
    Owner Description: {{domain_description}}
    Registered Trade-mark: {{isa_trademark}}
    Language Preference: {{lang_pref}}
    Legal Type: {{legal_type}}
    Main Contact Information
    {{admin_first_name}} {{admin_last_name}}
    {{admin_org_name}}
    {{admin_address1}}
    {{admin_city}}, {{admin_state}} {{admin_postal_code}}
    {{admin_country}}
    Phone:{{admin_phone}}
    Fax:{{admin_fax}}
    E-mail:{{admin_email}}

    {{domain_string}} {{SPECIAL_DOMAIN_INFO}} {{CONTACT_INFO}} {{NAMESERVER_INFO}} {{BILLING_INFO}}


    opensrs-client-3.0.0/templates/reg_system/verify_ca_transfer.html0000644017777601777760000000264310770014202026456 0ustar nobodynogroup00000000000000
    Registration Verification
    One More Step...
    Please verify that the information submitted is correct. If everything looks good, hit the "Order Now!" button to complete the process.


    {{VERIFY_CC_FIELDS}}
    Registration Type: {{reg_type_text}}
    Domains:

    {{bad_domains}} Valid Domains:
    {{domains}}
    Registration Period: {{period_text}}

    {{domain_string}} {{SPECIAL_DOMAIN_INFO}} {{CONTACT_INFO}} {{NAMESERVER_INFO}} {{BILLING_INFO}}


    opensrs-client-3.0.0/templates/reg_system/verify_cc_fields.html0000644017777601777760000000021510770014202026073 0ustar nobodynogroup00000000000000
    Credit Card Type:{{p_cc_type}}
    Card Number:{{p_cc_num}}   Exp: {{p_cc_exp_mon}}/{{p_cc_exp_yr}}
    {{language}} {{auto_renew_section}} {{domain_locking_section}} {{VERIFY_CC_FIELDS}} {{TECH_CONTACT}} {{NAMESERVERS}}
    Registration Type: {{reg_type_text}}
    Domains:

    {{bad_domains}} Valid Domains:
    {{domains}}
    Registration Period: {{period_text}}
    Main Contact Information
    {{owner_first_name}} {{owner_last_name}}
    {{owner_org_name}}
    {{owner_address1}}
    {{owner_address2}} {{owner_address3}} {{owner_city}}, {{owner_state}} {{owner_postal_code}}
    {{owner_country}}
    Phone:{{owner_phone}}
    Fax:{{owner_fax}}
    E-mail:{{owner_email}}
    Admin Information
    {{admin_first_name}} {{admin_last_name}}
    {{admin_org_name}}
    {{admin_address1}}
    {{admin_address2}} {{admin_address3}} {{admin_city}}, {{admin_state}} {{admin_postal_code}}
    {{admin_country}}
    Phone:{{admin_phone}}
    Fax:{{admin_fax}}
    E-mail:{{admin_email}}
    Zone Information
    {{billing_first_name}} {{billing_last_name}}
    {{billing_org_name}}
    {{billing_address1}}
    {{billing_address2}} {{billing_address3}} {{billing_city}}, {{billing_state}} {{billing_postal_code}}
    {{billing_country}}
    Phone:{{billing_phone}}
    Fax:{{billing_fax}}
    E-mail:{{billing_email}}

    By applying for the services above, I acknowledge that I have read and understood the following documents http://www.denic.de/doc/faq/vergaberichtlinie.en.html and http://www.denic.de/DENICdb/domainreg/DENICdirect/preisliste.en.html. I further agree and accept the conditions in the following contract that will be in effect between DENIC and myself http://www.denic.de/doc/DENIC/agb.en.html

    {{domain_string}} {{SPECIAL_DOMAIN_INFO}} {{CONTACT_INFO}} {{NAMESERVER_INFO}} {{BILLING_INFO}}    


    opensrs-client-3.0.0/templates/reg_system/verify_de_transfer.html0000644017777601777760000000633710770014202026467 0ustar nobodynogroup00000000000000
    Registration Verification
    One More Step...
    Please verify that the information submitted is correct. If everything looks good, and you agree to the Terms and Conditions linked below, please hit the "ACCEPT" button at the bottom of the page to complete the process.

    {{auto_renew_section}} {{domain_locking_section}} {{VERIFY_CC_FIELDS}} {{TECH_CONTACT}} {{NAMESERVERS}}
    Registration Type: {{reg_type_text}}
    Domains:

    {{bad_domains}} Valid Domains:
    {{domains}}
    Registration Period: {{period_text}}
    Admin Information
    {{admin_first_name}} {{admin_last_name}}
    {{admin_org_name}}
    {{admin_address1}}
    {{admin_address2}} {{admin_address3}} {{admin_city}}, {{admin_state}} {{admin_postal_code}}
    {{admin_country}}
    Phone:{{admin_phone}}
    Fax:{{admin_fax}}
    E-mail:{{admin_email}}
    Zone Information
    {{billing_first_name}} {{billing_last_name}}
    {{billing_org_name}}
    {{billing_address1}}
    {{billing_address2}} {{billing_address3}} {{billing_city}}, {{billing_state}} {{billing_postal_code}}
    {{billing_country}}
    Phone:{{billing_phone}}
    Fax:{{billing_fax}}
    E-mail:{{billing_email}}

    By applying for the services above, I acknowledge that I have read and understood the following documents http://www.denic.de/doc/faq/vergaberichtlinie.en.html and http://www.denic.de/DENICdb/domainreg/DENICdirect/preisliste.en.html. I further agree and accept the conditions in the following contract that will be in effect between DENIC and myself http://www.denic.de/doc/DENIC/agb.en.html

    {{domain_string}} {{SPECIAL_DOMAIN_INFO}} {{CONTACT_INFO}} {{NAMESERVER_INFO}} {{BILLING_INFO}}    


    opensrs-client-3.0.0/templates/reg_system/verify_eu.html0000644017777601777760000000371210770014202024576 0ustar nobodynogroup00000000000000
    Registration Verification
    One More Step...
    Please verify that the information submitted is correct. If everything looks good, hit the "Order Now!" button to complete the process.


    {{language}} {{auto_renew_section}} {{VERIFY_CC_FIELDS}} {{TECH_CONTACT}} {{NAMESERVERS}}
    Registration Type: {{reg_type_text}}
    Domains:

    {{bad_domains}} Valid Domains:
    {{domains}}
    Registration Period: {{period_text}}
    Main Contact Information
    {{owner_first_name}} {{owner_last_name}}
    {{owner_org_name}}
    {{owner_address1}}
    {{owner_address2}} {{owner_address3}} {{owner_city}}, {{owner_state}} {{owner_postal_code}}
    {{owner_country}}
    Phone:{{owner_phone}}
    Fax:{{owner_fax}}
    E-mail:{{owner_email}}
    VAT:{{owner_vat}}
    language: {{owner_lang}}

    {{domain_string}} {{CONTACT_INFO}} {{NAMESERVER_INFO}} {{BILLING_INFO}}


    opensrs-client-3.0.0/templates/reg_system/verify_name.html0000644017777601777760000000542510770014202025110 0ustar nobodynogroup00000000000000
    Registration Verification
    One More Step...
    Please verify that the information submitted is correct. If everything looks good, hit the "Order Now!" button to complete the process.


    {{auto_renew_section}} {{domain_locking_section}} {{VERIFY_CC_FIELDS}} {{TECH_CONTACT}} {{NAMESERVERS}}
    Registration Type: {{reg_type_text}} with E-mail Bundle
    Domain Information:
    Domain Name: {{domains}}

    Forwarding Email: {{forwarding_email}}

    Registration Period: {{period_text}}
    Main Contact Information
    {{owner_first_name}} {{owner_last_name}}
    {{owner_org_name}}
    {{owner_address1}}
    {{owner_address2}} {{owner_address3}} {{owner_city}}, {{owner_state}} {{owner_postal_code}}
    {{owner_country}}
    Phone:{{owner_phone}}
    Fax:{{owner_fax}}
    E-mail:{{owner_email}}
    Admin Information
    {{admin_first_name}} {{admin_last_name}}
    {{admin_org_name}}
    {{admin_address1}}
    {{admin_address2}} {{admin_address3}} {{admin_city}}, {{admin_state}} {{admin_postal_code}}
    {{admin_country}}
    Phone:{{admin_phone}}
    Fax:{{admin_fax}}
    E-mail:{{admin_email}}
    Billing Information
    {{billing_first_name}} {{billing_last_name}}
    {{billing_org_name}}
    {{billing_address1}}
    {{billing_address2}} {{billing_address3}} {{billing_city}}, {{billing_state}} {{billing_postal_code}}
    {{billing_country}}
    Phone:{{billing_phone}}
    Fax:{{billing_fax}}
    E-mail:{{billing_email}}

    {{domain_string}} {{CONTACT_INFO}} {{NAMESERVER_INFO}} {{BILLING_INFO}}


    opensrs-client-3.0.0/templates/reg_system/verify_uk_transfer.html0000644017777601777760000000567410770014202026521 0ustar nobodynogroup00000000000000
    Registration Verification
    One More Step...
    Please verify that the information submitted is correct. If everything looks good, hit the "Order Now!" button to complete the process.


    {{VERIFY_CC_FIELDS}} {{TECH_CONTACT}}
    Registration Type: {{reg_type_text}}
    Domains:

    {{bad_domains}} Valid Domains:
    {{domains}}
    Registration Period: {{period_text}}
    Main Contact Information
    Admin Information
    E-mail: {{admin_email}}
    These contact data will be used if contact changes required
    Main Contact Information
    {{owner_first_name}} {{owner_last_name}}
    {{owner_org_name}}
    {{owner_address1}}
    {{owner_address2}} {{owner_address3}} {{owner_city}}, {{owner_state}} {{owner_postal_code}}
    {{owner_country}}
    Phone:{{owner_phone}}
    Fax:{{owner_fax}}
    E-mail:{{owner_email}}
    Admin Information
    {{admin_first_name}} {{admin_last_name}}
    {{admin_org_name}}
    {{admin_address1}}
    {{admin_address2}} {{admin_address3}} {{admin_city}}, {{admin_state}} {{admin_postal_code}}
    {{admin_country}}
    Phone:{{admin_phone}}
    Fax:{{admin_fax}}
    E-mail:{{admin_email}}
    Billing Information
    {{billing_first_name}} {{billing_last_name}}
    {{billing_org_name}}
    {{billing_address1}}
    {{billing_address2}} {{billing_address3}} {{billing_city}}, {{billing_state}} {{billing_postal_code}}
    {{billing_country}}
    Phone:{{billing_phone}}
    Fax:{{billing_fax}}
    E-mail:{{billing_email}}

    {{domain_string}} {{CONTACT_INFO}} {{NAMESERVER_INFO}} {{BILLING_INFO}}


    opensrs-client-3.0.0/templates/reg_system/verify_us.html0000644017777601777760000000573510770014202024623 0ustar nobodynogroup00000000000000
    Registration Verification
    One More Step...
    Please verify that the information submitted is correct. If everything looks good, hit the "Order Now!" button to complete the process.


    {{auto_renew_section}} {{domain_locking_section}} {{VERIFY_CC_FIELDS}} {{TECH_CONTACT}} {{NAMESERVERS}}
    Registration Type: {{reg_type_text}}
    Domains:

    {{bad_domains}} Valid Domains:
    {{domains}}
    Registration Period: {{period_text}}
    .US Nexus Information
    Application Purpose: {{app_purpose}}
    Nexus Category: {{nexus_category}}
    Country of Citizenship: {{nexus_validator}}
    Main Contact Information
    {{owner_first_name}} {{owner_last_name}}
    {{owner_org_name}}
    {{owner_address1}}
    {{owner_address2}} {{owner_address3}} {{owner_city}}, {{owner_state}} {{owner_postal_code}}
    {{owner_country}}
    Phone:{{owner_phone}}
    Fax:{{owner_fax}}
    E-mail:{{owner_email}}
    Admin Information
    {{admin_first_name}} {{admin_last_name}}
    {{admin_org_name}}
    {{admin_address1}}
    {{admin_address2}} {{admin_address3}} {{admin_city}}, {{admin_state}} {{admin_postal_code}}
    {{admin_country}}
    Phone:{{admin_phone}}
    Fax:{{admin_fax}}
    E-mail:{{admin_email}}
    Billing Information
    {{billing_first_name}} {{billing_last_name}}
    {{billing_org_name}}
    {{billing_address1}}
    {{billing_address2}} {{billing_address3}} {{billing_city}}, {{billing_state}} {{billing_postal_code}}
    {{billing_country}}
    Phone:{{billing_phone}}
    Fax:{{billing_fax}}
    E-mail:{{billing_email}}

    {{domain_string}} {{SPECIAL_DOMAIN_INFO}} {{CONTACT_INFO}} {{NAMESERVER_INFO}} {{BILLING_INFO}}


    opensrs-client-3.0.0/templates/register/0000755017777601777760000000000010770014215021357 5ustar nobodynogroup00000000000000opensrs-client-3.0.0/templates/register/do_register.html0000644017777601777760000000005310770014202024545 0ustar nobodynogroup00000000000000 {{MESSAGE}} opensrs-client-3.0.0/templates/register/error.html0000644017777601777760000000020310770014202023365 0ustar nobodynogroup00000000000000
    Error Page


    {{ERROR}} opensrs-client-3.0.0/templates/register/main_menu.html0000644017777601777760000000135110770014202024211 0ustar nobodynogroup00000000000000

    Register Domain and Create New Profile

    Register Domain with an Existing Profile

    Domain You Own:
    Username:
    Password:
    opensrs-client-3.0.0/templates/register/register.html0000644017777601777760000003113310770014202024066 0ustar nobodynogroup00000000000000 New Domain Registration Form
    Domain Registration Form
    Current Profile Based On: {{reg_domain}}/{{reg_username}}
    Domain Ownership Information
    This section is what is used to determine the owner of the domain being registered, please be complete and accurate.
    Domain Name:
    Registration Period: (2 years for .uk, max 5 years for .cn)
    First Name:
    Last Name:
    Organization Name:
    Street Address:
    *optional* Address 2:
    *optional* Address 3:
    City:
    State/Province:
    Postal Code:
    Country:
    Phone Number:
    (eg. 416-555-1122 x333)
    *optional* Fax Number:
    (eg. 416-555-1122)
    Email:
    Auto renew: Yes No
    Administrative Contact Information
    First Name:
    Last Name:
    Organization Name:
    Street Address:
    *optional* Address 2:
    *optional* Address 3:
    City:
    State:
    2 Letter Country Code:
    Postal Code:
    Phone Number:
    (eg. 416-555-1122 x333)
    *optional* Fax Number:
    (eg. 416-555-1122)
    Email:
    Billing Information
    First Name:
    Last Name:
    Organization Name:
    Street Address:
    *optional* Address 2:
    *optional* Address 3:
    City:
    State:
    2 Letter Country Code:
    Postal Code:
    Phone Number:
    (eg. 416-555-1122 x333)
    *optional* Fax Number:
    (eg. 416-555-1122)
    Email:
    Technical Contact Information
    First Name:
    Last Name:
    Organization Name:
    Street Address:
    *optional* Address 2:
    *optional* Address 3:
    City:
    State:
    2 Letter Country Code:
    Postal Code:
    Phone Number:
    (eg. 416-555-1122 x333)
    *optional* Fax Number:
    (eg. 416-555-1122)
    Email:
    DNS Information
    Primary DNS Hostname:
    Secondary DNS Hostname:
    *optional* Third DNS Hostname:
    *optional* Fourth DNS Hostname:
    *optional* Fifth DNS Hostname:
    *optional* Sixth DNS Hostname:


    opensrs-client-3.0.0/templates/register/register_new.html0000644017777601777760000003200610770014202024737 0ustar nobodynogroup00000000000000 New Domain Registration Form
    Domain Registration Form
    New Profile Information
    Username:
    Password:
    Confirm Password:
    Domain Ownership Information
    This section is what is used to determine the owner of the domain being registered, please be complete and accurate.
    Domain Name:
    Registration Period: (2 years for .uk, max 5 years for .cn)
    First Name:
    Last Name:
    Organization Name:
    Street Address:
    *optional* Address 2:
    *optional* Address 3:
    City:
    State/Province:
    Postal Code:
    Country:
    Phone Number:
    (eg. 416-555-1122 x333)
    *optional* Fax Number:
    (eg. 416-555-1122)
    Email:
    Auto renew: Yes No
    Administrative Contact Information
    First Name:
    Last Name:
    Organization Name:
    Street Address:
    *optional* Address 2:
    *optional* Address 3:
    City:
    State:
    2 Letter Country Code:
    Postal Code:
    Phone Number:
    (eg. 416-555-1122 x333)
    *optional* Fax Number:
    (eg. 416-555-1122)
    Email:
    Billing Information
    Same as Admin Contact Info:
    First Name:
    Last Name:
    Organization Name:
    Street Address:
    *optional* Address 2:
    *optional* Address 3:
    City:
    State:
    2 Letter Country Code:
    Postal Code:
    Phone Number:
    (eg. 416-555-1122 x333)
    *optional* Fax Number:
    (eg. 416-555-1122)
    Email:
    Technical Contact Information
    Same as Admin Contact Info:
    First Name:
    Last Name:
    Organization Name:
    Street Address:
    *optional* Address 2:
    *optional* Address 3:
    City:
    State:
    2 Letter Country Code:
    Postal Code:
    Phone Number:
    (eg. 416-555-1122 x333)
    *optional* Fax Number:
    (eg. 416-555-1122)
    Email:
    DNS Information
    Primary DNS Hostname:
    Secondary DNS Hostname:
    *optional* Third DNS Hostname:
    *optional* Fourth DNS Hostname:
    *optional* Fifth DNS Hostname:
    *optional* Sixth DNS Hostname:


    opensrs-client-3.0.0/templates/renew/0000755017777601777760000000000010770014215020653 5ustar nobodynogroup00000000000000opensrs-client-3.0.0/templates/renew/error.html0000644017777601777760000000042610770014202022670 0ustar nobodynogroup00000000000000 Error in page..
    Error Page


    {{ERROR}}

    {{SHOW_PASS}} opensrs-client-3.0.0/templates/renew/login.html0000644017777601777760000000240310770014202022644 0ustar nobodynogroup00000000000000 Renew Your Domain - Login

    {{MESSAGE}}
    Renew Your Domain
    Domain Name:
    User Name:
    Password:
    * User Name and Password are case sensitive


    opensrs-client-3.0.0/templates/renew/renew.txt0000644017777601777760000000143210770014202022530 0ustar nobodynogroup00000000000000To: {{mailto}} From: {{mailfrom}} Subject: Renewal {{success}} for {{domain}} ---------------------------------------------------------------------- Order Information: ---------------------------------------------------------------------- domain: {{domain}} affiliate_id: {{affiliate_id}} OSRS order id: {{order_id}} renewal status: {{success}} response message: {{message}} old expiration date: {{old_expiry}} old auto_renew flag: {{old_auto_renew}} new expiration date: {{new_expiry}} new auto_renew flag: {{new_auto_renew}} apply_to_all flag: {{apply_to_all}} NOTE: For IDN domains the above domain name will not appear in its native format. It will instead appear in a punycode format. apply_to_all will, if set, apply the auto_renew flag to all domains in the same user profile. opensrs-client-3.0.0/templates/renew/renew_domain_menu.html0000644017777601777760000000472710770014202025242 0ustar nobodynogroup00000000000000 Renew Domain
    Renew Domain

    Domain Name Expiration Date Choose Renewal Period** Auto Renew*? Apply Auto-Renew Option
    To Entire Profile?
    WHOIS Privacy
    Enabled
    {{orig_domain}} {{idn_link}} {{expiredate}} {{whois_privacy_state}}

    * (only applicable for ".net", ".com", ".org", ".tv", ".info", ".biz", ".vc", ".name", ".cc", ".ca", ".de", ".be", ".eu", ".uk", and ".asia" domains)

    ** (2 years only for ".uk" and 1 year for ".de", ".be" and ".eu" domains)
    Logout


    opensrs-client-3.0.0/templates/renew/renew_domain_menu_name.html0000644017777601777760000000467010770014202026237 0ustar nobodynogroup00000000000000 Renew Domain
    Renew Domain

    Domain Name Forwarding Email** Expiration Date Choose Renewal Period Auto Renew*? Apply Auto-Renew Option
    To Entire Profile?
    {{orig_domain}} {{idn_link}} {{forwarding_email}} {{expiredate}}

    * (only applicable for ".net", ".com", ".org", ".tv", ".info", ".biz", ".vc", ".name", ".cc", ".ca", and ".asia" domains)
    ** (If present, email forwarding will be renewed automatically with the domain)
    Logout


    opensrs-client-3.0.0/templates/renew/renewal_results.html0000644017777601777760000000212110770014202024747 0ustar nobodynogroup00000000000000 Renew Results
    Domain Renewal Results Page

    ActionResults
    Step 1) Get Domain Info ({{orig_domain}} {{idn_link}}) {{step1_res}} ({{step1_text}})
    Current Expiration Date: {{step1_expiredate}}.
    Current Auto-Renew Flag: {{step1_auto_renew}}.
    Step 2) Domain Renewal {{step2_res}} ({{step2_text}})
    Order ID: {{step2_order_id}}
    New Expiration Date: {{step2_expiredate}}
    New Auto-Renew Flag: {{step2_auto_renew}}
    Step 3) Apply Auto-Renew Flag ({{auto_renew}})
    To All Domains In Profile
    {{step3_res}} ({{step3_text}})
    {{CGI}}
    opensrs-client-3.0.0/templates/renew/thankyou.txt0000644017777601777760000000114710770014202023255 0ustar nobodynogroup00000000000000To: {{mailto}} From: {{mailfrom}} Subject: Renewal for {{domain}} Submitted Thank you for your order {{first_name}}! Your order has been submitted for the renewal of {{domain}} for an additional {{num_years}} years, and will be processed shortly. For future enquiries regarding this request, please quote order id {{order_id}}. NOTE: if you have registered a Internationalized Domain Name the above domain name will not appear in its native format. It will instead appear in a Punycode format.. RESELLERS: insert the path to your IDN converter (Punycode.cgi) to allow customers to verify their domain names. opensrs-client-3.0.0/templates/tpp_renew/0000755017777601777760000000000010770014215021536 5ustar nobodynogroup00000000000000opensrs-client-3.0.0/templates/tpp_renew/base.html0000644017777601777760000000130010770014202023324 0ustar nobodynogroup00000000000000 <tmpl_var title>

    Logout


    opensrs-client-3.0.0/templates/tpp_renew/error.html0000644017777601777760000000021010770014202023542 0ustar nobodynogroup00000000000000

    Error

    The error which occurred was:
    opensrs-client-3.0.0/templates/tpp_renew/login.html0000644017777601777760000000132310770014202023527 0ustar nobodynogroup00000000000000
    Renewals Management
    Username:
    Password:
    opensrs-client-3.0.0/templates/tpp_renew/main.html0000644017777601777760000000246510770014202023353 0ustar nobodynogroup00000000000000
    There are renewable product items:
    ID # Service Product Description Creation Date Expiration Date Renewal Setting Status Action
    Renew N/A
    No renewable product items found.
    opensrs-client-3.0.0/templates/whois_privacy/0000755017777601777760000000000010770014215022421 5ustar nobodynogroup00000000000000opensrs-client-3.0.0/templates/whois_privacy/base.html0000644017777601777760000000051010770014202024211 0ustar nobodynogroup00000000000000 Registration Management System

    {{CONTENT}} opensrs-client-3.0.0/templates/whois_privacy/error.html0000644017777601777760000000037610770014202024442 0ustar nobodynogroup00000000000000 Error in page..
    Error Page


    {{ERROR}} opensrs-client-3.0.0/templates/whois_privacy/login.html0000644017777601777760000000241410770014202024414 0ustar nobodynogroup00000000000000 WHOIS Privacy Service - Login

    {{MESSAGE}}
    WHOIS Privacy Service
    Domain Name:
    User Name:
    Password:
    * User Name and Password are case sensitive


    opensrs-client-3.0.0/templates/whois_privacy/whois_privacy_menu.html0000644017777601777760000000252610770014202027222 0ustar nobodynogroup00000000000000 WHOIS Privacy Order Form
    STANDALONE
    WHOIS Privacy Service Order


    Domain Name Action
    {{reg_domain}} Process Order

    * ( only applicable for .com, .net, .org, .biz, .cc, .tv, .info, and .asia domains )
    Logout


    opensrs-client-3.0.0/templates/whois_privacy/wp_results.html0000644017777601777760000000141210770014202025510 0ustar nobodynogroup00000000000000 Registration Results
    WHOIS Privacy Registration Results Page

    {{step3_text}}
    ActionResults
    Step 1) Get Domain Info ({{orig_domain}} {{idn_link}}) {{step1_res}} ({{step1_text}})
    Current Expiration Date: {{step1_expiredate}}.
    Step 2) WHOIS Privacy Order Info {{step2_res}} ({{step2_text}})
    {{CGI}}
    opensrs-client-3.0.0/templates/wsb/0000755017777601777760000000000010770014215020326 5ustar nobodynogroup00000000000000opensrs-client-3.0.0/templates/wsb/messaging/0000755017777601777760000000000010770014215022303 5ustar nobodynogroup00000000000000opensrs-client-3.0.0/templates/wsb/messaging/create_live.eml0000644017777601777760000000064410770014202025264 0ustar nobodynogroup00000000000000From: To: Subject: Content-Type: text/plain; charset=us-ascii; format=flowed Content-Transfer-Encoding: 7bit Hi, First Name: Last Name: Brand Hostname: RSP Org Name: RSP Email: RSP Phone: Bye. opensrs-client-3.0.0/templates/wsb/messaging/create_trial.eml0000644017777601777760000000064410770014202025440 0ustar nobodynogroup00000000000000From: To: Subject: Content-Type: text/plain; charset=us-ascii; format=flowed Content-Transfer-Encoding: 7bit Hi, First Name: Last Name: Brand Hostname: RSP Org Name: RSP Email: RSP Phone: Bye. opensrs-client-3.0.0/templates/wsb/messaging/go_live.eml0000644017777601777760000000064410770014202024426 0ustar nobodynogroup00000000000000From: To: Subject: Content-Type: text/plain; charset=us-ascii; format=flowed Content-Transfer-Encoding: 7bit Hi, First Name: Last Name: Brand Hostname: RSP Org Name: RSP Email: RSP Phone: Bye. opensrs-client-3.0.0/templates/wsb/messaging/upgrade_package.eml0000644017777601777760000000064410770014202026104 0ustar nobodynogroup00000000000000From: To: Subject: Content-Type: text/plain; charset=us-ascii; format=flowed Content-Transfer-Encoding: 7bit Hi, First Name: Last Name: Brand Hostname: RSP Org Name: RSP Email: RSP Phone: Bye. opensrs-client-3.0.0/templates/wsb/base.html0000644017777601777760000000115510770014202022124 0ustar nobodynogroup00000000000000 <TMPL_VAR TITLE>





    opensrs-client-3.0.0/templates/wsb/cc_fields.html0000644017777601777760000000257010770014202023127 0ustar nobodynogroup00000000000000
    Payment Information
    Please ensure you are obtaining payment with the information gathered. This template does no credit card processing by default.
    Method of Payment: Expiration Date
    Card Number:  
    opensrs-client-3.0.0/templates/wsb/change_expiry.html0000644017777601777760000000335510770014202024043 0ustar nobodynogroup00000000000000
    Account Information
    Account Name:
    Package Purchased:
    Status:
    Expiry Date
    Current Expiry Date:
    Extend Expiry Date To:
    opensrs-client-3.0.0/templates/wsb/create_rwi2_user.html0000644017777601777760000000266210770014202024462 0ustar nobodynogroup00000000000000
    Username and Password:
    *Username:
    *Password:
    *Confirm Password:
    opensrs-client-3.0.0/templates/wsb/display_account_info.html0000644017777601777760000001612010770014202025404 0ustar nobodynogroup00000000000000
    Username and Password:
    *Username:
    *Password:
    *Confirm Password:
    *Lost Password Email:
    Contact Information:
    *First Name:
    *Last Name:
    Title:
    Organization:
    *Address 1:
    Address 2:
    Address 3:
    *City:
    *State/Province:
    *Zip/Postal Code:
    *Country:
    *Phone:
    Fax:
    *Email:
    General Settings:
    Language Preference:
    Domain:
    FTP Settings:
    FTP Hostname:
    FTP Port:
    FTP User Name:
    FTP Password:
    Confirm FTP Password:
    FTP Default Directory:
    Filename of Default Index Document:
    opensrs-client-3.0.0/templates/wsb/display_wsb_account.html0000644017777601777760000000432010770014202025243 0ustar nobodynogroup00000000000000
    Manage Account
    Account Name:
    Package Purchased:
    Status: TrialLive
    Start Date:
    Expiration Date:
    Creation Date:
    Last Updated:
    Ensure settings are up-to-date prior to Going Live
    opensrs-client-3.0.0/templates/wsb/edit_account_info.html0000644017777601777760000001636110770014202024673 0ustar nobodynogroup00000000000000
    Username and Password:
    *Username:
    *Password:
    *Confirm Password:
    *Lost Password Email:
    Contact Information:
    *First Name:
    *Last Name:
    Title:
    Organization:
    *Address 1:
    Address 2:
    Address 3:
    *City:
    *State/Province:
    *Zip/Postal Code:
    *Country:
    *Phone:
    Fax:
    *Email:
    General Settings:
    Language Preference:
    *Domain:
    FTP Settings:
    *FTP Hostname:
    *FTP Port:
    *FTP User Name:
    *FTP Password:
    *Confirm FTP Password:
    FTP Default Directory:
    *Filename of Default Index Document:
    opensrs-client-3.0.0/templates/wsb/error.html0000644017777601777760000000024210770014202022337 0ustar nobodynogroup00000000000000

    Registration Error

    The error which occurred was:
    opensrs-client-3.0.0/templates/wsb/list_wsb_accounts.html0000644017777601777760000000302510770014202024735 0ustar nobodynogroup00000000000000
    Select Account
    To view or update account information, click on the Account Name below
    Account Package Status Expiry Date
    TrialLive
    opensrs-client-3.0.0/templates/wsb/login.html0000644017777601777760000000364210770014202022325 0ustar nobodynogroup00000000000000
     
     
    Username
    Password
    opensrs-client-3.0.0/templates/wsb/login_wsb_account.html0000644017777601777760000000133410770014202024710 0ustar nobodynogroup00000000000000 [Redirect to WSB]
    opensrs-client-3.0.0/templates/wsb/recover_password.html0000644017777601777760000000230710770014202024601 0ustar nobodynogroup00000000000000
    Password Recovery

    Enter your username below and click the "Send Password" button. Your password will be sent to your email address on file.

    Username
    opensrs-client-3.0.0/templates/wsb/select_package.html0000644017777601777760000000461410770014202024147 0ustar nobodynogroup00000000000000
    Select Package
    Package Offering
    Package: >Trial    Compare Features
    Set expiry date to:
    Note: Expiry date does not apply when Trial is selected.
    Our Terms and Conditions are avalable by pressing the link below. By selecting Continue you are agreeing to these terms.
    Terms and Conditions
    opensrs-client-3.0.0/templates/wsb/show_charges.html0000644017777601777760000000276110770014202023672 0ustar nobodynogroup00000000000000
    Order Confirmation
    Account Name:
    Package Ordered:
    Status:
    Price: $
    opensrs-client-3.0.0/templates/xpackmanage/0000755017777601777760000000000010770014215022012 5ustar nobodynogroup00000000000000opensrs-client-3.0.0/templates/xpackmanage/error.html0000644017777601777760000000032410770014202024024 0ustar nobodynogroup00000000000000

    Error

    The error which occurred was:


    opensrs-client-3.0.0/templates/xpackmanage/footer.html0000644017777601777760000000005310770014202024170 0ustar nobodynogroup00000000000000
    opensrs-client-3.0.0/templates/xpackmanage/get_all_info.html0000644017777601777760000004264610770014202025332 0ustar nobodynogroup00000000000000


     
    Organization Contact Information
    First Name:
    Last Name:
    Organization Name:
    Street Address:
    Address 2:  
    Address 3:  
    City:
    State:
    Country:
    Postal Code:
    Phone Number:
    (eg.G +1.4165551212x1234)
    *optional* Fax Number:
    (eg. +1.4165551212x1234)
    Email:
    Admin Contact Information
    First Name:
    Last Name:
    Organization Name:
    Street Address:
    Address 2:
    Address 3:
    City:
    State:
    Country:
    Postal Code:
    Phone Number:
    (eg. +1.4165551212x1234)
    *optional* Fax Number:
    (eg. +1.4165551212x1234)
    Email:
    Billing Contact Information
    First Name:
    Last Name:
    Organization Name:
    Street Address:
    Address 2:
    Address 3:
    City:
    State:
    Country:
    Postal Code:
    Phone Number:
    (eg. +1.4165551212x1234)
    *optional* Fax Number:
    (eg. +1.4165551212x1234)
    Email:
    Tech Contact Information
    First Name:
    Last Name:
    Organization Name:
    Street Address:
    Address 2:
    Address 3:
    City:
    State:
    Country:
    Postal Code:
    Phone Number:
    (eg. +1.4165551212x1234)
    *optional* Fax Number:
    (eg. +1.4165551212x1234)
    Email:
    DNS Information
    FQDN IP
     
     
     





    opensrs-client-3.0.0/templates/xpackmanage/header.html0000644017777601777760000000141510770014202024125 0ustar nobodynogroup00000000000000 Manage Your Domain


    opensrs-client-3.0.0/templates/xpackmanage/login.html0000644017777601777760000000264310770014202024011 0ustar nobodynogroup00000000000000
    Manage Your Domain
    Domain Name:
    User Name:
    Password:
    * User Name and Password are case sensitive
    * Do not put www. as part of your domain name


    Click here to manage a domain other than CH, FR, NL, AT, MX, ES, DK or IT

    * Cookies must be enabled on your browser to use this interface opensrs-client-3.0.0/templates/xpackmanage/main_header.html0000644017777601777760000000311110770014202025124 0ustar nobodynogroup00000000000000
    Manage Your Domain
    Domain Name:  
    Expires:    Waiting Requests:
    Update All Domain Info      Logout

    To manage all other domains (other than NL, FR, CH, AT and IT), please logout and go to manage.opensrs.net
    opensrs-client-3.0.0/templates/xpackmanage/waiting_history.html0000644017777601777760000000061710770014202026123 0ustar nobodynogroup00000000000000

    Domain Change Requests



    Request ID Request Type Date
    Submitted
    Current State