diff options
26 files changed, 6627 insertions, 154 deletions
diff --git a/components/devtools_traits/Cargo.toml b/components/devtools_traits/Cargo.toml index c3ea63b06fa..859ce0cff45 100644 --- a/components/devtools_traits/Cargo.toml +++ b/components/devtools_traits/Cargo.toml @@ -9,3 +9,6 @@ path = "lib.rs" [dependencies.msg] path = "../msg" + +[dependencies.util] +path = "../util" diff --git a/components/msg/Cargo.toml b/components/msg/Cargo.toml index 9ffd1d65f0e..289c65edd52 100644 --- a/components/msg/Cargo.toml +++ b/components/msg/Cargo.toml @@ -22,7 +22,7 @@ git = "https://github.com/servo/rust-geom" [dependencies.hyper] git = "https://github.com/servo/hyper" -branch = "servo" +branch = "old_servo_new_cookies" [dependencies.layers] git = "https://github.com/servo/rust-layers" @@ -34,4 +34,4 @@ git = "https://github.com/servo/rust-core-foundation" git = "https://github.com/servo/rust-io-surface" [dependencies] -url = "0.2.16"
\ No newline at end of file +url = "0.2.16" diff --git a/components/net/Cargo.toml b/components/net/Cargo.toml index dcf7bdf475f..8e31f9b5cfa 100644 --- a/components/net/Cargo.toml +++ b/components/net/Cargo.toml @@ -15,7 +15,11 @@ git = "https://github.com/servo/rust-geom" [dependencies.hyper] git = "https://github.com/servo/hyper" -branch = "servo" +branch = "old_servo_new_cookies" + +[dependencies.cookie] +git = "https://github.com/servo/cookie-rs" +branch = "lenientparse_backport" [dependencies.png] git = "https://github.com/servo/rust-png" @@ -26,4 +30,4 @@ git = "https://github.com/servo/rust-stb-image" [dependencies] url = "0.2.16" time = "0.1.12" -openssl="0.2.15"
\ No newline at end of file +openssl="0.2.15" diff --git a/components/net/about_loader.rs b/components/net/about_loader.rs index 4db3dc21292..b7935bf72e8 100644 --- a/components/net/about_loader.rs +++ b/components/net/about_loader.rs @@ -26,7 +26,7 @@ pub fn factory(mut load_data: LoadData, start_chan: Sender<TargetedLoadResponse> content_type: Some(("text".to_string(), "html".to_string())), charset: Some("utf-8".to_string()), headers: None, - status: Some(RawStatus(200, "OK".to_owned())) + status: Some(RawStatus(200, "OK".to_owned())), }); chan.send(Done(Ok(()))).unwrap(); return diff --git a/components/net/cookie.rs b/components/net/cookie.rs new file mode 100644 index 00000000000..eb3c1a61a97 --- /dev/null +++ b/components/net/cookie.rs @@ -0,0 +1,233 @@ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//! Implementation of cookie creation and matching as specified by +//! http://tools.ietf.org/html/rfc6265 + +use cookie_storage::CookieSource; +use pub_domains::PUB_DOMAINS; + +use cookie_rs; +use time::{Tm, now, at, Timespec}; +use url::Url; +use std::borrow::ToOwned; +use std::i64; +use std::io::net::ip::IpAddr; +use std::time::Duration; + +/// A stored cookie that wraps the definition in cookie-rs. This is used to implement +/// various behaviours defined in the spec that rely on an associated request URL, +/// which cookie-rs and hyper's header parsing do not support. +#[derive(Clone, Show)] +pub struct Cookie { + pub cookie: cookie_rs::Cookie, + pub host_only: bool, + pub persistent: bool, + pub creation_time: Tm, + pub last_access: Tm, + pub expiry_time: Tm, +} + +impl Cookie { + /// http://tools.ietf.org/html/rfc6265#section-5.3 + pub fn new_wrapped(mut cookie: cookie_rs::Cookie, request: &Url, source: CookieSource) + -> Option<Cookie> { + // Step 3 + let (persistent, expiry_time) = match (&cookie.max_age, &cookie.expires) { + (&Some(max_age), _) => (true, at(now().to_timespec() + Duration::seconds(max_age as i64))), + (_, &Some(expires)) => (true, expires), + _ => (false, at(Timespec::new(i64::MAX, 0))) + }; + + let url_host = request.host().map(|host| host.serialize()).unwrap_or("".to_owned()); + + // Step 4 + let mut domain = cookie.domain.clone().unwrap_or("".to_owned()); + + // Step 5 + match PUB_DOMAINS.iter().find(|&x| domain == *x) { + Some(val) if *val == url_host => domain = "".to_string(), + Some(_) => return None, + None => {} + } + + // Step 6 + let host_only = if !domain.is_empty() { + if !Cookie::domain_match(url_host.as_slice(), domain.as_slice()) { + return None; + } else { + cookie.domain = Some(domain); + false + } + } else { + cookie.domain = Some(url_host); + true + }; + + // Step 7 + let mut path = cookie.path.unwrap_or("".to_owned()); + if path.is_empty() || path.char_at(0) != '/' { + let url_path = request.serialize_path(); + let url_path = url_path.as_ref().map(|path| path.as_slice()); + path = Cookie::default_path(url_path.unwrap_or("")); + } + cookie.path = Some(path); + + + // Step 10 + if cookie.httponly && source != CookieSource::HTTP { + return None; + } + + Some(Cookie { + cookie: cookie, + host_only: host_only, + persistent: persistent, + creation_time: now(), + last_access: now(), + expiry_time: expiry_time, + }) + } + + pub fn touch(&mut self) { + self.last_access = now(); + } + + // http://tools.ietf.org/html/rfc6265#section-5.1.4 + fn default_path(request_path: &str) -> String { + if request_path == "" || request_path.char_at(0) != '/' || + request_path.chars().filter(|&c| c == '/').count() == 1 { + "/".to_owned() + } else if request_path.ends_with("/") { + request_path.slice_to(request_path.len()-1).to_owned() + } else { + request_path.to_owned() + } + } + + // http://tools.ietf.org/html/rfc6265#section-5.1.4 + pub fn path_match(request_path: &str, cookie_path: &str) -> bool { + request_path == cookie_path || + ( request_path.starts_with(cookie_path) && + ( request_path.ends_with("/") || request_path.char_at(cookie_path.len() - 1) == '/' ) + ) + } + + // http://tools.ietf.org/html/rfc6265#section-5.1.3 + pub fn domain_match(string: &str, domain_string: &str) -> bool { + if string == domain_string { + return true; + } + if string.ends_with(domain_string) + && string.char_at(string.len()-domain_string.len()-1) == '.' + && string.parse::<IpAddr>().is_none() { + return true; + } + false + } + + // http://tools.ietf.org/html/rfc6265#section-5.4 step 1 + pub fn appropriate_for_url(&self, url: &Url, source: CookieSource) -> bool { + let domain = url.host().map(|host| host.serialize()); + if self.host_only { + if self.cookie.domain != domain { + return false; + } + } else { + if let (Some(ref domain), &Some(ref cookie_domain)) = (domain, &self.cookie.domain) { + if !Cookie::domain_match(domain.as_slice(), cookie_domain.as_slice()) { + return false; + } + } + } + + if let (Some(ref path), &Some(ref cookie_path)) = (url.serialize_path(), &self.cookie.path) { + if !Cookie::path_match(path.as_slice(), cookie_path.as_slice()) { + return false; + } + } + + if self.cookie.secure && url.scheme != "https".to_string() { + return false; + } + if self.cookie.httponly && source == CookieSource::NonHTTP { + return false; + } + + return true; + } +} + +#[test] +fn test_domain_match() { + assert!(Cookie::domain_match("foo.com", "foo.com")); + assert!(Cookie::domain_match("bar.foo.com", "foo.com")); + assert!(Cookie::domain_match("baz.bar.foo.com", "foo.com")); + + assert!(!Cookie::domain_match("bar.foo.com", "bar.com")); + assert!(!Cookie::domain_match("bar.com", "baz.bar.com")); + assert!(!Cookie::domain_match("foo.com", "bar.com")); + + assert!(!Cookie::domain_match("bar.com", "bbar.com")); + assert!(Cookie::domain_match("235.132.2.3", "235.132.2.3")); + assert!(!Cookie::domain_match("235.132.2.3", "1.1.1.1")); + assert!(!Cookie::domain_match("235.132.2.3", ".2.3")); +} + +#[test] +fn test_default_path() { + assert!(Cookie::default_path("/foo/bar/baz/").as_slice() == "/foo/bar/baz"); + assert!(Cookie::default_path("/foo/").as_slice() == "/foo"); + assert!(Cookie::default_path("/foo").as_slice() == "/"); + assert!(Cookie::default_path("/").as_slice() == "/"); + assert!(Cookie::default_path("").as_slice() == "/"); + assert!(Cookie::default_path("foo").as_slice() == "/"); +} + +#[test] +fn fn_cookie_constructor() { + use cookie_storage::CookieSource; + + let url = &Url::parse("http://example.com/foo").unwrap(); + + let gov_url = &Url::parse("http://gov.ac/foo").unwrap(); + // cookie name/value test + assert!(cookie_rs::Cookie::parse(" baz ").is_err()); + assert!(cookie_rs::Cookie::parse(" = bar ").is_err()); + assert!(cookie_rs::Cookie::parse(" baz = ").is_ok()); + + // cookie domains test + let cookie = cookie_rs::Cookie::parse(" baz = bar; Domain = ").unwrap(); + assert!(Cookie::new_wrapped(cookie.clone(), url, CookieSource::HTTP).is_some()); + let cookie = Cookie::new_wrapped(cookie, url, CookieSource::HTTP).unwrap(); + assert!(cookie.cookie.domain.as_ref().unwrap().as_slice() == "example.com"); + + // cookie public domains test + let cookie = cookie_rs::Cookie::parse(" baz = bar; Domain = gov.ac").unwrap(); + assert!(Cookie::new_wrapped(cookie.clone(), url, CookieSource::HTTP).is_none()); + assert!(Cookie::new_wrapped(cookie, gov_url, CookieSource::HTTP).is_some()); + + // cookie domain matching test + let cookie = cookie_rs::Cookie::parse(" baz = bar ; Secure; Domain = bazample.com").unwrap(); + assert!(Cookie::new_wrapped(cookie, url, CookieSource::HTTP).is_none()); + + let cookie = cookie_rs::Cookie::parse(" baz = bar ; Secure; Path = /foo/bar/").unwrap(); + assert!(Cookie::new_wrapped(cookie, url, CookieSource::HTTP).is_some()); + + let cookie = cookie_rs::Cookie::parse(" baz = bar ; HttpOnly").unwrap(); + assert!(Cookie::new_wrapped(cookie, url, CookieSource::NonHTTP).is_none()); + + let cookie = cookie_rs::Cookie::parse(" baz = bar ; Secure; Path = /foo/bar/").unwrap(); + let cookie = Cookie::new_wrapped(cookie, url, CookieSource::HTTP).unwrap(); + assert!(cookie.cookie.value.as_slice() == "bar"); + assert!(cookie.cookie.name.as_slice() == "baz"); + assert!(cookie.cookie.secure); + assert!(cookie.cookie.path.as_ref().unwrap().as_slice() == "/foo/bar/"); + assert!(cookie.cookie.domain.as_ref().unwrap().as_slice() == "example.com"); + assert!(cookie.host_only); + + let u = &Url::parse("http://example.com/foobar").unwrap(); + let cookie = cookie_rs::Cookie::parse("foobar=value;path=/").unwrap(); + assert!(Cookie::new_wrapped(cookie, u, CookieSource::HTTP).is_some()); +} diff --git a/components/net/cookie_storage.rs b/components/net/cookie_storage.rs new file mode 100644 index 00000000000..deeb9c534e2 --- /dev/null +++ b/components/net/cookie_storage.rs @@ -0,0 +1,143 @@ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//! Implementation of cookie storage as specified in +//! http://tools.ietf.org/html/rfc6265 + +use url::Url; +use cookie::Cookie; +use std::cmp::Ordering; + +/// The creator of a given cookie +#[derive(PartialEq, Copy)] +pub enum CookieSource { + /// An HTTP API + HTTP, + /// A non-HTTP API + NonHTTP, +} + +pub struct CookieStorage { + cookies: Vec<Cookie> +} + +impl CookieStorage { + pub fn new() -> CookieStorage { + CookieStorage { + cookies: Vec::new() + } + } + + // http://tools.ietf.org/html/rfc6265#section-5.3 + pub fn remove(&mut self, cookie: &Cookie, source: CookieSource) -> Result<Option<Cookie>, ()> { + // Step 1 + let position = self.cookies.iter().position(|c| { + c.cookie.domain == cookie.cookie.domain && + c.cookie.path == cookie.cookie.path && + c.cookie.name == cookie.cookie.name + }); + + if let Some(ind) = position { + let c = self.cookies.remove(ind); + + // http://tools.ietf.org/html/rfc6265#section-5.3 step 11.2 + if !c.cookie.httponly || source == CookieSource::HTTP { + Ok(Some(c)) + } else { + // Undo the removal. + self.cookies.push(c); + Err(()) + } + } else { + Ok(None) + } + } + + // http://tools.ietf.org/html/rfc6265#section-5.3 + pub fn push(&mut self, mut cookie: Cookie, source: CookieSource) { + let old_cookie = self.remove(&cookie, source); + if old_cookie.is_err() { + // This new cookie is not allowed to overwrite an existing one. + return; + } + + if cookie.cookie.value.is_empty() { + return; + } + + // Step 11 + if let Some(old_cookie) = old_cookie.unwrap() { + // Step 11.3 + cookie.creation_time = old_cookie.creation_time; + } + + // Step 12 + self.cookies.push(cookie); + } + + fn cookie_comparator(a: &Cookie, b: &Cookie) -> Ordering { + let a_path_len = a.cookie.path.as_ref().map(|p| p.len()).unwrap_or(0); + let b_path_len = b.cookie.path.as_ref().map(|p| p.len()).unwrap_or(0); + match a_path_len.cmp(&b_path_len) { + Ordering::Equal => { + let a_creation_time = a.creation_time.to_timespec(); + let b_creation_time = b.creation_time.to_timespec(); + a_creation_time.cmp(&b_creation_time) + } + // Ensure that longer paths are sorted earlier than shorter paths + Ordering::Greater => Ordering::Less, + Ordering::Less => Ordering::Greater, + } + } + + // http://tools.ietf.org/html/rfc6265#section-5.4 + pub fn cookies_for_url(&mut self, url: &Url, source: CookieSource) -> Option<String> { + let filterer = |&:c: &&mut Cookie| -> bool { + info!(" === SENT COOKIE : {} {} {:?} {:?}", c.cookie.name, c.cookie.value, c.cookie.domain, c.cookie.path); + info!(" === SENT COOKIE RESULT {}", c.appropriate_for_url(url, source)); + // Step 1 + c.appropriate_for_url(url, source) + }; + + // Step 2 + let mut url_cookies: Vec<&mut Cookie> = self.cookies.iter_mut().filter(filterer).collect(); + url_cookies.sort_by(|a, b| CookieStorage::cookie_comparator(*a, *b)); + + let reducer = |&:acc: String, c: &mut &mut Cookie| -> String { + // Step 3 + c.touch(); + + // Step 4 + (match acc.len() { + 0 => acc, + _ => acc + ";" + }) + c.cookie.name.as_slice() + "=" + c.cookie.value.as_slice() + }; + let result = url_cookies.iter_mut().fold("".to_string(), reducer); + + info!(" === COOKIES SENT: {}", result); + match result.len() { + 0 => None, + _ => Some(result) + } + } +} + +#[test] +fn test_sort_order() { + use cookie_rs; + let url = &Url::parse("http://example.com/foo").unwrap(); + let a_wrapped = cookie_rs::Cookie::parse("baz=bar; Path=/foo/bar/").unwrap(); + let a = Cookie::new_wrapped(a_wrapped.clone(), url, CookieSource::HTTP).unwrap(); + let a_prime = Cookie::new_wrapped(a_wrapped, url, CookieSource::HTTP).unwrap(); + let b = cookie_rs::Cookie::parse("baz=bar;Path=/foo/bar/baz/").unwrap(); + let b = Cookie::new_wrapped(b, url, CookieSource::HTTP).unwrap(); + + assert!(b.cookie.path.as_ref().unwrap().len() > a.cookie.path.as_ref().unwrap().len()); + assert!(CookieStorage::cookie_comparator(&a, &b) == Ordering::Greater); + assert!(CookieStorage::cookie_comparator(&b, &a) == Ordering::Less); + assert!(CookieStorage::cookie_comparator(&a, &a_prime) == Ordering::Less); + assert!(CookieStorage::cookie_comparator(&a_prime, &a) == Ordering::Greater); + assert!(CookieStorage::cookie_comparator(&a, &a) == Ordering::Equal); +} diff --git a/components/net/http_loader.rs b/components/net/http_loader.rs index 7a137a94995..f06323ac348 100644 --- a/components/net/http_loader.rs +++ b/components/net/http_loader.rs @@ -2,7 +2,9 @@ * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ +use cookie_storage::CookieSource; use resource_task::{Metadata, TargetedLoadResponse, LoadData, start_sending_opt, ResponseSenders}; +use resource_task::ControlMsg; use resource_task::ProgressMsg::{Payload, Done}; use log; @@ -13,19 +15,23 @@ use hyper::header::common::{ContentLength, ContentType, Host, Location}; use hyper::HttpError; use hyper::method::Method; use hyper::net::HttpConnector; -use hyper::status::StatusClass; +use hyper::status::{StatusCode, StatusClass}; use std::error::Error; use openssl::ssl::{SslContext, SslVerifyMode}; use std::io::{IoError, IoErrorKind, Reader}; -use std::sync::mpsc::Sender; +use std::sync::mpsc::{Sender, channel}; +use std::thunk::Invoke; use util::task::spawn_named; use util::resource_files::resources_dir_path; use url::{Url, UrlParser}; use std::borrow::ToOwned; -pub fn factory(load_data: LoadData, start_chan: Sender<TargetedLoadResponse>) { - spawn_named("http_loader".to_owned(), move || load(load_data, start_chan)) +pub fn factory(cookies_chan: Sender<ControlMsg>) + -> Box<Invoke<(LoadData, Sender<TargetedLoadResponse>)> + Send> { + box move |:(load_data, start_chan)| { + spawn_named("http_loader".to_owned(), move || load(load_data, start_chan, cookies_chan)) + } } fn send_error(url: Url, err: String, senders: ResponseSenders) { @@ -38,7 +44,7 @@ fn send_error(url: Url, err: String, senders: ResponseSenders) { }; } -fn load(load_data: LoadData, start_chan: Sender<TargetedLoadResponse>) { +fn load(mut load_data: LoadData, start_chan: Sender<TargetedLoadResponse>, cookies_chan: Sender<ControlMsg>) { // FIXME: At the time of writing this FIXME, servo didn't have any central // location for configuration. If you're reading this and such a // repository DOES exist, please update this constant to use it. @@ -61,13 +67,6 @@ fn load(load_data: LoadData, start_chan: Sender<TargetedLoadResponse>) { return; } - if redirected_to.contains(&url) { - send_error(url, "redirect loop".to_string(), senders); - return; - } - - redirected_to.insert(url.clone()); - match url.scheme.as_slice() { "http" | "https" => {} _ => { @@ -111,15 +110,45 @@ reason: \"certificate verify failed\" }]"; // Preserve the `host` header set automatically by Request. let host = req.headers().get::<Host>().unwrap().clone(); - *req.headers_mut() = load_data.headers.clone(); + + // Avoid automatically preserving request headers when redirects occur. + // See https://bugzilla.mozilla.org/show_bug.cgi?id=401564 and + // https://bugzilla.mozilla.org/show_bug.cgi?id=216828 . + // Only preserve ones which have been explicitly marked as such. + if iters == 1 { + let mut combined_headers = load_data.headers.clone(); + combined_headers.extend(load_data.preserved_headers.iter()); + *req.headers_mut() = combined_headers; + } else { + *req.headers_mut() = load_data.preserved_headers.clone(); + } + req.headers_mut().set(host); + + let (tx, rx) = channel(); + cookies_chan.send(ControlMsg::GetCookiesForUrl(url.clone(), tx, CookieSource::HTTP)); + if let Some(cookie_list) = rx.recv().unwrap() { + let mut v = Vec::new(); + v.push(cookie_list.into_bytes()); + req.headers_mut().set_raw("Cookie".to_owned(), v); + } + // FIXME(seanmonstar): use AcceptEncoding from Hyper once available //if !req.headers.has::<AcceptEncoding>() { // We currently don't support HTTP Compression (FIXME #2587) req.headers_mut().set_raw("Accept-Encoding".to_owned(), vec![b"identity".to_vec()]); //} + if log_enabled!(log::INFO) { + info!("{}", load_data.method); + for header in req.headers().iter() { + info!(" - {}", header); + } + info!("{:?}", load_data.data); + } + + // Avoid automatically sending request body if a redirect has occurred. let writer = match load_data.data { - Some(ref data) => { + Some(ref data) if iters == 1 => { req.headers_mut().set(ContentLength(data.len() as u64)); let mut writer = match req.start() { Ok(w) => w, @@ -137,7 +166,7 @@ reason: \"certificate verify failed\" }]"; }; writer }, - None => { + _ => { match load_data.method { Method::Get | Method::Head => (), _ => req.headers_mut().set(ContentLength(0)) @@ -167,6 +196,16 @@ reason: \"certificate verify failed\" }]"; } } + if let Some(cookies) = response.headers.get_raw("set-cookie") { + for cookie in cookies.iter() { + if let Ok(cookies) = String::from_utf8(cookie.clone()) { + cookies_chan.send(ControlMsg::SetCookiesForUrl(url.clone(), + cookies, + CookieSource::HTTP)); + } + } + } + if response.status.class() == StatusClass::Redirection { match response.headers.get::<Location>() { Some(&Location(ref new_url)) => { @@ -193,6 +232,21 @@ reason: \"certificate verify failed\" }]"; }; info!("redirecting to {}", new_url); url = new_url; + + // According to https://tools.ietf.org/html/rfc7231#section-6.4.2, + // historically UAs have rewritten POST->GET on 301 and 302 responses. + if load_data.method == Method::Post && + (response.status == StatusCode::MovedPermanently || + response.status == StatusCode::Found) { + load_data.method = Method::Get; + } + + if redirected_to.contains(&url) { + send_error(url, "redirect loop".to_string(), senders); + return; + } + + redirected_to.insert(url.clone()); continue; } None => () diff --git a/components/net/image_cache_task.rs b/components/net/image_cache_task.rs index f94da999a9f..ddf80570d10 100644 --- a/components/net/image_cache_task.rs +++ b/components/net/image_cache_task.rs @@ -568,7 +568,8 @@ mod tests { Url::parse("file:///fake").unwrap())); on_load.invoke(chan); } - resource_task::ControlMsg::Exit => break + resource_task::ControlMsg::Exit => break, + _ => {} } } }) @@ -730,6 +731,7 @@ mod tests { resource_task_exited_chan.send(()); break } + _ => {} } } }); @@ -762,7 +764,6 @@ mod tests { let (image_bin_sent_chan, image_bin_sent) = channel(); let (resource_task_exited_chan, resource_task_exited) = channel(); - let mock_resource_task = spawn_listener(move |port: Receiver<resource_task::ControlMsg>| { loop { match port.recv().unwrap() { @@ -782,6 +783,7 @@ mod tests { resource_task_exited_chan.send(()); break } + _ => {} } } }); diff --git a/components/net/lib.rs b/components/net/lib.rs index 130df50aa4d..a1ea9f95bde 100644 --- a/components/net/lib.rs +++ b/components/net/lib.rs @@ -11,6 +11,7 @@ #![allow(missing_copy_implementations)] #![allow(unstable)] +extern crate "cookie" as cookie_rs; extern crate collections; extern crate geom; extern crate hyper; @@ -38,8 +39,11 @@ pub mod about_loader; pub mod file_loader; pub mod http_loader; pub mod data_loader; +pub mod cookie; +pub mod cookie_storage; pub mod image_cache_task; pub mod local_image_cache; +pub mod pub_domains; pub mod resource_task; pub mod storage_task; mod sniffer_task; diff --git a/components/net/pub_domains.rs b/components/net/pub_domains.rs new file mode 100644 index 00000000000..906b942f1be --- /dev/null +++ b/components/net/pub_domains.rs @@ -0,0 +1,5959 @@ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +pub static PUB_DOMAINS : [&'static str; 5953] = [ +"com.ac", +"edu.ac", +"gov.ac", +"net.ac", +"mil.ac", +"org.ac", +"nom.ad", +"co.ae", +"net.ae", +"org.ae", +"sch.ae", +"ac.ae", +"gov.ae", +"mil.ae", +"accident-investigation.aero", +"accident-prevention.aero", +"aerobatic.aero", +"aeroclub.aero", +"aerodrome.aero", +"agents.aero", +"aircraft.aero", +"airline.aero", +"airport.aero", +"air-surveillance.aero", +"airtraffic.aero", +"air-traffic-control.aero", +"ambulance.aero", +"amusement.aero", +"association.aero", +"author.aero", +"ballooning.aero", +"broker.aero", +"caa.aero", +"cargo.aero", +"catering.aero", +"certification.aero", +"championship.aero", +"charter.aero", +"civilaviation.aero", +"club.aero", +"conference.aero", +"consultant.aero", +"consulting.aero", +"control.aero", +"council.aero", +"crew.aero", +"design.aero", +"dgca.aero", +"educator.aero", +"emergency.aero", +"engine.aero", +"engineer.aero", +"entertainment.aero", +"equipment.aero", +"exchange.aero", +"express.aero", +"federation.aero", +"flight.aero", +"freight.aero", +"fuel.aero", +"gliding.aero", +"government.aero", +"groundhandling.aero", +"group.aero", +"hanggliding.aero", +"homebuilt.aero", +"insurance.aero", +"journal.aero", +"journalist.aero", +"leasing.aero", +"logistics.aero", +"magazine.aero", +"maintenance.aero", +"marketplace.aero", +"media.aero", +"microlight.aero", +"modelling.aero", +"navigation.aero", +"parachuting.aero", +"paragliding.aero", +"passenger-association.aero", +"pilot.aero", +"press.aero", +"production.aero", +"recreation.aero", +"repbody.aero", +"res.aero", +"research.aero", +"rotorcraft.aero", +"safety.aero", +"scientist.aero", +"services.aero", +"show.aero", +"skydiving.aero", +"software.aero", +"student.aero", +"taxi.aero", +"trader.aero", +"trading.aero", +"trainer.aero", +"union.aero", +"workinggroup.aero", +"works.aero", +"gov.af", +"com.af", +"org.af", +"net.af", +"edu.af", +"com.ag", +"org.ag", +"net.ag", +"co.ag", +"nom.ag", +"off.ai", +"com.ai", +"net.ai", +"org.ai", +"com.al", +"edu.al", +"gov.al", +"mil.al", +"net.al", +"org.al", +"com.an", +"net.an", +"org.an", +"edu.an", +"ed.ao", +"gv.ao", +"og.ao", +"co.ao", +"pb.ao", +"it.ao", +"com.ar", +"edu.ar", +"gob.ar", +"int.ar", +"mil.ar", +"net.ar", +"org.ar", +"tur.ar", +"e164.arpa", +"in-addr.arpa", +"ip6.arpa", +"iris.arpa", +"uri.arpa", +"urn.arpa", +"gov.as", +"ac.at", +"co.at", +"gv.at", +"or.at", +"com.au", +"net.au", +"org.au", +"edu.au", +"gov.au", +"asn.au", +"id.au", +"csiro.au", +"info.au", +"conf.au", +"oz.au", +"act.au", +"nsw.au", +"nt.au", +"qld.au", +"sa.au", +"tas.au", +"vic.au", +"wa.au", +"act.edu.au", +"nsw.edu.au", +"nt.edu.au", +"qld.edu.au", +"sa.edu.au", +"tas.edu.au", +"vic.edu.au", +"wa.edu.au", +"act.gov.au", +"qld.gov.au", +"sa.gov.au", +"tas.gov.au", +"vic.gov.au", +"wa.gov.au", +"com.aw", +"com.az", +"net.az", +"int.az", +"gov.az", +"org.az", +"edu.az", +"info.az", +"pp.az", +"mil.az", +"name.az", +"pro.az", +"biz.az", +"org.ba", +"net.ba", +"edu.ba", +"gov.ba", +"mil.ba", +"unsa.ba", +"unbi.ba", +"co.ba", +"com.ba", +"rs.ba", +"biz.bb", +"com.bb", +"edu.bb", +"gov.bb", +"info.bb", +"net.bb", +"org.bb", +"store.bb", +"bd", +"ac.be", +"gov.bf", +"a.bg", +"b.bg", +"c.bg", +"d.bg", +"e.bg", +"f.bg", +"g.bg", +"h.bg", +"i.bg", +"j.bg", +"k.bg", +"l.bg", +"m.bg", +"n.bg", +"o.bg", +"p.bg", +"q.bg", +"r.bg", +"s.bg", +"t.bg", +"u.bg", +"v.bg", +"w.bg", +"x.bg", +"y.bg", +"z.bg", +"0.bg", +"1.bg", +"2.bg", +"3.bg", +"4.bg", +"5.bg", +"6.bg", +"7.bg", +"8.bg", +"9.bg", +"com.bh", +"edu.bh", +"net.bh", +"org.bh", +"gov.bh", +"co.bi", +"com.bi", +"edu.bi", +"or.bi", +"org.bi", +"asso.bj", +"barreau.bj", +"gouv.bj", +"com.bm", +"edu.bm", +"gov.bm", +"net.bm", +"org.bm", +"bn", +"com.bo", +"edu.bo", +"gov.bo", +"gob.bo", +"int.bo", +"org.bo", +"net.bo", +"mil.bo", +"tv.bo", +"adm.br", +"adv.br", +"agr.br", +"am.br", +"arq.br", +"art.br", +"ato.br", +"b.br", +"bio.br", +"blog.br", +"bmd.br", +"cim.br", +"cng.br", +"cnt.br", +"com.br", +"coop.br", +"ecn.br", +"eco.br", +"edu.br", +"emp.br", +"eng.br", +"esp.br", +"etc.br", +"eti.br", +"far.br", +"flog.br", +"fm.br", +"fnd.br", +"fot.br", +"fst.br", +"g12.br", +"ggf.br", +"gov.br", +"imb.br", +"ind.br", +"inf.br", +"jor.br", +"jus.br", +"leg.br", +"lel.br", +"mat.br", +"med.br", +"mil.br", +"mp.br", +"mus.br", +"net.br", +"nom.br", +"not.br", +"ntr.br", +"odo.br", +"org.br", +"ppg.br", +"pro.br", +"psc.br", +"psi.br", +"qsl.br", +"radio.br", +"rec.br", +"slg.br", +"srv.br", +"taxi.br", +"teo.br", +"tmp.br", +"trd.br", +"tur.br", +"tv.br", +"vet.br", +"vlog.br", +"wiki.br", +"zlg.br", +"com.bs", +"net.bs", +"org.bs", +"edu.bs", +"gov.bs", +"com.bt", +"edu.bt", +"gov.bt", +"net.bt", +"org.bt", +"co.bw", +"org.bw", +"gov.by", +"mil.by", +"com.by", +"of.by", +"com.bz", +"net.bz", +"org.bz", +"edu.bz", +"gov.bz", +"ab.ca", +"bc.ca", +"mb.ca", +"nb.ca", +"nf.ca", +"nl.ca", +"ns.ca", +"nt.ca", +"nu.ca", +"on.ca", +"pe.ca", +"qc.ca", +"sk.ca", +"yk.ca", +"gc.ca", +"gov.cd", +"org.ci", +"or.ci", +"com.ci", +"co.ci", +"edu.ci", +"ed.ci", +"ac.ci", +"net.ci", +"go.ci", +"asso.ci", +"xn--aroport-bya.ci", +"int.ci", +"presse.ci", +"md.ci", +"gouv.ci", +"ck", +"www.ck", +"gov.cl", +"gob.cl", +"co.cl", +"mil.cl", +"gov.cm", +"ac.cn", +"com.cn", +"edu.cn", +"gov.cn", +"net.cn", +"org.cn", +"mil.cn", +"xn--55qx5d.cn", +"xn--io0a7i.cn", +"xn--od0alg.cn", +"ah.cn", +"bj.cn", +"cq.cn", +"fj.cn", +"gd.cn", +"gs.cn", +"gz.cn", +"gx.cn", +"ha.cn", +"hb.cn", +"he.cn", +"hi.cn", +"hl.cn", +"hn.cn", +"jl.cn", +"js.cn", +"jx.cn", +"ln.cn", +"nm.cn", +"nx.cn", +"qh.cn", +"sc.cn", +"sd.cn", +"sh.cn", +"sn.cn", +"sx.cn", +"tj.cn", +"xj.cn", +"xz.cn", +"yn.cn", +"zj.cn", +"hk.cn", +"mo.cn", +"tw.cn", +"arts.co", +"com.co", +"edu.co", +"firm.co", +"gov.co", +"info.co", +"int.co", +"mil.co", +"net.co", +"nom.co", +"org.co", +"rec.co", +"web.co", +"ac.cr", +"co.cr", +"ed.cr", +"fi.cr", +"go.cr", +"or.cr", +"sa.cr", +"com.cu", +"edu.cu", +"org.cu", +"net.cu", +"gov.cu", +"inf.cu", +"com.cw", +"edu.cw", +"net.cw", +"org.cw", +"gov.cx", +"cy", +"com.dm", +"net.dm", +"org.dm", +"edu.dm", +"gov.dm", +"art.do", +"com.do", +"edu.do", +"gob.do", +"gov.do", +"mil.do", +"net.do", +"org.do", +"sld.do", +"web.do", +"com.dz", +"org.dz", +"net.dz", +"gov.dz", +"edu.dz", +"asso.dz", +"pol.dz", +"art.dz", +"com.ec", +"info.ec", +"net.ec", +"fin.ec", +"k12.ec", +"med.ec", +"pro.ec", +"org.ec", +"edu.ec", +"gov.ec", +"gob.ec", +"mil.ec", +"edu.ee", +"gov.ee", +"riik.ee", +"lib.ee", +"med.ee", +"com.ee", +"pri.ee", +"aip.ee", +"org.ee", +"fie.ee", +"com.eg", +"edu.eg", +"eun.eg", +"gov.eg", +"mil.eg", +"name.eg", +"net.eg", +"org.eg", +"sci.eg", +"er", +"com.es", +"nom.es", +"org.es", +"gob.es", +"edu.es", +"et", +"aland.fi", +"fj", +"fk", +"com.fr", +"asso.fr", +"nom.fr", +"prd.fr", +"presse.fr", +"tm.fr", +"aeroport.fr", +"assedic.fr", +"avocat.fr", +"avoues.fr", +"cci.fr", +"chambagri.fr", +"chirurgiens-dentistes.fr", +"experts-comptables.fr", +"geometre-expert.fr", +"gouv.fr", +"greta.fr", +"huissier-justice.fr", +"medecin.fr", +"notaires.fr", +"pharmacien.fr", +"port.fr", +"veterinaire.fr", +"com.ge", +"edu.ge", +"gov.ge", +"org.ge", +"mil.ge", +"net.ge", +"pvt.ge", +"co.gg", +"net.gg", +"org.gg", +"com.gh", +"edu.gh", +"gov.gh", +"org.gh", +"mil.gh", +"com.gi", +"ltd.gi", +"gov.gi", +"mod.gi", +"edu.gi", +"org.gi", +"ac.gn", +"com.gn", +"edu.gn", +"gov.gn", +"org.gn", +"net.gn", +"com.gp", +"net.gp", +"mobi.gp", +"edu.gp", +"org.gp", +"asso.gp", +"com.gr", +"edu.gr", +"net.gr", +"org.gr", +"gov.gr", +"com.gt", +"edu.gt", +"gob.gt", +"ind.gt", +"mil.gt", +"net.gt", +"org.gt", +"gu", +"co.gy", +"com.gy", +"net.gy", +"com.hk", +"edu.hk", +"gov.hk", +"idv.hk", +"net.hk", +"org.hk", +"xn--55qx5d.hk", +"xn--wcvs22d.hk", +"xn--lcvr32d.hk", +"xn--mxtq1m.hk", +"xn--gmqw5a.hk", +"xn--ciqpn.hk", +"xn--gmq050i.hk", +"xn--zf0avx.hk", +"xn--io0a7i.hk", +"xn--mk0axi.hk", +"xn--od0alg.hk", +"xn--od0aq3b.hk", +"xn--tn0ag.hk", +"xn--uc0atv.hk", +"xn--uc0ay4a.hk", +"com.hn", +"edu.hn", +"org.hn", +"net.hn", +"mil.hn", +"gob.hn", +"iz.hr", +"from.hr", +"name.hr", +"com.hr", +"com.ht", +"shop.ht", +"firm.ht", +"info.ht", +"adult.ht", +"net.ht", +"pro.ht", +"org.ht", +"med.ht", +"art.ht", +"coop.ht", +"pol.ht", +"asso.ht", +"edu.ht", +"rel.ht", +"gouv.ht", +"perso.ht", +"co.hu", +"info.hu", +"org.hu", +"priv.hu", +"sport.hu", +"tm.hu", +"2000.hu", +"agrar.hu", +"bolt.hu", +"casino.hu", +"city.hu", +"erotica.hu", +"erotika.hu", +"film.hu", +"forum.hu", +"games.hu", +"hotel.hu", +"ingatlan.hu", +"jogasz.hu", +"konyvelo.hu", +"lakas.hu", +"media.hu", +"news.hu", +"reklam.hu", +"sex.hu", +"shop.hu", +"suli.hu", +"szex.hu", +"tozsde.hu", +"utazas.hu", +"video.hu", +"ac.id", +"biz.id", +"co.id", +"desa.id", +"go.id", +"mil.id", +"my.id", +"net.id", +"or.id", +"sch.id", +"web.id", +"gov.ie", +"il", +"ac.im", +"co.im", +"com.im", +"ltd.co.im", +"net.im", +"org.im", +"plc.co.im", +"tt.im", +"tv.im", +"co.in", +"firm.in", +"net.in", +"org.in", +"gen.in", +"ind.in", +"nic.in", +"ac.in", +"edu.in", +"res.in", +"gov.in", +"mil.in", +"eu.int", +"com.io", +"gov.iq", +"edu.iq", +"mil.iq", +"com.iq", +"org.iq", +"net.iq", +"ac.ir", +"co.ir", +"gov.ir", +"id.ir", +"net.ir", +"org.ir", +"sch.ir", +"xn--mgba3a4f16a.ir", +"xn--mgba3a4fra.ir", +"net.is", +"com.is", +"edu.is", +"gov.is", +"org.is", +"int.is", +"gov.it", +"edu.it", +"abr.it", +"abruzzo.it", +"aosta-valley.it", +"aostavalley.it", +"bas.it", +"basilicata.it", +"cal.it", +"calabria.it", +"cam.it", +"campania.it", +"emilia-romagna.it", +"emiliaromagna.it", +"emr.it", +"friuli-v-giulia.it", +"friuli-ve-giulia.it", +"friuli-vegiulia.it", +"friuli-venezia-giulia.it", +"friuli-veneziagiulia.it", +"friuli-vgiulia.it", +"friuliv-giulia.it", +"friulive-giulia.it", +"friulivegiulia.it", +"friulivenezia-giulia.it", +"friuliveneziagiulia.it", +"friulivgiulia.it", +"fvg.it", +"laz.it", +"lazio.it", +"lig.it", +"liguria.it", +"lom.it", +"lombardia.it", +"lombardy.it", +"lucania.it", +"mar.it", +"marche.it", +"mol.it", +"molise.it", +"piedmont.it", +"piemonte.it", +"pmn.it", +"pug.it", +"puglia.it", +"sar.it", +"sardegna.it", +"sardinia.it", +"sic.it", +"sicilia.it", +"sicily.it", +"taa.it", +"tos.it", +"toscana.it", +"trentino-a-adige.it", +"trentino-aadige.it", +"trentino-alto-adige.it", +"trentino-altoadige.it", +"trentino-s-tirol.it", +"trentino-stirol.it", +"trentino-sud-tirol.it", +"trentino-sudtirol.it", +"trentino-sued-tirol.it", +"trentino-suedtirol.it", +"trentinoa-adige.it", +"trentinoaadige.it", +"trentinoalto-adige.it", +"trentinoaltoadige.it", +"trentinos-tirol.it", +"trentinostirol.it", +"trentinosud-tirol.it", +"trentinosudtirol.it", +"trentinosued-tirol.it", +"trentinosuedtirol.it", +"tuscany.it", +"umb.it", +"umbria.it", +"val-d-aosta.it", +"val-daosta.it", +"vald-aosta.it", +"valdaosta.it", +"valle-aosta.it", +"valle-d-aosta.it", +"valle-daosta.it", +"valleaosta.it", +"valled-aosta.it", +"valledaosta.it", +"vallee-aoste.it", +"valleeaoste.it", +"vao.it", +"vda.it", +"ven.it", +"veneto.it", +"ag.it", +"agrigento.it", +"al.it", +"alessandria.it", +"alto-adige.it", +"altoadige.it", +"an.it", +"ancona.it", +"andria-barletta-trani.it", +"andria-trani-barletta.it", +"andriabarlettatrani.it", +"andriatranibarletta.it", +"ao.it", +"aosta.it", +"aoste.it", +"ap.it", +"aq.it", +"aquila.it", +"ar.it", +"arezzo.it", +"ascoli-piceno.it", +"ascolipiceno.it", +"asti.it", +"at.it", +"av.it", +"avellino.it", +"ba.it", +"balsan.it", +"bari.it", +"barletta-trani-andria.it", +"barlettatraniandria.it", +"belluno.it", +"benevento.it", +"bergamo.it", +"bg.it", +"bi.it", +"biella.it", +"bl.it", +"bn.it", +"bo.it", +"bologna.it", +"bolzano.it", +"bozen.it", +"br.it", +"brescia.it", +"brindisi.it", +"bs.it", +"bt.it", +"bz.it", +"ca.it", +"cagliari.it", +"caltanissetta.it", +"campidano-medio.it", +"campidanomedio.it", +"campobasso.it", +"carbonia-iglesias.it", +"carboniaiglesias.it", +"carrara-massa.it", +"carraramassa.it", +"caserta.it", +"catania.it", +"catanzaro.it", +"cb.it", +"ce.it", +"cesena-forli.it", +"cesenaforli.it", +"ch.it", +"chieti.it", +"ci.it", +"cl.it", +"cn.it", +"co.it", +"como.it", +"cosenza.it", +"cr.it", +"cremona.it", +"crotone.it", +"cs.it", +"ct.it", +"cuneo.it", +"cz.it", +"dell-ogliastra.it", +"dellogliastra.it", +"en.it", +"enna.it", +"fc.it", +"fe.it", +"fermo.it", +"ferrara.it", +"fg.it", +"fi.it", +"firenze.it", +"florence.it", +"fm.it", +"foggia.it", +"forli-cesena.it", +"forlicesena.it", +"fr.it", +"frosinone.it", +"ge.it", +"genoa.it", +"genova.it", +"go.it", +"gorizia.it", +"gr.it", +"grosseto.it", +"iglesias-carbonia.it", +"iglesiascarbonia.it", +"im.it", +"imperia.it", +"is.it", +"isernia.it", +"kr.it", +"la-spezia.it", +"laquila.it", +"laspezia.it", +"latina.it", +"lc.it", +"le.it", +"lecce.it", +"lecco.it", +"li.it", +"livorno.it", +"lo.it", +"lodi.it", +"lt.it", +"lu.it", +"lucca.it", +"macerata.it", +"mantova.it", +"massa-carrara.it", +"massacarrara.it", +"matera.it", +"mb.it", +"mc.it", +"me.it", +"medio-campidano.it", +"mediocampidano.it", +"messina.it", +"mi.it", +"milan.it", +"milano.it", +"mn.it", +"mo.it", +"modena.it", +"monza-brianza.it", +"monza-e-della-brianza.it", +"monza.it", +"monzabrianza.it", +"monzaebrianza.it", +"monzaedellabrianza.it", +"ms.it", +"mt.it", +"na.it", +"naples.it", +"napoli.it", +"no.it", +"novara.it", +"nu.it", +"nuoro.it", +"og.it", +"ogliastra.it", +"olbia-tempio.it", +"olbiatempio.it", +"or.it", +"oristano.it", +"ot.it", +"pa.it", +"padova.it", +"padua.it", +"palermo.it", +"parma.it", +"pavia.it", +"pc.it", +"pd.it", +"pe.it", +"perugia.it", +"pesaro-urbino.it", +"pesarourbino.it", +"pescara.it", +"pg.it", +"pi.it", +"piacenza.it", +"pisa.it", +"pistoia.it", +"pn.it", +"po.it", +"pordenone.it", +"potenza.it", +"pr.it", +"prato.it", +"pt.it", +"pu.it", +"pv.it", +"pz.it", +"ra.it", +"ragusa.it", +"ravenna.it", +"rc.it", +"re.it", +"reggio-calabria.it", +"reggio-emilia.it", +"reggiocalabria.it", +"reggioemilia.it", +"rg.it", +"ri.it", +"rieti.it", +"rimini.it", +"rm.it", +"rn.it", +"ro.it", +"roma.it", +"rome.it", +"rovigo.it", +"sa.it", +"salerno.it", +"sassari.it", +"savona.it", +"si.it", +"siena.it", +"siracusa.it", +"so.it", +"sondrio.it", +"sp.it", +"sr.it", +"ss.it", +"suedtirol.it", +"sv.it", +"ta.it", +"taranto.it", +"te.it", +"tempio-olbia.it", +"tempioolbia.it", +"teramo.it", +"terni.it", +"tn.it", +"to.it", +"torino.it", +"tp.it", +"tr.it", +"trani-andria-barletta.it", +"trani-barletta-andria.it", +"traniandriabarletta.it", +"tranibarlettaandria.it", +"trapani.it", +"trentino.it", +"trento.it", +"treviso.it", +"trieste.it", +"ts.it", +"turin.it", +"tv.it", +"ud.it", +"udine.it", +"urbino-pesaro.it", +"urbinopesaro.it", +"va.it", +"varese.it", +"vb.it", +"vc.it", +"ve.it", +"venezia.it", +"venice.it", +"verbania.it", +"vercelli.it", +"verona.it", +"vi.it", +"vibo-valentia.it", +"vibovalentia.it", +"vicenza.it", +"viterbo.it", +"vr.it", +"vs.it", +"vt.it", +"vv.it", +"co.je", +"net.je", +"org.je", +"jm", +"com.jo", +"org.jo", +"net.jo", +"edu.jo", +"sch.jo", +"gov.jo", +"mil.jo", +"name.jo", +"ac.jp", +"ad.jp", +"co.jp", +"ed.jp", +"go.jp", +"gr.jp", +"lg.jp", +"ne.jp", +"or.jp", +"aichi.jp", +"akita.jp", +"aomori.jp", +"chiba.jp", +"ehime.jp", +"fukui.jp", +"fukuoka.jp", +"fukushima.jp", +"gifu.jp", +"gunma.jp", +"hiroshima.jp", +"hokkaido.jp", +"hyogo.jp", +"ibaraki.jp", +"ishikawa.jp", +"iwate.jp", +"kagawa.jp", +"kagoshima.jp", +"kanagawa.jp", +"kochi.jp", +"kumamoto.jp", +"kyoto.jp", +"mie.jp", +"miyagi.jp", +"miyazaki.jp", +"nagano.jp", +"nagasaki.jp", +"nara.jp", +"niigata.jp", +"oita.jp", +"okayama.jp", +"okinawa.jp", +"osaka.jp", +"saga.jp", +"saitama.jp", +"shiga.jp", +"shimane.jp", +"shizuoka.jp", +"tochigi.jp", +"tokushima.jp", +"tokyo.jp", +"tottori.jp", +"toyama.jp", +"wakayama.jp", +"yamagata.jp", +"yamaguchi.jp", +"yamanashi.jp", +"kawasaki.jp", +"kitakyushu.jp", +"kobe.jp", +"nagoya.jp", +"sapporo.jp", +"sendai.jp", +"yokohama.jp", +"city.kawasaki.jp", +"city.kitakyushu.jp", +"city.kobe.jp", +"city.nagoya.jp", +"city.sapporo.jp", +"city.sendai.jp", +"city.yokohama.jp", +"aisai.aichi.jp", +"ama.aichi.jp", +"anjo.aichi.jp", +"asuke.aichi.jp", +"chiryu.aichi.jp", +"chita.aichi.jp", +"fuso.aichi.jp", +"gamagori.aichi.jp", +"handa.aichi.jp", +"hazu.aichi.jp", +"hekinan.aichi.jp", +"higashiura.aichi.jp", +"ichinomiya.aichi.jp", +"inazawa.aichi.jp", +"inuyama.aichi.jp", +"isshiki.aichi.jp", +"iwakura.aichi.jp", +"kanie.aichi.jp", +"kariya.aichi.jp", +"kasugai.aichi.jp", +"kira.aichi.jp", +"kiyosu.aichi.jp", +"komaki.aichi.jp", +"konan.aichi.jp", +"kota.aichi.jp", +"mihama.aichi.jp", +"miyoshi.aichi.jp", +"nishio.aichi.jp", +"nisshin.aichi.jp", +"obu.aichi.jp", +"oguchi.aichi.jp", +"oharu.aichi.jp", +"okazaki.aichi.jp", +"owariasahi.aichi.jp", +"seto.aichi.jp", +"shikatsu.aichi.jp", +"shinshiro.aichi.jp", +"shitara.aichi.jp", +"tahara.aichi.jp", +"takahama.aichi.jp", +"tobishima.aichi.jp", +"toei.aichi.jp", +"togo.aichi.jp", +"tokai.aichi.jp", +"tokoname.aichi.jp", +"toyoake.aichi.jp", +"toyohashi.aichi.jp", +"toyokawa.aichi.jp", +"toyone.aichi.jp", +"toyota.aichi.jp", +"tsushima.aichi.jp", +"yatomi.aichi.jp", +"akita.akita.jp", +"daisen.akita.jp", +"fujisato.akita.jp", +"gojome.akita.jp", +"hachirogata.akita.jp", +"happou.akita.jp", +"higashinaruse.akita.jp", +"honjo.akita.jp", +"honjyo.akita.jp", +"ikawa.akita.jp", +"kamikoani.akita.jp", +"kamioka.akita.jp", +"katagami.akita.jp", +"kazuno.akita.jp", +"kitaakita.akita.jp", +"kosaka.akita.jp", +"kyowa.akita.jp", +"misato.akita.jp", +"mitane.akita.jp", +"moriyoshi.akita.jp", +"nikaho.akita.jp", +"noshiro.akita.jp", +"odate.akita.jp", +"oga.akita.jp", +"ogata.akita.jp", +"semboku.akita.jp", +"yokote.akita.jp", +"yurihonjo.akita.jp", +"aomori.aomori.jp", +"gonohe.aomori.jp", +"hachinohe.aomori.jp", +"hashikami.aomori.jp", +"hiranai.aomori.jp", +"hirosaki.aomori.jp", +"itayanagi.aomori.jp", +"kuroishi.aomori.jp", +"misawa.aomori.jp", +"mutsu.aomori.jp", +"nakadomari.aomori.jp", +"noheji.aomori.jp", +"oirase.aomori.jp", +"owani.aomori.jp", +"rokunohe.aomori.jp", +"sannohe.aomori.jp", +"shichinohe.aomori.jp", +"shingo.aomori.jp", +"takko.aomori.jp", +"towada.aomori.jp", +"tsugaru.aomori.jp", +"tsuruta.aomori.jp", +"abiko.chiba.jp", +"asahi.chiba.jp", +"chonan.chiba.jp", +"chosei.chiba.jp", +"choshi.chiba.jp", +"chuo.chiba.jp", +"funabashi.chiba.jp", +"futtsu.chiba.jp", +"hanamigawa.chiba.jp", +"ichihara.chiba.jp", +"ichikawa.chiba.jp", +"ichinomiya.chiba.jp", +"inzai.chiba.jp", +"isumi.chiba.jp", +"kamagaya.chiba.jp", +"kamogawa.chiba.jp", +"kashiwa.chiba.jp", +"katori.chiba.jp", +"katsuura.chiba.jp", +"kimitsu.chiba.jp", +"kisarazu.chiba.jp", +"kozaki.chiba.jp", +"kujukuri.chiba.jp", +"kyonan.chiba.jp", +"matsudo.chiba.jp", +"midori.chiba.jp", +"mihama.chiba.jp", +"minamiboso.chiba.jp", +"mobara.chiba.jp", +"mutsuzawa.chiba.jp", +"nagara.chiba.jp", +"nagareyama.chiba.jp", +"narashino.chiba.jp", +"narita.chiba.jp", +"noda.chiba.jp", +"oamishirasato.chiba.jp", +"omigawa.chiba.jp", +"onjuku.chiba.jp", +"otaki.chiba.jp", +"sakae.chiba.jp", +"sakura.chiba.jp", +"shimofusa.chiba.jp", +"shirako.chiba.jp", +"shiroi.chiba.jp", +"shisui.chiba.jp", +"sodegaura.chiba.jp", +"sosa.chiba.jp", +"tako.chiba.jp", +"tateyama.chiba.jp", +"togane.chiba.jp", +"tohnosho.chiba.jp", +"tomisato.chiba.jp", +"urayasu.chiba.jp", +"yachimata.chiba.jp", +"yachiyo.chiba.jp", +"yokaichiba.chiba.jp", +"yokoshibahikari.chiba.jp", +"yotsukaido.chiba.jp", +"ainan.ehime.jp", +"honai.ehime.jp", +"ikata.ehime.jp", +"imabari.ehime.jp", +"iyo.ehime.jp", +"kamijima.ehime.jp", +"kihoku.ehime.jp", +"kumakogen.ehime.jp", +"masaki.ehime.jp", +"matsuno.ehime.jp", +"matsuyama.ehime.jp", +"namikata.ehime.jp", +"niihama.ehime.jp", +"ozu.ehime.jp", +"saijo.ehime.jp", +"seiyo.ehime.jp", +"shikokuchuo.ehime.jp", +"tobe.ehime.jp", +"toon.ehime.jp", +"uchiko.ehime.jp", +"uwajima.ehime.jp", +"yawatahama.ehime.jp", +"echizen.fukui.jp", +"eiheiji.fukui.jp", +"fukui.fukui.jp", +"ikeda.fukui.jp", +"katsuyama.fukui.jp", +"mihama.fukui.jp", +"minamiechizen.fukui.jp", +"obama.fukui.jp", +"ohi.fukui.jp", +"ono.fukui.jp", +"sabae.fukui.jp", +"sakai.fukui.jp", +"takahama.fukui.jp", +"tsuruga.fukui.jp", +"wakasa.fukui.jp", +"ashiya.fukuoka.jp", +"buzen.fukuoka.jp", +"chikugo.fukuoka.jp", +"chikuho.fukuoka.jp", +"chikujo.fukuoka.jp", +"chikushino.fukuoka.jp", +"chikuzen.fukuoka.jp", +"chuo.fukuoka.jp", +"dazaifu.fukuoka.jp", +"fukuchi.fukuoka.jp", +"hakata.fukuoka.jp", +"higashi.fukuoka.jp", +"hirokawa.fukuoka.jp", +"hisayama.fukuoka.jp", +"iizuka.fukuoka.jp", +"inatsuki.fukuoka.jp", +"kaho.fukuoka.jp", +"kasuga.fukuoka.jp", +"kasuya.fukuoka.jp", +"kawara.fukuoka.jp", +"keisen.fukuoka.jp", +"koga.fukuoka.jp", +"kurate.fukuoka.jp", +"kurogi.fukuoka.jp", +"kurume.fukuoka.jp", +"minami.fukuoka.jp", +"miyako.fukuoka.jp", +"miyama.fukuoka.jp", +"miyawaka.fukuoka.jp", +"mizumaki.fukuoka.jp", +"munakata.fukuoka.jp", +"nakagawa.fukuoka.jp", +"nakama.fukuoka.jp", +"nishi.fukuoka.jp", +"nogata.fukuoka.jp", +"ogori.fukuoka.jp", +"okagaki.fukuoka.jp", +"okawa.fukuoka.jp", +"oki.fukuoka.jp", +"omuta.fukuoka.jp", +"onga.fukuoka.jp", +"onojo.fukuoka.jp", +"oto.fukuoka.jp", +"saigawa.fukuoka.jp", +"sasaguri.fukuoka.jp", +"shingu.fukuoka.jp", +"shinyoshitomi.fukuoka.jp", +"shonai.fukuoka.jp", +"soeda.fukuoka.jp", +"sue.fukuoka.jp", +"tachiarai.fukuoka.jp", +"tagawa.fukuoka.jp", +"takata.fukuoka.jp", +"toho.fukuoka.jp", +"toyotsu.fukuoka.jp", +"tsuiki.fukuoka.jp", +"ukiha.fukuoka.jp", +"umi.fukuoka.jp", +"usui.fukuoka.jp", +"yamada.fukuoka.jp", +"yame.fukuoka.jp", +"yanagawa.fukuoka.jp", +"yukuhashi.fukuoka.jp", +"aizubange.fukushima.jp", +"aizumisato.fukushima.jp", +"aizuwakamatsu.fukushima.jp", +"asakawa.fukushima.jp", +"bandai.fukushima.jp", +"date.fukushima.jp", +"fukushima.fukushima.jp", +"furudono.fukushima.jp", +"futaba.fukushima.jp", +"hanawa.fukushima.jp", +"higashi.fukushima.jp", +"hirata.fukushima.jp", +"hirono.fukushima.jp", +"iitate.fukushima.jp", +"inawashiro.fukushima.jp", +"ishikawa.fukushima.jp", +"iwaki.fukushima.jp", +"izumizaki.fukushima.jp", +"kagamiishi.fukushima.jp", +"kaneyama.fukushima.jp", +"kawamata.fukushima.jp", +"kitakata.fukushima.jp", +"kitashiobara.fukushima.jp", +"koori.fukushima.jp", +"koriyama.fukushima.jp", +"kunimi.fukushima.jp", +"miharu.fukushima.jp", +"mishima.fukushima.jp", +"namie.fukushima.jp", +"nango.fukushima.jp", +"nishiaizu.fukushima.jp", +"nishigo.fukushima.jp", +"okuma.fukushima.jp", +"omotego.fukushima.jp", +"ono.fukushima.jp", +"otama.fukushima.jp", +"samegawa.fukushima.jp", +"shimogo.fukushima.jp", +"shirakawa.fukushima.jp", +"showa.fukushima.jp", +"soma.fukushima.jp", +"sukagawa.fukushima.jp", +"taishin.fukushima.jp", +"tamakawa.fukushima.jp", +"tanagura.fukushima.jp", +"tenei.fukushima.jp", +"yabuki.fukushima.jp", +"yamato.fukushima.jp", +"yamatsuri.fukushima.jp", +"yanaizu.fukushima.jp", +"yugawa.fukushima.jp", +"anpachi.gifu.jp", +"ena.gifu.jp", +"gifu.gifu.jp", +"ginan.gifu.jp", +"godo.gifu.jp", +"gujo.gifu.jp", +"hashima.gifu.jp", +"hichiso.gifu.jp", +"hida.gifu.jp", +"higashishirakawa.gifu.jp", +"ibigawa.gifu.jp", +"ikeda.gifu.jp", +"kakamigahara.gifu.jp", +"kani.gifu.jp", +"kasahara.gifu.jp", +"kasamatsu.gifu.jp", +"kawaue.gifu.jp", +"kitagata.gifu.jp", +"mino.gifu.jp", +"minokamo.gifu.jp", +"mitake.gifu.jp", +"mizunami.gifu.jp", +"motosu.gifu.jp", +"nakatsugawa.gifu.jp", +"ogaki.gifu.jp", +"sakahogi.gifu.jp", +"seki.gifu.jp", +"sekigahara.gifu.jp", +"shirakawa.gifu.jp", +"tajimi.gifu.jp", +"takayama.gifu.jp", +"tarui.gifu.jp", +"toki.gifu.jp", +"tomika.gifu.jp", +"wanouchi.gifu.jp", +"yamagata.gifu.jp", +"yaotsu.gifu.jp", +"yoro.gifu.jp", +"annaka.gunma.jp", +"chiyoda.gunma.jp", +"fujioka.gunma.jp", +"higashiagatsuma.gunma.jp", +"isesaki.gunma.jp", +"itakura.gunma.jp", +"kanna.gunma.jp", +"kanra.gunma.jp", +"katashina.gunma.jp", +"kawaba.gunma.jp", +"kiryu.gunma.jp", +"kusatsu.gunma.jp", +"maebashi.gunma.jp", +"meiwa.gunma.jp", +"midori.gunma.jp", +"minakami.gunma.jp", +"naganohara.gunma.jp", +"nakanojo.gunma.jp", +"nanmoku.gunma.jp", +"numata.gunma.jp", +"oizumi.gunma.jp", +"ora.gunma.jp", +"ota.gunma.jp", +"shibukawa.gunma.jp", +"shimonita.gunma.jp", +"shinto.gunma.jp", +"showa.gunma.jp", +"takasaki.gunma.jp", +"takayama.gunma.jp", +"tamamura.gunma.jp", +"tatebayashi.gunma.jp", +"tomioka.gunma.jp", +"tsukiyono.gunma.jp", +"tsumagoi.gunma.jp", +"ueno.gunma.jp", +"yoshioka.gunma.jp", +"asaminami.hiroshima.jp", +"daiwa.hiroshima.jp", +"etajima.hiroshima.jp", +"fuchu.hiroshima.jp", +"fukuyama.hiroshima.jp", +"hatsukaichi.hiroshima.jp", +"higashihiroshima.hiroshima.jp", +"hongo.hiroshima.jp", +"jinsekikogen.hiroshima.jp", +"kaita.hiroshima.jp", +"kui.hiroshima.jp", +"kumano.hiroshima.jp", +"kure.hiroshima.jp", +"mihara.hiroshima.jp", +"miyoshi.hiroshima.jp", +"naka.hiroshima.jp", +"onomichi.hiroshima.jp", +"osakikamijima.hiroshima.jp", +"otake.hiroshima.jp", +"saka.hiroshima.jp", +"sera.hiroshima.jp", +"seranishi.hiroshima.jp", +"shinichi.hiroshima.jp", +"shobara.hiroshima.jp", +"takehara.hiroshima.jp", +"abashiri.hokkaido.jp", +"abira.hokkaido.jp", +"aibetsu.hokkaido.jp", +"akabira.hokkaido.jp", +"akkeshi.hokkaido.jp", +"asahikawa.hokkaido.jp", +"ashibetsu.hokkaido.jp", +"ashoro.hokkaido.jp", +"assabu.hokkaido.jp", +"atsuma.hokkaido.jp", +"bibai.hokkaido.jp", +"biei.hokkaido.jp", +"bifuka.hokkaido.jp", +"bihoro.hokkaido.jp", +"biratori.hokkaido.jp", +"chippubetsu.hokkaido.jp", +"chitose.hokkaido.jp", +"date.hokkaido.jp", +"ebetsu.hokkaido.jp", +"embetsu.hokkaido.jp", +"eniwa.hokkaido.jp", +"erimo.hokkaido.jp", +"esan.hokkaido.jp", +"esashi.hokkaido.jp", +"fukagawa.hokkaido.jp", +"fukushima.hokkaido.jp", +"furano.hokkaido.jp", +"furubira.hokkaido.jp", +"haboro.hokkaido.jp", +"hakodate.hokkaido.jp", +"hamatonbetsu.hokkaido.jp", +"hidaka.hokkaido.jp", +"higashikagura.hokkaido.jp", +"higashikawa.hokkaido.jp", +"hiroo.hokkaido.jp", +"hokuryu.hokkaido.jp", +"hokuto.hokkaido.jp", +"honbetsu.hokkaido.jp", +"horokanai.hokkaido.jp", +"horonobe.hokkaido.jp", +"ikeda.hokkaido.jp", +"imakane.hokkaido.jp", +"ishikari.hokkaido.jp", +"iwamizawa.hokkaido.jp", +"iwanai.hokkaido.jp", +"kamifurano.hokkaido.jp", +"kamikawa.hokkaido.jp", +"kamishihoro.hokkaido.jp", +"kamisunagawa.hokkaido.jp", +"kamoenai.hokkaido.jp", +"kayabe.hokkaido.jp", +"kembuchi.hokkaido.jp", +"kikonai.hokkaido.jp", +"kimobetsu.hokkaido.jp", +"kitahiroshima.hokkaido.jp", +"kitami.hokkaido.jp", +"kiyosato.hokkaido.jp", +"koshimizu.hokkaido.jp", +"kunneppu.hokkaido.jp", +"kuriyama.hokkaido.jp", +"kuromatsunai.hokkaido.jp", +"kushiro.hokkaido.jp", +"kutchan.hokkaido.jp", +"kyowa.hokkaido.jp", +"mashike.hokkaido.jp", +"matsumae.hokkaido.jp", +"mikasa.hokkaido.jp", +"minamifurano.hokkaido.jp", +"mombetsu.hokkaido.jp", +"moseushi.hokkaido.jp", +"mukawa.hokkaido.jp", +"muroran.hokkaido.jp", +"naie.hokkaido.jp", +"nakagawa.hokkaido.jp", +"nakasatsunai.hokkaido.jp", +"nakatombetsu.hokkaido.jp", +"nanae.hokkaido.jp", +"nanporo.hokkaido.jp", +"nayoro.hokkaido.jp", +"nemuro.hokkaido.jp", +"niikappu.hokkaido.jp", +"niki.hokkaido.jp", +"nishiokoppe.hokkaido.jp", +"noboribetsu.hokkaido.jp", +"numata.hokkaido.jp", +"obihiro.hokkaido.jp", +"obira.hokkaido.jp", +"oketo.hokkaido.jp", +"okoppe.hokkaido.jp", +"otaru.hokkaido.jp", +"otobe.hokkaido.jp", +"otofuke.hokkaido.jp", +"otoineppu.hokkaido.jp", +"oumu.hokkaido.jp", +"ozora.hokkaido.jp", +"pippu.hokkaido.jp", +"rankoshi.hokkaido.jp", +"rebun.hokkaido.jp", +"rikubetsu.hokkaido.jp", +"rishiri.hokkaido.jp", +"rishirifuji.hokkaido.jp", +"saroma.hokkaido.jp", +"sarufutsu.hokkaido.jp", +"shakotan.hokkaido.jp", +"shari.hokkaido.jp", +"shibecha.hokkaido.jp", +"shibetsu.hokkaido.jp", +"shikabe.hokkaido.jp", +"shikaoi.hokkaido.jp", +"shimamaki.hokkaido.jp", +"shimizu.hokkaido.jp", +"shimokawa.hokkaido.jp", +"shinshinotsu.hokkaido.jp", +"shintoku.hokkaido.jp", +"shiranuka.hokkaido.jp", +"shiraoi.hokkaido.jp", +"shiriuchi.hokkaido.jp", +"sobetsu.hokkaido.jp", +"sunagawa.hokkaido.jp", +"taiki.hokkaido.jp", +"takasu.hokkaido.jp", +"takikawa.hokkaido.jp", +"takinoue.hokkaido.jp", +"teshikaga.hokkaido.jp", +"tobetsu.hokkaido.jp", +"tohma.hokkaido.jp", +"tomakomai.hokkaido.jp", +"tomari.hokkaido.jp", +"toya.hokkaido.jp", +"toyako.hokkaido.jp", +"toyotomi.hokkaido.jp", +"toyoura.hokkaido.jp", +"tsubetsu.hokkaido.jp", +"tsukigata.hokkaido.jp", +"urakawa.hokkaido.jp", +"urausu.hokkaido.jp", +"uryu.hokkaido.jp", +"utashinai.hokkaido.jp", +"wakkanai.hokkaido.jp", +"wassamu.hokkaido.jp", +"yakumo.hokkaido.jp", +"yoichi.hokkaido.jp", +"aioi.hyogo.jp", +"akashi.hyogo.jp", +"ako.hyogo.jp", +"amagasaki.hyogo.jp", +"aogaki.hyogo.jp", +"asago.hyogo.jp", +"ashiya.hyogo.jp", +"awaji.hyogo.jp", +"fukusaki.hyogo.jp", +"goshiki.hyogo.jp", +"harima.hyogo.jp", +"himeji.hyogo.jp", +"ichikawa.hyogo.jp", +"inagawa.hyogo.jp", +"itami.hyogo.jp", +"kakogawa.hyogo.jp", +"kamigori.hyogo.jp", +"kamikawa.hyogo.jp", +"kasai.hyogo.jp", +"kasuga.hyogo.jp", +"kawanishi.hyogo.jp", +"miki.hyogo.jp", +"minamiawaji.hyogo.jp", +"nishinomiya.hyogo.jp", +"nishiwaki.hyogo.jp", +"ono.hyogo.jp", +"sanda.hyogo.jp", +"sannan.hyogo.jp", +"sasayama.hyogo.jp", +"sayo.hyogo.jp", +"shingu.hyogo.jp", +"shinonsen.hyogo.jp", +"shiso.hyogo.jp", +"sumoto.hyogo.jp", +"taishi.hyogo.jp", +"taka.hyogo.jp", +"takarazuka.hyogo.jp", +"takasago.hyogo.jp", +"takino.hyogo.jp", +"tamba.hyogo.jp", +"tatsuno.hyogo.jp", +"toyooka.hyogo.jp", +"yabu.hyogo.jp", +"yashiro.hyogo.jp", +"yoka.hyogo.jp", +"yokawa.hyogo.jp", +"ami.ibaraki.jp", +"asahi.ibaraki.jp", +"bando.ibaraki.jp", +"chikusei.ibaraki.jp", +"daigo.ibaraki.jp", +"fujishiro.ibaraki.jp", +"hitachi.ibaraki.jp", +"hitachinaka.ibaraki.jp", +"hitachiomiya.ibaraki.jp", +"hitachiota.ibaraki.jp", +"ibaraki.ibaraki.jp", +"ina.ibaraki.jp", +"inashiki.ibaraki.jp", +"itako.ibaraki.jp", +"iwama.ibaraki.jp", +"joso.ibaraki.jp", +"kamisu.ibaraki.jp", +"kasama.ibaraki.jp", +"kashima.ibaraki.jp", +"kasumigaura.ibaraki.jp", +"koga.ibaraki.jp", +"miho.ibaraki.jp", +"mito.ibaraki.jp", +"moriya.ibaraki.jp", +"naka.ibaraki.jp", +"namegata.ibaraki.jp", +"oarai.ibaraki.jp", +"ogawa.ibaraki.jp", +"omitama.ibaraki.jp", +"ryugasaki.ibaraki.jp", +"sakai.ibaraki.jp", +"sakuragawa.ibaraki.jp", +"shimodate.ibaraki.jp", +"shimotsuma.ibaraki.jp", +"shirosato.ibaraki.jp", +"sowa.ibaraki.jp", +"suifu.ibaraki.jp", +"takahagi.ibaraki.jp", +"tamatsukuri.ibaraki.jp", +"tokai.ibaraki.jp", +"tomobe.ibaraki.jp", +"tone.ibaraki.jp", +"toride.ibaraki.jp", +"tsuchiura.ibaraki.jp", +"tsukuba.ibaraki.jp", +"uchihara.ibaraki.jp", +"ushiku.ibaraki.jp", +"yachiyo.ibaraki.jp", +"yamagata.ibaraki.jp", +"yawara.ibaraki.jp", +"yuki.ibaraki.jp", +"anamizu.ishikawa.jp", +"hakui.ishikawa.jp", +"hakusan.ishikawa.jp", +"kaga.ishikawa.jp", +"kahoku.ishikawa.jp", +"kanazawa.ishikawa.jp", +"kawakita.ishikawa.jp", +"komatsu.ishikawa.jp", +"nakanoto.ishikawa.jp", +"nanao.ishikawa.jp", +"nomi.ishikawa.jp", +"nonoichi.ishikawa.jp", +"noto.ishikawa.jp", +"shika.ishikawa.jp", +"suzu.ishikawa.jp", +"tsubata.ishikawa.jp", +"tsurugi.ishikawa.jp", +"uchinada.ishikawa.jp", +"wajima.ishikawa.jp", +"fudai.iwate.jp", +"fujisawa.iwate.jp", +"hanamaki.iwate.jp", +"hiraizumi.iwate.jp", +"hirono.iwate.jp", +"ichinohe.iwate.jp", +"ichinoseki.iwate.jp", +"iwaizumi.iwate.jp", +"iwate.iwate.jp", +"joboji.iwate.jp", +"kamaishi.iwate.jp", +"kanegasaki.iwate.jp", +"karumai.iwate.jp", +"kawai.iwate.jp", +"kitakami.iwate.jp", +"kuji.iwate.jp", +"kunohe.iwate.jp", +"kuzumaki.iwate.jp", +"miyako.iwate.jp", +"mizusawa.iwate.jp", +"morioka.iwate.jp", +"ninohe.iwate.jp", +"noda.iwate.jp", +"ofunato.iwate.jp", +"oshu.iwate.jp", +"otsuchi.iwate.jp", +"rikuzentakata.iwate.jp", +"shiwa.iwate.jp", +"shizukuishi.iwate.jp", +"sumita.iwate.jp", +"tanohata.iwate.jp", +"tono.iwate.jp", +"yahaba.iwate.jp", +"yamada.iwate.jp", +"ayagawa.kagawa.jp", +"higashikagawa.kagawa.jp", +"kanonji.kagawa.jp", +"kotohira.kagawa.jp", +"manno.kagawa.jp", +"marugame.kagawa.jp", +"mitoyo.kagawa.jp", +"naoshima.kagawa.jp", +"sanuki.kagawa.jp", +"tadotsu.kagawa.jp", +"takamatsu.kagawa.jp", +"tonosho.kagawa.jp", +"uchinomi.kagawa.jp", +"utazu.kagawa.jp", +"zentsuji.kagawa.jp", +"akune.kagoshima.jp", +"amami.kagoshima.jp", +"hioki.kagoshima.jp", +"isa.kagoshima.jp", +"isen.kagoshima.jp", +"izumi.kagoshima.jp", +"kagoshima.kagoshima.jp", +"kanoya.kagoshima.jp", +"kawanabe.kagoshima.jp", +"kinko.kagoshima.jp", +"kouyama.kagoshima.jp", +"makurazaki.kagoshima.jp", +"matsumoto.kagoshima.jp", +"minamitane.kagoshima.jp", +"nakatane.kagoshima.jp", +"nishinoomote.kagoshima.jp", +"satsumasendai.kagoshima.jp", +"soo.kagoshima.jp", +"tarumizu.kagoshima.jp", +"yusui.kagoshima.jp", +"aikawa.kanagawa.jp", +"atsugi.kanagawa.jp", +"ayase.kanagawa.jp", +"chigasaki.kanagawa.jp", +"ebina.kanagawa.jp", +"fujisawa.kanagawa.jp", +"hadano.kanagawa.jp", +"hakone.kanagawa.jp", +"hiratsuka.kanagawa.jp", +"isehara.kanagawa.jp", +"kaisei.kanagawa.jp", +"kamakura.kanagawa.jp", +"kiyokawa.kanagawa.jp", +"matsuda.kanagawa.jp", +"minamiashigara.kanagawa.jp", +"miura.kanagawa.jp", +"nakai.kanagawa.jp", +"ninomiya.kanagawa.jp", +"odawara.kanagawa.jp", +"oi.kanagawa.jp", +"oiso.kanagawa.jp", +"sagamihara.kanagawa.jp", +"samukawa.kanagawa.jp", +"tsukui.kanagawa.jp", +"yamakita.kanagawa.jp", +"yamato.kanagawa.jp", +"yokosuka.kanagawa.jp", +"yugawara.kanagawa.jp", +"zama.kanagawa.jp", +"zushi.kanagawa.jp", +"aki.kochi.jp", +"geisei.kochi.jp", +"hidaka.kochi.jp", +"higashitsuno.kochi.jp", +"ino.kochi.jp", +"kagami.kochi.jp", +"kami.kochi.jp", +"kitagawa.kochi.jp", +"kochi.kochi.jp", +"mihara.kochi.jp", +"motoyama.kochi.jp", +"muroto.kochi.jp", +"nahari.kochi.jp", +"nakamura.kochi.jp", +"nankoku.kochi.jp", +"nishitosa.kochi.jp", +"niyodogawa.kochi.jp", +"ochi.kochi.jp", +"okawa.kochi.jp", +"otoyo.kochi.jp", +"otsuki.kochi.jp", +"sakawa.kochi.jp", +"sukumo.kochi.jp", +"susaki.kochi.jp", +"tosa.kochi.jp", +"tosashimizu.kochi.jp", +"toyo.kochi.jp", +"tsuno.kochi.jp", +"umaji.kochi.jp", +"yasuda.kochi.jp", +"yusuhara.kochi.jp", +"amakusa.kumamoto.jp", +"arao.kumamoto.jp", +"aso.kumamoto.jp", +"choyo.kumamoto.jp", +"gyokuto.kumamoto.jp", +"hitoyoshi.kumamoto.jp", +"kamiamakusa.kumamoto.jp", +"kashima.kumamoto.jp", +"kikuchi.kumamoto.jp", +"kosa.kumamoto.jp", +"kumamoto.kumamoto.jp", +"mashiki.kumamoto.jp", +"mifune.kumamoto.jp", +"minamata.kumamoto.jp", +"minamioguni.kumamoto.jp", +"nagasu.kumamoto.jp", +"nishihara.kumamoto.jp", +"oguni.kumamoto.jp", +"ozu.kumamoto.jp", +"sumoto.kumamoto.jp", +"takamori.kumamoto.jp", +"uki.kumamoto.jp", +"uto.kumamoto.jp", +"yamaga.kumamoto.jp", +"yamato.kumamoto.jp", +"yatsushiro.kumamoto.jp", +"ayabe.kyoto.jp", +"fukuchiyama.kyoto.jp", +"higashiyama.kyoto.jp", +"ide.kyoto.jp", +"ine.kyoto.jp", +"joyo.kyoto.jp", +"kameoka.kyoto.jp", +"kamo.kyoto.jp", +"kita.kyoto.jp", +"kizu.kyoto.jp", +"kumiyama.kyoto.jp", +"kyotamba.kyoto.jp", +"kyotanabe.kyoto.jp", +"kyotango.kyoto.jp", +"maizuru.kyoto.jp", +"minami.kyoto.jp", +"minamiyamashiro.kyoto.jp", +"miyazu.kyoto.jp", +"muko.kyoto.jp", +"nagaokakyo.kyoto.jp", +"nakagyo.kyoto.jp", +"nantan.kyoto.jp", +"oyamazaki.kyoto.jp", +"sakyo.kyoto.jp", +"seika.kyoto.jp", +"tanabe.kyoto.jp", +"uji.kyoto.jp", +"ujitawara.kyoto.jp", +"wazuka.kyoto.jp", +"yamashina.kyoto.jp", +"yawata.kyoto.jp", +"asahi.mie.jp", +"inabe.mie.jp", +"ise.mie.jp", +"kameyama.mie.jp", +"kawagoe.mie.jp", +"kiho.mie.jp", +"kisosaki.mie.jp", +"kiwa.mie.jp", +"komono.mie.jp", +"kumano.mie.jp", +"kuwana.mie.jp", +"matsusaka.mie.jp", +"meiwa.mie.jp", +"mihama.mie.jp", +"minamiise.mie.jp", +"misugi.mie.jp", +"miyama.mie.jp", +"nabari.mie.jp", +"shima.mie.jp", +"suzuka.mie.jp", +"tado.mie.jp", +"taiki.mie.jp", +"taki.mie.jp", +"tamaki.mie.jp", +"toba.mie.jp", +"tsu.mie.jp", +"udono.mie.jp", +"ureshino.mie.jp", +"watarai.mie.jp", +"yokkaichi.mie.jp", +"furukawa.miyagi.jp", +"higashimatsushima.miyagi.jp", +"ishinomaki.miyagi.jp", +"iwanuma.miyagi.jp", +"kakuda.miyagi.jp", +"kami.miyagi.jp", +"kawasaki.miyagi.jp", +"kesennuma.miyagi.jp", +"marumori.miyagi.jp", +"matsushima.miyagi.jp", +"minamisanriku.miyagi.jp", +"misato.miyagi.jp", +"murata.miyagi.jp", +"natori.miyagi.jp", +"ogawara.miyagi.jp", +"ohira.miyagi.jp", +"onagawa.miyagi.jp", +"osaki.miyagi.jp", +"rifu.miyagi.jp", +"semine.miyagi.jp", +"shibata.miyagi.jp", +"shichikashuku.miyagi.jp", +"shikama.miyagi.jp", +"shiogama.miyagi.jp", +"shiroishi.miyagi.jp", +"tagajo.miyagi.jp", +"taiwa.miyagi.jp", +"tome.miyagi.jp", +"tomiya.miyagi.jp", +"wakuya.miyagi.jp", +"watari.miyagi.jp", +"yamamoto.miyagi.jp", +"zao.miyagi.jp", +"aya.miyazaki.jp", +"ebino.miyazaki.jp", +"gokase.miyazaki.jp", +"hyuga.miyazaki.jp", +"kadogawa.miyazaki.jp", +"kawaminami.miyazaki.jp", +"kijo.miyazaki.jp", +"kitagawa.miyazaki.jp", +"kitakata.miyazaki.jp", +"kitaura.miyazaki.jp", +"kobayashi.miyazaki.jp", +"kunitomi.miyazaki.jp", +"kushima.miyazaki.jp", +"mimata.miyazaki.jp", +"miyakonojo.miyazaki.jp", +"miyazaki.miyazaki.jp", +"morotsuka.miyazaki.jp", +"nichinan.miyazaki.jp", +"nishimera.miyazaki.jp", +"nobeoka.miyazaki.jp", +"saito.miyazaki.jp", +"shiiba.miyazaki.jp", +"shintomi.miyazaki.jp", +"takaharu.miyazaki.jp", +"takanabe.miyazaki.jp", +"takazaki.miyazaki.jp", +"tsuno.miyazaki.jp", +"achi.nagano.jp", +"agematsu.nagano.jp", +"anan.nagano.jp", +"aoki.nagano.jp", +"asahi.nagano.jp", +"azumino.nagano.jp", +"chikuhoku.nagano.jp", +"chikuma.nagano.jp", +"chino.nagano.jp", +"fujimi.nagano.jp", +"hakuba.nagano.jp", +"hara.nagano.jp", +"hiraya.nagano.jp", +"iida.nagano.jp", +"iijima.nagano.jp", +"iiyama.nagano.jp", +"iizuna.nagano.jp", +"ikeda.nagano.jp", +"ikusaka.nagano.jp", +"ina.nagano.jp", +"karuizawa.nagano.jp", +"kawakami.nagano.jp", +"kiso.nagano.jp", +"kisofukushima.nagano.jp", +"kitaaiki.nagano.jp", +"komagane.nagano.jp", +"komoro.nagano.jp", +"matsukawa.nagano.jp", +"matsumoto.nagano.jp", +"miasa.nagano.jp", +"minamiaiki.nagano.jp", +"minamimaki.nagano.jp", +"minamiminowa.nagano.jp", +"minowa.nagano.jp", +"miyada.nagano.jp", +"miyota.nagano.jp", +"mochizuki.nagano.jp", +"nagano.nagano.jp", +"nagawa.nagano.jp", +"nagiso.nagano.jp", +"nakagawa.nagano.jp", +"nakano.nagano.jp", +"nozawaonsen.nagano.jp", +"obuse.nagano.jp", +"ogawa.nagano.jp", +"okaya.nagano.jp", +"omachi.nagano.jp", +"omi.nagano.jp", +"ookuwa.nagano.jp", +"ooshika.nagano.jp", +"otaki.nagano.jp", +"otari.nagano.jp", +"sakae.nagano.jp", +"sakaki.nagano.jp", +"saku.nagano.jp", +"sakuho.nagano.jp", +"shimosuwa.nagano.jp", +"shinanomachi.nagano.jp", +"shiojiri.nagano.jp", +"suwa.nagano.jp", +"suzaka.nagano.jp", +"takagi.nagano.jp", +"takamori.nagano.jp", +"takayama.nagano.jp", +"tateshina.nagano.jp", +"tatsuno.nagano.jp", +"togakushi.nagano.jp", +"togura.nagano.jp", +"tomi.nagano.jp", +"ueda.nagano.jp", +"wada.nagano.jp", +"yamagata.nagano.jp", +"yamanouchi.nagano.jp", +"yasaka.nagano.jp", +"yasuoka.nagano.jp", +"chijiwa.nagasaki.jp", +"futsu.nagasaki.jp", +"goto.nagasaki.jp", +"hasami.nagasaki.jp", +"hirado.nagasaki.jp", +"iki.nagasaki.jp", +"isahaya.nagasaki.jp", +"kawatana.nagasaki.jp", +"kuchinotsu.nagasaki.jp", +"matsuura.nagasaki.jp", +"nagasaki.nagasaki.jp", +"obama.nagasaki.jp", +"omura.nagasaki.jp", +"oseto.nagasaki.jp", +"saikai.nagasaki.jp", +"sasebo.nagasaki.jp", +"seihi.nagasaki.jp", +"shimabara.nagasaki.jp", +"shinkamigoto.nagasaki.jp", +"togitsu.nagasaki.jp", +"tsushima.nagasaki.jp", +"unzen.nagasaki.jp", +"ando.nara.jp", +"gose.nara.jp", +"heguri.nara.jp", +"higashiyoshino.nara.jp", +"ikaruga.nara.jp", +"ikoma.nara.jp", +"kamikitayama.nara.jp", +"kanmaki.nara.jp", +"kashiba.nara.jp", +"kashihara.nara.jp", +"katsuragi.nara.jp", +"kawai.nara.jp", +"kawakami.nara.jp", +"kawanishi.nara.jp", +"koryo.nara.jp", +"kurotaki.nara.jp", +"mitsue.nara.jp", +"miyake.nara.jp", +"nara.nara.jp", +"nosegawa.nara.jp", +"oji.nara.jp", +"ouda.nara.jp", +"oyodo.nara.jp", +"sakurai.nara.jp", +"sango.nara.jp", +"shimoichi.nara.jp", +"shimokitayama.nara.jp", +"shinjo.nara.jp", +"soni.nara.jp", +"takatori.nara.jp", +"tawaramoto.nara.jp", +"tenkawa.nara.jp", +"tenri.nara.jp", +"uda.nara.jp", +"yamatokoriyama.nara.jp", +"yamatotakada.nara.jp", +"yamazoe.nara.jp", +"yoshino.nara.jp", +"aga.niigata.jp", +"agano.niigata.jp", +"gosen.niigata.jp", +"itoigawa.niigata.jp", +"izumozaki.niigata.jp", +"joetsu.niigata.jp", +"kamo.niigata.jp", +"kariwa.niigata.jp", +"kashiwazaki.niigata.jp", +"minamiuonuma.niigata.jp", +"mitsuke.niigata.jp", +"muika.niigata.jp", +"murakami.niigata.jp", +"myoko.niigata.jp", +"nagaoka.niigata.jp", +"niigata.niigata.jp", +"ojiya.niigata.jp", +"omi.niigata.jp", +"sado.niigata.jp", +"sanjo.niigata.jp", +"seiro.niigata.jp", +"seirou.niigata.jp", +"sekikawa.niigata.jp", +"shibata.niigata.jp", +"tagami.niigata.jp", +"tainai.niigata.jp", +"tochio.niigata.jp", +"tokamachi.niigata.jp", +"tsubame.niigata.jp", +"tsunan.niigata.jp", +"uonuma.niigata.jp", +"yahiko.niigata.jp", +"yoita.niigata.jp", +"yuzawa.niigata.jp", +"beppu.oita.jp", +"bungoono.oita.jp", +"bungotakada.oita.jp", +"hasama.oita.jp", +"hiji.oita.jp", +"himeshima.oita.jp", +"hita.oita.jp", +"kamitsue.oita.jp", +"kokonoe.oita.jp", +"kuju.oita.jp", +"kunisaki.oita.jp", +"kusu.oita.jp", +"oita.oita.jp", +"saiki.oita.jp", +"taketa.oita.jp", +"tsukumi.oita.jp", +"usa.oita.jp", +"usuki.oita.jp", +"yufu.oita.jp", +"akaiwa.okayama.jp", +"asakuchi.okayama.jp", +"bizen.okayama.jp", +"hayashima.okayama.jp", +"ibara.okayama.jp", +"kagamino.okayama.jp", +"kasaoka.okayama.jp", +"kibichuo.okayama.jp", +"kumenan.okayama.jp", +"kurashiki.okayama.jp", +"maniwa.okayama.jp", +"misaki.okayama.jp", +"nagi.okayama.jp", +"niimi.okayama.jp", +"nishiawakura.okayama.jp", +"okayama.okayama.jp", +"satosho.okayama.jp", +"setouchi.okayama.jp", +"shinjo.okayama.jp", +"shoo.okayama.jp", +"soja.okayama.jp", +"takahashi.okayama.jp", +"tamano.okayama.jp", +"tsuyama.okayama.jp", +"wake.okayama.jp", +"yakage.okayama.jp", +"aguni.okinawa.jp", +"ginowan.okinawa.jp", +"ginoza.okinawa.jp", +"gushikami.okinawa.jp", +"haebaru.okinawa.jp", +"higashi.okinawa.jp", +"hirara.okinawa.jp", +"iheya.okinawa.jp", +"ishigaki.okinawa.jp", +"ishikawa.okinawa.jp", +"itoman.okinawa.jp", +"izena.okinawa.jp", +"kadena.okinawa.jp", +"kin.okinawa.jp", +"kitadaito.okinawa.jp", +"kitanakagusuku.okinawa.jp", +"kumejima.okinawa.jp", +"kunigami.okinawa.jp", +"minamidaito.okinawa.jp", +"motobu.okinawa.jp", +"nago.okinawa.jp", +"naha.okinawa.jp", +"nakagusuku.okinawa.jp", +"nakijin.okinawa.jp", +"nanjo.okinawa.jp", +"nishihara.okinawa.jp", +"ogimi.okinawa.jp", +"okinawa.okinawa.jp", +"onna.okinawa.jp", +"shimoji.okinawa.jp", +"taketomi.okinawa.jp", +"tarama.okinawa.jp", +"tokashiki.okinawa.jp", +"tomigusuku.okinawa.jp", +"tonaki.okinawa.jp", +"urasoe.okinawa.jp", +"uruma.okinawa.jp", +"yaese.okinawa.jp", +"yomitan.okinawa.jp", +"yonabaru.okinawa.jp", +"yonaguni.okinawa.jp", +"zamami.okinawa.jp", +"abeno.osaka.jp", +"chihayaakasaka.osaka.jp", +"chuo.osaka.jp", +"daito.osaka.jp", +"fujiidera.osaka.jp", +"habikino.osaka.jp", +"hannan.osaka.jp", +"higashiosaka.osaka.jp", +"higashisumiyoshi.osaka.jp", +"higashiyodogawa.osaka.jp", +"hirakata.osaka.jp", +"ibaraki.osaka.jp", +"ikeda.osaka.jp", +"izumi.osaka.jp", +"izumiotsu.osaka.jp", +"izumisano.osaka.jp", +"kadoma.osaka.jp", +"kaizuka.osaka.jp", +"kanan.osaka.jp", +"kashiwara.osaka.jp", +"katano.osaka.jp", +"kawachinagano.osaka.jp", +"kishiwada.osaka.jp", +"kita.osaka.jp", +"kumatori.osaka.jp", +"matsubara.osaka.jp", +"minato.osaka.jp", +"minoh.osaka.jp", +"misaki.osaka.jp", +"moriguchi.osaka.jp", +"neyagawa.osaka.jp", +"nishi.osaka.jp", +"nose.osaka.jp", +"osakasayama.osaka.jp", +"sakai.osaka.jp", +"sayama.osaka.jp", +"sennan.osaka.jp", +"settsu.osaka.jp", +"shijonawate.osaka.jp", +"shimamoto.osaka.jp", +"suita.osaka.jp", +"tadaoka.osaka.jp", +"taishi.osaka.jp", +"tajiri.osaka.jp", +"takaishi.osaka.jp", +"takatsuki.osaka.jp", +"tondabayashi.osaka.jp", +"toyonaka.osaka.jp", +"toyono.osaka.jp", +"yao.osaka.jp", +"ariake.saga.jp", +"arita.saga.jp", +"fukudomi.saga.jp", +"genkai.saga.jp", +"hamatama.saga.jp", +"hizen.saga.jp", +"imari.saga.jp", +"kamimine.saga.jp", +"kanzaki.saga.jp", +"karatsu.saga.jp", +"kashima.saga.jp", +"kitagata.saga.jp", +"kitahata.saga.jp", +"kiyama.saga.jp", +"kouhoku.saga.jp", +"kyuragi.saga.jp", +"nishiarita.saga.jp", +"ogi.saga.jp", +"omachi.saga.jp", +"ouchi.saga.jp", +"saga.saga.jp", +"shiroishi.saga.jp", +"taku.saga.jp", +"tara.saga.jp", +"tosu.saga.jp", +"yoshinogari.saga.jp", +"arakawa.saitama.jp", +"asaka.saitama.jp", +"chichibu.saitama.jp", +"fujimi.saitama.jp", +"fujimino.saitama.jp", +"fukaya.saitama.jp", +"hanno.saitama.jp", +"hanyu.saitama.jp", +"hasuda.saitama.jp", +"hatogaya.saitama.jp", +"hatoyama.saitama.jp", +"hidaka.saitama.jp", +"higashichichibu.saitama.jp", +"higashimatsuyama.saitama.jp", +"honjo.saitama.jp", +"ina.saitama.jp", +"iruma.saitama.jp", +"iwatsuki.saitama.jp", +"kamiizumi.saitama.jp", +"kamikawa.saitama.jp", +"kamisato.saitama.jp", +"kasukabe.saitama.jp", +"kawagoe.saitama.jp", +"kawaguchi.saitama.jp", +"kawajima.saitama.jp", +"kazo.saitama.jp", +"kitamoto.saitama.jp", +"koshigaya.saitama.jp", +"kounosu.saitama.jp", +"kuki.saitama.jp", +"kumagaya.saitama.jp", +"matsubushi.saitama.jp", +"minano.saitama.jp", +"misato.saitama.jp", +"miyashiro.saitama.jp", +"miyoshi.saitama.jp", +"moroyama.saitama.jp", +"nagatoro.saitama.jp", +"namegawa.saitama.jp", +"niiza.saitama.jp", +"ogano.saitama.jp", +"ogawa.saitama.jp", +"ogose.saitama.jp", +"okegawa.saitama.jp", +"omiya.saitama.jp", +"otaki.saitama.jp", +"ranzan.saitama.jp", +"ryokami.saitama.jp", +"saitama.saitama.jp", +"sakado.saitama.jp", +"satte.saitama.jp", +"sayama.saitama.jp", +"shiki.saitama.jp", +"shiraoka.saitama.jp", +"soka.saitama.jp", +"sugito.saitama.jp", +"toda.saitama.jp", +"tokigawa.saitama.jp", +"tokorozawa.saitama.jp", +"tsurugashima.saitama.jp", +"urawa.saitama.jp", +"warabi.saitama.jp", +"yashio.saitama.jp", +"yokoze.saitama.jp", +"yono.saitama.jp", +"yorii.saitama.jp", +"yoshida.saitama.jp", +"yoshikawa.saitama.jp", +"yoshimi.saitama.jp", +"aisho.shiga.jp", +"gamo.shiga.jp", +"higashiomi.shiga.jp", +"hikone.shiga.jp", +"koka.shiga.jp", +"konan.shiga.jp", +"kosei.shiga.jp", +"koto.shiga.jp", +"kusatsu.shiga.jp", +"maibara.shiga.jp", +"moriyama.shiga.jp", +"nagahama.shiga.jp", +"nishiazai.shiga.jp", +"notogawa.shiga.jp", +"omihachiman.shiga.jp", +"otsu.shiga.jp", +"ritto.shiga.jp", +"ryuoh.shiga.jp", +"takashima.shiga.jp", +"takatsuki.shiga.jp", +"torahime.shiga.jp", +"toyosato.shiga.jp", +"yasu.shiga.jp", +"akagi.shimane.jp", +"ama.shimane.jp", +"gotsu.shimane.jp", +"hamada.shimane.jp", +"higashiizumo.shimane.jp", +"hikawa.shimane.jp", +"hikimi.shimane.jp", +"izumo.shimane.jp", +"kakinoki.shimane.jp", +"masuda.shimane.jp", +"matsue.shimane.jp", +"misato.shimane.jp", +"nishinoshima.shimane.jp", +"ohda.shimane.jp", +"okinoshima.shimane.jp", +"okuizumo.shimane.jp", +"shimane.shimane.jp", +"tamayu.shimane.jp", +"tsuwano.shimane.jp", +"unnan.shimane.jp", +"yakumo.shimane.jp", +"yasugi.shimane.jp", +"yatsuka.shimane.jp", +"arai.shizuoka.jp", +"atami.shizuoka.jp", +"fuji.shizuoka.jp", +"fujieda.shizuoka.jp", +"fujikawa.shizuoka.jp", +"fujinomiya.shizuoka.jp", +"fukuroi.shizuoka.jp", +"gotemba.shizuoka.jp", +"haibara.shizuoka.jp", +"hamamatsu.shizuoka.jp", +"higashiizu.shizuoka.jp", +"ito.shizuoka.jp", +"iwata.shizuoka.jp", +"izu.shizuoka.jp", +"izunokuni.shizuoka.jp", +"kakegawa.shizuoka.jp", +"kannami.shizuoka.jp", +"kawanehon.shizuoka.jp", +"kawazu.shizuoka.jp", +"kikugawa.shizuoka.jp", +"kosai.shizuoka.jp", +"makinohara.shizuoka.jp", +"matsuzaki.shizuoka.jp", +"minamiizu.shizuoka.jp", +"mishima.shizuoka.jp", +"morimachi.shizuoka.jp", +"nishiizu.shizuoka.jp", +"numazu.shizuoka.jp", +"omaezaki.shizuoka.jp", +"shimada.shizuoka.jp", +"shimizu.shizuoka.jp", +"shimoda.shizuoka.jp", +"shizuoka.shizuoka.jp", +"susono.shizuoka.jp", +"yaizu.shizuoka.jp", +"yoshida.shizuoka.jp", +"ashikaga.tochigi.jp", +"bato.tochigi.jp", +"haga.tochigi.jp", +"ichikai.tochigi.jp", +"iwafune.tochigi.jp", +"kaminokawa.tochigi.jp", +"kanuma.tochigi.jp", +"karasuyama.tochigi.jp", +"kuroiso.tochigi.jp", +"mashiko.tochigi.jp", +"mibu.tochigi.jp", +"moka.tochigi.jp", +"motegi.tochigi.jp", +"nasu.tochigi.jp", +"nasushiobara.tochigi.jp", +"nikko.tochigi.jp", +"nishikata.tochigi.jp", +"nogi.tochigi.jp", +"ohira.tochigi.jp", +"ohtawara.tochigi.jp", +"oyama.tochigi.jp", +"sakura.tochigi.jp", +"sano.tochigi.jp", +"shimotsuke.tochigi.jp", +"shioya.tochigi.jp", +"takanezawa.tochigi.jp", +"tochigi.tochigi.jp", +"tsuga.tochigi.jp", +"ujiie.tochigi.jp", +"utsunomiya.tochigi.jp", +"yaita.tochigi.jp", +"aizumi.tokushima.jp", +"anan.tokushima.jp", +"ichiba.tokushima.jp", +"itano.tokushima.jp", +"kainan.tokushima.jp", +"komatsushima.tokushima.jp", +"matsushige.tokushima.jp", +"mima.tokushima.jp", +"minami.tokushima.jp", +"miyoshi.tokushima.jp", +"mugi.tokushima.jp", +"nakagawa.tokushima.jp", +"naruto.tokushima.jp", +"sanagochi.tokushima.jp", +"shishikui.tokushima.jp", +"tokushima.tokushima.jp", +"wajiki.tokushima.jp", +"adachi.tokyo.jp", +"akiruno.tokyo.jp", +"akishima.tokyo.jp", +"aogashima.tokyo.jp", +"arakawa.tokyo.jp", +"bunkyo.tokyo.jp", +"chiyoda.tokyo.jp", +"chofu.tokyo.jp", +"chuo.tokyo.jp", +"edogawa.tokyo.jp", +"fuchu.tokyo.jp", +"fussa.tokyo.jp", +"hachijo.tokyo.jp", +"hachioji.tokyo.jp", +"hamura.tokyo.jp", +"higashikurume.tokyo.jp", +"higashimurayama.tokyo.jp", +"higashiyamato.tokyo.jp", +"hino.tokyo.jp", +"hinode.tokyo.jp", +"hinohara.tokyo.jp", +"inagi.tokyo.jp", +"itabashi.tokyo.jp", +"katsushika.tokyo.jp", +"kita.tokyo.jp", +"kiyose.tokyo.jp", +"kodaira.tokyo.jp", +"koganei.tokyo.jp", +"kokubunji.tokyo.jp", +"komae.tokyo.jp", +"koto.tokyo.jp", +"kouzushima.tokyo.jp", +"kunitachi.tokyo.jp", +"machida.tokyo.jp", +"meguro.tokyo.jp", +"minato.tokyo.jp", +"mitaka.tokyo.jp", +"mizuho.tokyo.jp", +"musashimurayama.tokyo.jp", +"musashino.tokyo.jp", +"nakano.tokyo.jp", +"nerima.tokyo.jp", +"ogasawara.tokyo.jp", +"okutama.tokyo.jp", +"ome.tokyo.jp", +"oshima.tokyo.jp", +"ota.tokyo.jp", +"setagaya.tokyo.jp", +"shibuya.tokyo.jp", +"shinagawa.tokyo.jp", +"shinjuku.tokyo.jp", +"suginami.tokyo.jp", +"sumida.tokyo.jp", +"tachikawa.tokyo.jp", +"taito.tokyo.jp", +"tama.tokyo.jp", +"toshima.tokyo.jp", +"chizu.tottori.jp", +"hino.tottori.jp", +"kawahara.tottori.jp", +"koge.tottori.jp", +"kotoura.tottori.jp", +"misasa.tottori.jp", +"nanbu.tottori.jp", +"nichinan.tottori.jp", +"sakaiminato.tottori.jp", +"tottori.tottori.jp", +"wakasa.tottori.jp", +"yazu.tottori.jp", +"yonago.tottori.jp", +"asahi.toyama.jp", +"fuchu.toyama.jp", +"fukumitsu.toyama.jp", +"funahashi.toyama.jp", +"himi.toyama.jp", +"imizu.toyama.jp", +"inami.toyama.jp", +"johana.toyama.jp", +"kamiichi.toyama.jp", +"kurobe.toyama.jp", +"nakaniikawa.toyama.jp", +"namerikawa.toyama.jp", +"nanto.toyama.jp", +"nyuzen.toyama.jp", +"oyabe.toyama.jp", +"taira.toyama.jp", +"takaoka.toyama.jp", +"tateyama.toyama.jp", +"toga.toyama.jp", +"tonami.toyama.jp", +"toyama.toyama.jp", +"unazuki.toyama.jp", +"uozu.toyama.jp", +"yamada.toyama.jp", +"arida.wakayama.jp", +"aridagawa.wakayama.jp", +"gobo.wakayama.jp", +"hashimoto.wakayama.jp", +"hidaka.wakayama.jp", +"hirogawa.wakayama.jp", +"inami.wakayama.jp", +"iwade.wakayama.jp", +"kainan.wakayama.jp", +"kamitonda.wakayama.jp", +"katsuragi.wakayama.jp", +"kimino.wakayama.jp", +"kinokawa.wakayama.jp", +"kitayama.wakayama.jp", +"koya.wakayama.jp", +"koza.wakayama.jp", +"kozagawa.wakayama.jp", +"kudoyama.wakayama.jp", +"kushimoto.wakayama.jp", +"mihama.wakayama.jp", +"misato.wakayama.jp", +"nachikatsuura.wakayama.jp", +"shingu.wakayama.jp", +"shirahama.wakayama.jp", +"taiji.wakayama.jp", +"tanabe.wakayama.jp", +"wakayama.wakayama.jp", +"yuasa.wakayama.jp", +"yura.wakayama.jp", +"asahi.yamagata.jp", +"funagata.yamagata.jp", +"higashine.yamagata.jp", +"iide.yamagata.jp", +"kahoku.yamagata.jp", +"kaminoyama.yamagata.jp", +"kaneyama.yamagata.jp", +"kawanishi.yamagata.jp", +"mamurogawa.yamagata.jp", +"mikawa.yamagata.jp", +"murayama.yamagata.jp", +"nagai.yamagata.jp", +"nakayama.yamagata.jp", +"nanyo.yamagata.jp", +"nishikawa.yamagata.jp", +"obanazawa.yamagata.jp", +"oe.yamagata.jp", +"oguni.yamagata.jp", +"ohkura.yamagata.jp", +"oishida.yamagata.jp", +"sagae.yamagata.jp", +"sakata.yamagata.jp", +"sakegawa.yamagata.jp", +"shinjo.yamagata.jp", +"shirataka.yamagata.jp", +"shonai.yamagata.jp", +"takahata.yamagata.jp", +"tendo.yamagata.jp", +"tozawa.yamagata.jp", +"tsuruoka.yamagata.jp", +"yamagata.yamagata.jp", +"yamanobe.yamagata.jp", +"yonezawa.yamagata.jp", +"yuza.yamagata.jp", +"abu.yamaguchi.jp", +"hagi.yamaguchi.jp", +"hikari.yamaguchi.jp", +"hofu.yamaguchi.jp", +"iwakuni.yamaguchi.jp", +"kudamatsu.yamaguchi.jp", +"mitou.yamaguchi.jp", +"nagato.yamaguchi.jp", +"oshima.yamaguchi.jp", +"shimonoseki.yamaguchi.jp", +"shunan.yamaguchi.jp", +"tabuse.yamaguchi.jp", +"tokuyama.yamaguchi.jp", +"toyota.yamaguchi.jp", +"ube.yamaguchi.jp", +"yuu.yamaguchi.jp", +"chuo.yamanashi.jp", +"doshi.yamanashi.jp", +"fuefuki.yamanashi.jp", +"fujikawa.yamanashi.jp", +"fujikawaguchiko.yamanashi.jp", +"fujiyoshida.yamanashi.jp", +"hayakawa.yamanashi.jp", +"hokuto.yamanashi.jp", +"ichikawamisato.yamanashi.jp", +"kai.yamanashi.jp", +"kofu.yamanashi.jp", +"koshu.yamanashi.jp", +"kosuge.yamanashi.jp", +"minami-alps.yamanashi.jp", +"minobu.yamanashi.jp", +"nakamichi.yamanashi.jp", +"nanbu.yamanashi.jp", +"narusawa.yamanashi.jp", +"nirasaki.yamanashi.jp", +"nishikatsura.yamanashi.jp", +"oshino.yamanashi.jp", +"otsuki.yamanashi.jp", +"showa.yamanashi.jp", +"tabayama.yamanashi.jp", +"tsuru.yamanashi.jp", +"uenohara.yamanashi.jp", +"yamanakako.yamanashi.jp", +"yamanashi.yamanashi.jp", +"ke", +"org.kg", +"net.kg", +"com.kg", +"edu.kg", +"gov.kg", +"mil.kg", +"kh", +"edu.ki", +"biz.ki", +"net.ki", +"org.ki", +"gov.ki", +"info.ki", +"com.ki", +"org.km", +"nom.km", +"gov.km", +"prd.km", +"tm.km", +"edu.km", +"mil.km", +"ass.km", +"com.km", +"coop.km", +"asso.km", +"presse.km", +"medecin.km", +"notaires.km", +"pharmaciens.km", +"veterinaire.km", +"gouv.km", +"net.kn", +"org.kn", +"edu.kn", +"gov.kn", +"com.kp", +"edu.kp", +"gov.kp", +"org.kp", +"rep.kp", +"tra.kp", +"ac.kr", +"co.kr", +"es.kr", +"go.kr", +"hs.kr", +"kg.kr", +"mil.kr", +"ms.kr", +"ne.kr", +"or.kr", +"pe.kr", +"re.kr", +"sc.kr", +"busan.kr", +"chungbuk.kr", +"chungnam.kr", +"daegu.kr", +"daejeon.kr", +"gangwon.kr", +"gwangju.kr", +"gyeongbuk.kr", +"gyeonggi.kr", +"gyeongnam.kr", +"incheon.kr", +"jeju.kr", +"jeonbuk.kr", +"jeonnam.kr", +"seoul.kr", +"ulsan.kr", +"kw", +"edu.ky", +"gov.ky", +"com.ky", +"org.ky", +"net.ky", +"org.kz", +"edu.kz", +"net.kz", +"gov.kz", +"mil.kz", +"com.kz", +"int.la", +"net.la", +"info.la", +"edu.la", +"gov.la", +"per.la", +"com.la", +"org.la", +"com.lb", +"edu.lb", +"gov.lb", +"net.lb", +"org.lb", +"com.lc", +"net.lc", +"co.lc", +"org.lc", +"edu.lc", +"gov.lc", +"gov.lk", +"sch.lk", +"net.lk", +"int.lk", +"com.lk", +"org.lk", +"edu.lk", +"ngo.lk", +"soc.lk", +"web.lk", +"ltd.lk", +"assn.lk", +"grp.lk", +"hotel.lk", +"com.lr", +"edu.lr", +"gov.lr", +"org.lr", +"net.lr", +"co.ls", +"org.ls", +"gov.lt", +"com.lv", +"edu.lv", +"gov.lv", +"org.lv", +"mil.lv", +"id.lv", +"net.lv", +"asn.lv", +"conf.lv", +"com.ly", +"net.ly", +"gov.ly", +"plc.ly", +"edu.ly", +"sch.ly", +"med.ly", +"org.ly", +"id.ly", +"co.ma", +"net.ma", +"gov.ma", +"org.ma", +"ac.ma", +"press.ma", +"tm.mc", +"asso.mc", +"co.me", +"net.me", +"org.me", +"edu.me", +"ac.me", +"gov.me", +"its.me", +"priv.me", +"org.mg", +"nom.mg", +"gov.mg", +"prd.mg", +"tm.mg", +"edu.mg", +"mil.mg", +"com.mg", +"com.mk", +"org.mk", +"net.mk", +"edu.mk", +"gov.mk", +"inf.mk", +"name.mk", +"com.ml", +"edu.ml", +"gouv.ml", +"gov.ml", +"net.ml", +"org.ml", +"presse.ml", +"mm", +"gov.mn", +"edu.mn", +"org.mn", +"com.mo", +"net.mo", +"org.mo", +"edu.mo", +"gov.mo", +"gov.mr", +"com.ms", +"edu.ms", +"gov.ms", +"net.ms", +"org.ms", +"com.mt", +"edu.mt", +"net.mt", +"org.mt", +"com.mu", +"net.mu", +"org.mu", +"gov.mu", +"ac.mu", +"co.mu", +"or.mu", +"academy.museum", +"agriculture.museum", +"air.museum", +"airguard.museum", +"alabama.museum", +"alaska.museum", +"amber.museum", +"ambulance.museum", +"american.museum", +"americana.museum", +"americanantiques.museum", +"americanart.museum", +"amsterdam.museum", +"and.museum", +"annefrank.museum", +"anthro.museum", +"anthropology.museum", +"antiques.museum", +"aquarium.museum", +"arboretum.museum", +"archaeological.museum", +"archaeology.museum", +"architecture.museum", +"art.museum", +"artanddesign.museum", +"artcenter.museum", +"artdeco.museum", +"arteducation.museum", +"artgallery.museum", +"arts.museum", +"artsandcrafts.museum", +"asmatart.museum", +"assassination.museum", +"assisi.museum", +"association.museum", +"astronomy.museum", +"atlanta.museum", +"austin.museum", +"australia.museum", +"automotive.museum", +"aviation.museum", +"axis.museum", +"badajoz.museum", +"baghdad.museum", +"bahn.museum", +"bale.museum", +"baltimore.museum", +"barcelona.museum", +"baseball.museum", +"basel.museum", +"baths.museum", +"bauern.museum", +"beauxarts.museum", +"beeldengeluid.museum", +"bellevue.museum", +"bergbau.museum", +"berkeley.museum", +"berlin.museum", +"bern.museum", +"bible.museum", +"bilbao.museum", +"bill.museum", +"birdart.museum", +"birthplace.museum", +"bonn.museum", +"boston.museum", +"botanical.museum", +"botanicalgarden.museum", +"botanicgarden.museum", +"botany.museum", +"brandywinevalley.museum", +"brasil.museum", +"bristol.museum", +"british.museum", +"britishcolumbia.museum", +"broadcast.museum", +"brunel.museum", +"brussel.museum", +"brussels.museum", +"bruxelles.museum", +"building.museum", +"burghof.museum", +"bus.museum", +"bushey.museum", +"cadaques.museum", +"california.museum", +"cambridge.museum", +"can.museum", +"canada.museum", +"capebreton.museum", +"carrier.museum", +"cartoonart.museum", +"casadelamoneda.museum", +"castle.museum", +"castres.museum", +"celtic.museum", +"center.museum", +"chattanooga.museum", +"cheltenham.museum", +"chesapeakebay.museum", +"chicago.museum", +"children.museum", +"childrens.museum", +"childrensgarden.museum", +"chiropractic.museum", +"chocolate.museum", +"christiansburg.museum", +"cincinnati.museum", +"cinema.museum", +"circus.museum", +"civilisation.museum", +"civilization.museum", +"civilwar.museum", +"clinton.museum", +"clock.museum", +"coal.museum", +"coastaldefence.museum", +"cody.museum", +"coldwar.museum", +"collection.museum", +"colonialwilliamsburg.museum", +"coloradoplateau.museum", +"columbia.museum", +"columbus.museum", +"communication.museum", +"communications.museum", +"community.museum", +"computer.museum", +"computerhistory.museum", +"xn--comunicaes-v6a2o.museum", +"contemporary.museum", +"contemporaryart.museum", +"convent.museum", +"copenhagen.museum", +"corporation.museum", +"xn--correios-e-telecomunicaes-ghc29a.museum", +"corvette.museum", +"costume.museum", +"countryestate.museum", +"county.museum", +"crafts.museum", +"cranbrook.museum", +"creation.museum", +"cultural.museum", +"culturalcenter.museum", +"culture.museum", +"cyber.museum", +"cymru.museum", +"dali.museum", +"dallas.museum", +"database.museum", +"ddr.museum", +"decorativearts.museum", +"delaware.museum", +"delmenhorst.museum", +"denmark.museum", +"depot.museum", +"design.museum", +"detroit.museum", +"dinosaur.museum", +"discovery.museum", +"dolls.museum", +"donostia.museum", +"durham.museum", +"eastafrica.museum", +"eastcoast.museum", +"education.museum", +"educational.museum", +"egyptian.museum", +"eisenbahn.museum", +"elburg.museum", +"elvendrell.museum", +"embroidery.museum", +"encyclopedic.museum", +"england.museum", +"entomology.museum", +"environment.museum", +"environmentalconservation.museum", +"epilepsy.museum", +"essex.museum", +"estate.museum", +"ethnology.museum", +"exeter.museum", +"exhibition.museum", +"family.museum", +"farm.museum", +"farmequipment.museum", +"farmers.museum", +"farmstead.museum", +"field.museum", +"figueres.museum", +"filatelia.museum", +"film.museum", +"fineart.museum", +"finearts.museum", +"finland.museum", +"flanders.museum", +"florida.museum", +"force.museum", +"fortmissoula.museum", +"fortworth.museum", +"foundation.museum", +"francaise.museum", +"frankfurt.museum", +"franziskaner.museum", +"freemasonry.museum", +"freiburg.museum", +"fribourg.museum", +"frog.museum", +"fundacio.museum", +"furniture.museum", +"gallery.museum", +"garden.museum", +"gateway.museum", +"geelvinck.museum", +"gemological.museum", +"geology.museum", +"georgia.museum", +"giessen.museum", +"glas.museum", +"glass.museum", +"gorge.museum", +"grandrapids.museum", +"graz.museum", +"guernsey.museum", +"halloffame.museum", +"hamburg.museum", +"handson.museum", +"harvestcelebration.museum", +"hawaii.museum", +"health.museum", +"heimatunduhren.museum", +"hellas.museum", +"helsinki.museum", +"hembygdsforbund.museum", +"heritage.museum", +"histoire.museum", +"historical.museum", +"historicalsociety.museum", +"historichouses.museum", +"historisch.museum", +"historisches.museum", +"history.museum", +"historyofscience.museum", +"horology.museum", +"house.museum", +"humanities.museum", +"illustration.museum", +"imageandsound.museum", +"indian.museum", +"indiana.museum", +"indianapolis.museum", +"indianmarket.museum", +"intelligence.museum", +"interactive.museum", +"iraq.museum", +"iron.museum", +"isleofman.museum", +"jamison.museum", +"jefferson.museum", +"jerusalem.museum", +"jewelry.museum", +"jewish.museum", +"jewishart.museum", +"jfk.museum", +"journalism.museum", +"judaica.museum", +"judygarland.museum", +"juedisches.museum", +"juif.museum", +"karate.museum", +"karikatur.museum", +"kids.museum", +"koebenhavn.museum", +"koeln.museum", +"kunst.museum", +"kunstsammlung.museum", +"kunstunddesign.museum", +"labor.museum", +"labour.museum", +"lajolla.museum", +"lancashire.museum", +"landes.museum", +"lans.museum", +"xn--lns-qla.museum", +"larsson.museum", +"lewismiller.museum", +"lincoln.museum", +"linz.museum", +"living.museum", +"livinghistory.museum", +"localhistory.museum", +"london.museum", +"losangeles.museum", +"louvre.museum", +"loyalist.museum", +"lucerne.museum", +"luxembourg.museum", +"luzern.museum", +"mad.museum", +"madrid.museum", +"mallorca.museum", +"manchester.museum", +"mansion.museum", +"mansions.museum", +"manx.museum", +"marburg.museum", +"maritime.museum", +"maritimo.museum", +"maryland.museum", +"marylhurst.museum", +"media.museum", +"medical.museum", +"medizinhistorisches.museum", +"meeres.museum", +"memorial.museum", +"mesaverde.museum", +"michigan.museum", +"midatlantic.museum", +"military.museum", +"mill.museum", +"miners.museum", +"mining.museum", +"minnesota.museum", +"missile.museum", +"missoula.museum", +"modern.museum", +"moma.museum", +"money.museum", +"monmouth.museum", +"monticello.museum", +"montreal.museum", +"moscow.museum", +"motorcycle.museum", +"muenchen.museum", +"muenster.museum", +"mulhouse.museum", +"muncie.museum", +"museet.museum", +"museumcenter.museum", +"museumvereniging.museum", +"music.museum", +"national.museum", +"nationalfirearms.museum", +"nationalheritage.museum", +"nativeamerican.museum", +"naturalhistory.museum", +"naturalhistorymuseum.museum", +"naturalsciences.museum", +"nature.museum", +"naturhistorisches.museum", +"natuurwetenschappen.museum", +"naumburg.museum", +"naval.museum", +"nebraska.museum", +"neues.museum", +"newhampshire.museum", +"newjersey.museum", +"newmexico.museum", +"newport.museum", +"newspaper.museum", +"newyork.museum", +"niepce.museum", +"norfolk.museum", +"north.museum", +"nrw.museum", +"nuernberg.museum", +"nuremberg.museum", +"nyc.museum", +"nyny.museum", +"oceanographic.museum", +"oceanographique.museum", +"omaha.museum", +"online.museum", +"ontario.museum", +"openair.museum", +"oregon.museum", +"oregontrail.museum", +"otago.museum", +"oxford.museum", +"pacific.museum", +"paderborn.museum", +"palace.museum", +"paleo.museum", +"palmsprings.museum", +"panama.museum", +"paris.museum", +"pasadena.museum", +"pharmacy.museum", +"philadelphia.museum", +"philadelphiaarea.museum", +"philately.museum", +"phoenix.museum", +"photography.museum", +"pilots.museum", +"pittsburgh.museum", +"planetarium.museum", +"plantation.museum", +"plants.museum", +"plaza.museum", +"portal.museum", +"portland.museum", +"portlligat.museum", +"posts-and-telecommunications.museum", +"preservation.museum", +"presidio.museum", +"press.museum", +"project.museum", +"public.museum", +"pubol.museum", +"quebec.museum", +"railroad.museum", +"railway.museum", +"research.museum", +"resistance.museum", +"riodejaneiro.museum", +"rochester.museum", +"rockart.museum", +"roma.museum", +"russia.museum", +"saintlouis.museum", +"salem.museum", +"salvadordali.museum", +"salzburg.museum", +"sandiego.museum", +"sanfrancisco.museum", +"santabarbara.museum", +"santacruz.museum", +"santafe.museum", +"saskatchewan.museum", +"satx.museum", +"savannahga.museum", +"schlesisches.museum", +"schoenbrunn.museum", +"schokoladen.museum", +"school.museum", +"schweiz.museum", +"science.museum", +"scienceandhistory.museum", +"scienceandindustry.museum", +"sciencecenter.museum", +"sciencecenters.museum", +"science-fiction.museum", +"sciencehistory.museum", +"sciences.museum", +"sciencesnaturelles.museum", +"scotland.museum", +"seaport.museum", +"settlement.museum", +"settlers.museum", +"shell.museum", +"sherbrooke.museum", +"sibenik.museum", +"silk.museum", +"ski.museum", +"skole.museum", +"society.museum", +"sologne.museum", +"soundandvision.museum", +"southcarolina.museum", +"southwest.museum", +"space.museum", +"spy.museum", +"square.museum", +"stadt.museum", +"stalbans.museum", +"starnberg.museum", +"state.museum", +"stateofdelaware.museum", +"station.museum", +"steam.museum", +"steiermark.museum", +"stjohn.museum", +"stockholm.museum", +"stpetersburg.museum", +"stuttgart.museum", +"suisse.museum", +"surgeonshall.museum", +"surrey.museum", +"svizzera.museum", +"sweden.museum", +"sydney.museum", +"tank.museum", +"tcm.museum", +"technology.museum", +"telekommunikation.museum", +"television.museum", +"texas.museum", +"textile.museum", +"theater.museum", +"time.museum", +"timekeeping.museum", +"topology.museum", +"torino.museum", +"touch.museum", +"town.museum", +"transport.museum", +"tree.museum", +"trolley.museum", +"trust.museum", +"trustee.museum", +"uhren.museum", +"ulm.museum", +"undersea.museum", +"university.museum", +"usa.museum", +"usantiques.museum", +"usarts.museum", +"uscountryestate.museum", +"usculture.museum", +"usdecorativearts.museum", +"usgarden.museum", +"ushistory.museum", +"ushuaia.museum", +"uslivinghistory.museum", +"utah.museum", +"uvic.museum", +"valley.museum", +"vantaa.museum", +"versailles.museum", +"viking.museum", +"village.museum", +"virginia.museum", +"virtual.museum", +"virtuel.museum", +"vlaanderen.museum", +"volkenkunde.museum", +"wales.museum", +"wallonie.museum", +"war.museum", +"washingtondc.museum", +"watchandclock.museum", +"watch-and-clock.museum", +"western.museum", +"westfalen.museum", +"whaling.museum", +"wildlife.museum", +"williamsburg.museum", +"windmill.museum", +"workshop.museum", +"york.museum", +"yorkshire.museum", +"yosemite.museum", +"youth.museum", +"zoological.museum", +"zoology.museum", +"xn--9dbhblg6di.museum", +"xn--h1aegh.museum", +"aero.mv", +"biz.mv", +"com.mv", +"coop.mv", +"edu.mv", +"gov.mv", +"info.mv", +"int.mv", +"mil.mv", +"museum.mv", +"name.mv", +"net.mv", +"org.mv", +"pro.mv", +"ac.mw", +"biz.mw", +"co.mw", +"com.mw", +"coop.mw", +"edu.mw", +"gov.mw", +"int.mw", +"museum.mw", +"net.mw", +"org.mw", +"com.mx", +"org.mx", +"gob.mx", +"edu.mx", +"net.mx", +"com.my", +"net.my", +"org.my", +"gov.my", +"edu.my", +"mil.my", +"name.my", +"mz", +"teledata.mz", +"info.na", +"pro.na", +"name.na", +"school.na", +"or.na", +"dr.na", +"us.na", +"mx.na", +"ca.na", +"in.na", +"cc.na", +"tv.na", +"ws.na", +"mobi.na", +"co.na", +"com.na", +"org.na", +"asso.nc", +"com.nf", +"net.nf", +"per.nf", +"rec.nf", +"web.nf", +"arts.nf", +"firm.nf", +"info.nf", +"other.nf", +"store.nf", +"com.ng", +"edu.ng", +"name.ng", +"net.ng", +"org.ng", +"sch.ng", +"gov.ng", +"mil.ng", +"mobi.ng", +"ni", +"bv.nl", +"fhs.no", +"vgs.no", +"fylkesbibl.no", +"folkebibl.no", +"museum.no", +"idrett.no", +"priv.no", +"mil.no", +"stat.no", +"dep.no", +"kommune.no", +"herad.no", +"aa.no", +"ah.no", +"bu.no", +"fm.no", +"hl.no", +"hm.no", +"jan-mayen.no", +"mr.no", +"nl.no", +"nt.no", +"of.no", +"ol.no", +"oslo.no", +"rl.no", +"sf.no", +"st.no", +"svalbard.no", +"tm.no", +"tr.no", +"va.no", +"vf.no", +"gs.aa.no", +"gs.ah.no", +"gs.bu.no", +"gs.fm.no", +"gs.hl.no", +"gs.hm.no", +"gs.jan-mayen.no", +"gs.mr.no", +"gs.nl.no", +"gs.nt.no", +"gs.of.no", +"gs.ol.no", +"gs.oslo.no", +"gs.rl.no", +"gs.sf.no", +"gs.st.no", +"gs.svalbard.no", +"gs.tm.no", +"gs.tr.no", +"gs.va.no", +"gs.vf.no", +"akrehamn.no", +"xn--krehamn-dxa.no", +"algard.no", +"xn--lgrd-poac.no", +"arna.no", +"brumunddal.no", +"bryne.no", +"bronnoysund.no", +"xn--brnnysund-m8ac.no", +"drobak.no", +"xn--drbak-wua.no", +"egersund.no", +"fetsund.no", +"floro.no", +"xn--flor-jra.no", +"fredrikstad.no", +"hokksund.no", +"honefoss.no", +"xn--hnefoss-q1a.no", +"jessheim.no", +"jorpeland.no", +"xn--jrpeland-54a.no", +"kirkenes.no", +"kopervik.no", +"krokstadelva.no", +"langevag.no", +"xn--langevg-jxa.no", +"leirvik.no", +"mjondalen.no", +"xn--mjndalen-64a.no", +"mo-i-rana.no", +"mosjoen.no", +"xn--mosjen-eya.no", +"nesoddtangen.no", +"orkanger.no", +"osoyro.no", +"xn--osyro-wua.no", +"raholt.no", +"xn--rholt-mra.no", +"sandnessjoen.no", +"xn--sandnessjen-ogb.no", +"skedsmokorset.no", +"slattum.no", +"spjelkavik.no", +"stathelle.no", +"stavern.no", +"stjordalshalsen.no", +"xn--stjrdalshalsen-sqb.no", +"tananger.no", +"tranby.no", +"vossevangen.no", +"afjord.no", +"xn--fjord-lra.no", +"agdenes.no", +"al.no", +"xn--l-1fa.no", +"alesund.no", +"xn--lesund-hua.no", +"alstahaug.no", +"alta.no", +"xn--lt-liac.no", +"alaheadju.no", +"xn--laheadju-7ya.no", +"alvdal.no", +"amli.no", +"xn--mli-tla.no", +"amot.no", +"xn--mot-tla.no", +"andebu.no", +"andoy.no", +"xn--andy-ira.no", +"andasuolo.no", +"ardal.no", +"xn--rdal-poa.no", +"aremark.no", +"arendal.no", +"xn--s-1fa.no", +"aseral.no", +"xn--seral-lra.no", +"asker.no", +"askim.no", +"askvoll.no", +"askoy.no", +"xn--asky-ira.no", +"asnes.no", +"xn--snes-poa.no", +"audnedaln.no", +"aukra.no", +"aure.no", +"aurland.no", +"aurskog-holand.no", +"xn--aurskog-hland-jnb.no", +"austevoll.no", +"austrheim.no", +"averoy.no", +"xn--avery-yua.no", +"balestrand.no", +"ballangen.no", +"balat.no", +"xn--blt-elab.no", +"balsfjord.no", +"bahccavuotna.no", +"xn--bhccavuotna-k7a.no", +"bamble.no", +"bardu.no", +"beardu.no", +"beiarn.no", +"bajddar.no", +"xn--bjddar-pta.no", +"baidar.no", +"xn--bidr-5nac.no", +"berg.no", +"bergen.no", +"berlevag.no", +"xn--berlevg-jxa.no", +"bearalvahki.no", +"xn--bearalvhki-y4a.no", +"bindal.no", +"birkenes.no", +"bjarkoy.no", +"xn--bjarky-fya.no", +"bjerkreim.no", +"bjugn.no", +"bodo.no", +"xn--bod-2na.no", +"badaddja.no", +"xn--bdddj-mrabd.no", +"budejju.no", +"bokn.no", +"bremanger.no", +"bronnoy.no", +"xn--brnny-wuac.no", +"bygland.no", +"bykle.no", +"barum.no", +"xn--brum-voa.no", +"bo.telemark.no", +"xn--b-5ga.telemark.no", +"bo.nordland.no", +"xn--b-5ga.nordland.no", +"bievat.no", +"xn--bievt-0qa.no", +"bomlo.no", +"xn--bmlo-gra.no", +"batsfjord.no", +"xn--btsfjord-9za.no", +"bahcavuotna.no", +"xn--bhcavuotna-s4a.no", +"dovre.no", +"drammen.no", +"drangedal.no", +"dyroy.no", +"xn--dyry-ira.no", +"donna.no", +"xn--dnna-gra.no", +"eid.no", +"eidfjord.no", +"eidsberg.no", +"eidskog.no", +"eidsvoll.no", +"eigersund.no", +"elverum.no", +"enebakk.no", +"engerdal.no", +"etne.no", +"etnedal.no", +"evenes.no", +"evenassi.no", +"xn--eveni-0qa01ga.no", +"evje-og-hornnes.no", +"farsund.no", +"fauske.no", +"fuossko.no", +"fuoisku.no", +"fedje.no", +"fet.no", +"finnoy.no", +"xn--finny-yua.no", +"fitjar.no", +"fjaler.no", +"fjell.no", +"flakstad.no", +"flatanger.no", +"flekkefjord.no", +"flesberg.no", +"flora.no", +"fla.no", +"xn--fl-zia.no", +"folldal.no", +"forsand.no", +"fosnes.no", +"frei.no", +"frogn.no", +"froland.no", +"frosta.no", +"frana.no", +"xn--frna-woa.no", +"froya.no", +"xn--frya-hra.no", +"fusa.no", +"fyresdal.no", +"forde.no", +"xn--frde-gra.no", +"gamvik.no", +"gangaviika.no", +"xn--ggaviika-8ya47h.no", +"gaular.no", +"gausdal.no", +"gildeskal.no", +"xn--gildeskl-g0a.no", +"giske.no", +"gjemnes.no", +"gjerdrum.no", +"gjerstad.no", +"gjesdal.no", +"gjovik.no", +"xn--gjvik-wua.no", +"gloppen.no", +"gol.no", +"gran.no", +"grane.no", +"granvin.no", +"gratangen.no", +"grimstad.no", +"grong.no", +"kraanghke.no", +"xn--kranghke-b0a.no", +"grue.no", +"gulen.no", +"hadsel.no", +"halden.no", +"halsa.no", +"hamar.no", +"hamaroy.no", +"habmer.no", +"xn--hbmer-xqa.no", +"hapmir.no", +"xn--hpmir-xqa.no", +"hammerfest.no", +"hammarfeasta.no", +"xn--hmmrfeasta-s4ac.no", +"haram.no", +"hareid.no", +"harstad.no", +"hasvik.no", +"aknoluokta.no", +"xn--koluokta-7ya57h.no", +"hattfjelldal.no", +"aarborte.no", +"haugesund.no", +"hemne.no", +"hemnes.no", +"hemsedal.no", +"heroy.more-og-romsdal.no", +"xn--hery-ira.xn--mre-og-romsdal-qqb.no", +"heroy.nordland.no", +"xn--hery-ira.nordland.no", +"hitra.no", +"hjartdal.no", +"hjelmeland.no", +"hobol.no", +"xn--hobl-ira.no", +"hof.no", +"hol.no", +"hole.no", +"holmestrand.no", +"holtalen.no", +"xn--holtlen-hxa.no", +"hornindal.no", +"horten.no", +"hurdal.no", +"hurum.no", +"hvaler.no", +"hyllestad.no", +"hagebostad.no", +"xn--hgebostad-g3a.no", +"hoyanger.no", +"xn--hyanger-q1a.no", +"hoylandet.no", +"xn--hylandet-54a.no", +"ha.no", +"xn--h-2fa.no", +"ibestad.no", +"inderoy.no", +"xn--indery-fya.no", +"iveland.no", +"jevnaker.no", +"jondal.no", +"jolster.no", +"xn--jlster-bya.no", +"karasjok.no", +"karasjohka.no", +"xn--krjohka-hwab49j.no", +"karlsoy.no", +"galsa.no", +"xn--gls-elac.no", +"karmoy.no", +"xn--karmy-yua.no", +"kautokeino.no", +"guovdageaidnu.no", +"klepp.no", +"klabu.no", +"xn--klbu-woa.no", +"kongsberg.no", +"kongsvinger.no", +"kragero.no", +"xn--krager-gya.no", +"kristiansand.no", +"kristiansund.no", +"krodsherad.no", +"xn--krdsherad-m8a.no", +"kvalsund.no", +"rahkkeravju.no", +"xn--rhkkervju-01af.no", +"kvam.no", +"kvinesdal.no", +"kvinnherad.no", +"kviteseid.no", +"kvitsoy.no", +"xn--kvitsy-fya.no", +"kvafjord.no", +"xn--kvfjord-nxa.no", +"giehtavuoatna.no", +"kvanangen.no", +"xn--kvnangen-k0a.no", +"navuotna.no", +"xn--nvuotna-hwa.no", +"kafjord.no", +"xn--kfjord-iua.no", +"gaivuotna.no", +"xn--givuotna-8ya.no", +"larvik.no", +"lavangen.no", +"lavagis.no", +"loabat.no", +"xn--loabt-0qa.no", +"lebesby.no", +"davvesiida.no", +"leikanger.no", +"leirfjord.no", +"leka.no", +"leksvik.no", +"lenvik.no", +"leangaviika.no", +"xn--leagaviika-52b.no", +"lesja.no", +"levanger.no", +"lier.no", +"lierne.no", +"lillehammer.no", +"lillesand.no", +"lindesnes.no", +"lindas.no", +"xn--linds-pra.no", +"lom.no", +"loppa.no", +"lahppi.no", +"xn--lhppi-xqa.no", +"lund.no", +"lunner.no", +"luroy.no", +"xn--lury-ira.no", +"luster.no", +"lyngdal.no", +"lyngen.no", +"ivgu.no", +"lardal.no", +"lerdal.no", +"xn--lrdal-sra.no", +"lodingen.no", +"xn--ldingen-q1a.no", +"lorenskog.no", +"xn--lrenskog-54a.no", +"loten.no", +"xn--lten-gra.no", +"malvik.no", +"masoy.no", +"xn--msy-ula0h.no", +"muosat.no", +"xn--muost-0qa.no", +"mandal.no", +"marker.no", +"marnardal.no", +"masfjorden.no", +"meland.no", +"meldal.no", +"melhus.no", +"meloy.no", +"xn--mely-ira.no", +"meraker.no", +"xn--merker-kua.no", +"moareke.no", +"xn--moreke-jua.no", +"midsund.no", +"midtre-gauldal.no", +"modalen.no", +"modum.no", +"molde.no", +"moskenes.no", +"moss.no", +"mosvik.no", +"malselv.no", +"xn--mlselv-iua.no", +"malatvuopmi.no", +"xn--mlatvuopmi-s4a.no", +"namdalseid.no", +"aejrie.no", +"namsos.no", +"namsskogan.no", +"naamesjevuemie.no", +"xn--nmesjevuemie-tcba.no", +"laakesvuemie.no", +"nannestad.no", +"narvik.no", +"narviika.no", +"naustdal.no", +"nedre-eiker.no", +"nes.akershus.no", +"nes.buskerud.no", +"nesna.no", +"nesodden.no", +"nesseby.no", +"unjarga.no", +"xn--unjrga-rta.no", +"nesset.no", +"nissedal.no", +"nittedal.no", +"nord-aurdal.no", +"nord-fron.no", +"nord-odal.no", +"norddal.no", +"nordkapp.no", +"davvenjarga.no", +"xn--davvenjrga-y4a.no", +"nordre-land.no", +"nordreisa.no", +"raisa.no", +"xn--risa-5na.no", +"nore-og-uvdal.no", +"notodden.no", +"naroy.no", +"xn--nry-yla5g.no", +"notteroy.no", +"xn--nttery-byae.no", +"odda.no", +"oksnes.no", +"xn--ksnes-uua.no", +"oppdal.no", +"oppegard.no", +"xn--oppegrd-ixa.no", +"orkdal.no", +"orland.no", +"xn--rland-uua.no", +"orskog.no", +"xn--rskog-uua.no", +"orsta.no", +"xn--rsta-fra.no", +"os.hedmark.no", +"os.hordaland.no", +"osen.no", +"osteroy.no", +"xn--ostery-fya.no", +"ostre-toten.no", +"xn--stre-toten-zcb.no", +"overhalla.no", +"ovre-eiker.no", +"xn--vre-eiker-k8a.no", +"oyer.no", +"xn--yer-zna.no", +"oygarden.no", +"xn--ygarden-p1a.no", +"oystre-slidre.no", +"xn--ystre-slidre-ujb.no", +"porsanger.no", +"porsangu.no", +"xn--porsgu-sta26f.no", +"porsgrunn.no", +"radoy.no", +"xn--rady-ira.no", +"rakkestad.no", +"rana.no", +"ruovat.no", +"randaberg.no", +"rauma.no", +"rendalen.no", +"rennebu.no", +"rennesoy.no", +"xn--rennesy-v1a.no", +"rindal.no", +"ringebu.no", +"ringerike.no", +"ringsaker.no", +"rissa.no", +"risor.no", +"xn--risr-ira.no", +"roan.no", +"rollag.no", +"rygge.no", +"ralingen.no", +"xn--rlingen-mxa.no", +"rodoy.no", +"xn--rdy-0nab.no", +"romskog.no", +"xn--rmskog-bya.no", +"roros.no", +"xn--rros-gra.no", +"rost.no", +"xn--rst-0na.no", +"royken.no", +"xn--ryken-vua.no", +"royrvik.no", +"xn--ryrvik-bya.no", +"rade.no", +"xn--rde-ula.no", +"salangen.no", +"siellak.no", +"saltdal.no", +"salat.no", +"xn--slt-elab.no", +"xn--slat-5na.no", +"samnanger.no", +"sande.more-og-romsdal.no", +"sande.xn--mre-og-romsdal-qqb.no", +"sande.vestfold.no", +"sandefjord.no", +"sandnes.no", +"sandoy.no", +"xn--sandy-yua.no", +"sarpsborg.no", +"sauda.no", +"sauherad.no", +"sel.no", +"selbu.no", +"selje.no", +"seljord.no", +"sigdal.no", +"siljan.no", +"sirdal.no", +"skaun.no", +"skedsmo.no", +"ski.no", +"skien.no", +"skiptvet.no", +"skjervoy.no", +"xn--skjervy-v1a.no", +"skierva.no", +"xn--skierv-uta.no", +"skjak.no", +"xn--skjk-soa.no", +"skodje.no", +"skanland.no", +"xn--sknland-fxa.no", +"skanit.no", +"xn--sknit-yqa.no", +"smola.no", +"xn--smla-hra.no", +"snillfjord.no", +"snasa.no", +"xn--snsa-roa.no", +"snoasa.no", +"snaase.no", +"xn--snase-nra.no", +"sogndal.no", +"sokndal.no", +"sola.no", +"solund.no", +"songdalen.no", +"sortland.no", +"spydeberg.no", +"stange.no", +"stavanger.no", +"steigen.no", +"steinkjer.no", +"stjordal.no", +"xn--stjrdal-s1a.no", +"stokke.no", +"stor-elvdal.no", +"stord.no", +"stordal.no", +"storfjord.no", +"omasvuotna.no", +"strand.no", +"stranda.no", +"stryn.no", +"sula.no", +"suldal.no", +"sund.no", +"sunndal.no", +"surnadal.no", +"sveio.no", +"svelvik.no", +"sykkylven.no", +"sogne.no", +"xn--sgne-gra.no", +"somna.no", +"xn--smna-gra.no", +"sondre-land.no", +"xn--sndre-land-0cb.no", +"sor-aurdal.no", +"xn--sr-aurdal-l8a.no", +"sor-fron.no", +"xn--sr-fron-q1a.no", +"sor-odal.no", +"xn--sr-odal-q1a.no", +"sor-varanger.no", +"xn--sr-varanger-ggb.no", +"matta-varjjat.no", +"xn--mtta-vrjjat-k7af.no", +"sorfold.no", +"xn--srfold-bya.no", +"sorreisa.no", +"xn--srreisa-q1a.no", +"sorum.no", +"xn--srum-gra.no", +"tana.no", +"deatnu.no", +"time.no", +"tingvoll.no", +"tinn.no", +"tjeldsund.no", +"dielddanuorri.no", +"tjome.no", +"xn--tjme-hra.no", +"tokke.no", +"tolga.no", +"torsken.no", +"tranoy.no", +"xn--trany-yua.no", +"tromso.no", +"xn--troms-zua.no", +"tromsa.no", +"romsa.no", +"trondheim.no", +"troandin.no", +"trysil.no", +"trana.no", +"xn--trna-woa.no", +"trogstad.no", +"xn--trgstad-r1a.no", +"tvedestrand.no", +"tydal.no", +"tynset.no", +"tysfjord.no", +"divtasvuodna.no", +"divttasvuotna.no", +"tysnes.no", +"tysvar.no", +"xn--tysvr-vra.no", +"tonsberg.no", +"xn--tnsberg-q1a.no", +"ullensaker.no", +"ullensvang.no", +"ulvik.no", +"utsira.no", +"vadso.no", +"xn--vads-jra.no", +"cahcesuolo.no", +"xn--hcesuolo-7ya35b.no", +"vaksdal.no", +"valle.no", +"vang.no", +"vanylven.no", +"vardo.no", +"xn--vard-jra.no", +"varggat.no", +"xn--vrggt-xqad.no", +"vefsn.no", +"vaapste.no", +"vega.no", +"vegarshei.no", +"xn--vegrshei-c0a.no", +"vennesla.no", +"verdal.no", +"verran.no", +"vestby.no", +"vestnes.no", +"vestre-slidre.no", +"vestre-toten.no", +"vestvagoy.no", +"xn--vestvgy-ixa6o.no", +"vevelstad.no", +"vik.no", +"vikna.no", +"vindafjord.no", +"volda.no", +"voss.no", +"varoy.no", +"xn--vry-yla5g.no", +"vagan.no", +"xn--vgan-qoa.no", +"voagat.no", +"vagsoy.no", +"xn--vgsy-qoa0j.no", +"vaga.no", +"xn--vg-yiab.no", +"valer.ostfold.no", +"xn--vler-qoa.xn--stfold-9xa.no", +"valer.hedmark.no", +"xn--vler-qoa.hedmark.no", +"np", +"biz.nr", +"info.nr", +"gov.nr", +"edu.nr", +"org.nr", +"net.nr", +"com.nr", +"nz", +"co.om", +"com.om", +"edu.om", +"gov.om", +"med.om", +"museum.om", +"net.om", +"org.om", +"pro.om", +"ac.pa", +"gob.pa", +"com.pa", +"org.pa", +"sld.pa", +"edu.pa", +"net.pa", +"ing.pa", +"abo.pa", +"med.pa", +"nom.pa", +"edu.pe", +"gob.pe", +"nom.pe", +"mil.pe", +"org.pe", +"com.pe", +"net.pe", +"com.pf", +"org.pf", +"edu.pf", +"pg", +"com.ph", +"net.ph", +"org.ph", +"gov.ph", +"edu.ph", +"ngo.ph", +"mil.ph", +"i.ph", +"com.pk", +"net.pk", +"edu.pk", +"org.pk", +"fam.pk", +"biz.pk", +"web.pk", +"gov.pk", +"gob.pk", +"gok.pk", +"gon.pk", +"gop.pk", +"gos.pk", +"info.pk", +"aid.pl", +"agro.pl", +"atm.pl", +"auto.pl", +"biz.pl", +"com.pl", +"edu.pl", +"gmina.pl", +"gsm.pl", +"info.pl", +"mail.pl", +"miasta.pl", +"media.pl", +"mil.pl", +"net.pl", +"nieruchomosci.pl", +"nom.pl", +"org.pl", +"pc.pl", +"powiat.pl", +"priv.pl", +"realestate.pl", +"rel.pl", +"sex.pl", +"shop.pl", +"sklep.pl", +"sos.pl", +"szkola.pl", +"targi.pl", +"tm.pl", +"tourism.pl", +"travel.pl", +"turystyka.pl", +"6bone.pl", +"art.pl", +"mbone.pl", +"gov.pl", +"uw.gov.pl", +"um.gov.pl", +"ug.gov.pl", +"upow.gov.pl", +"starostwo.gov.pl", +"so.gov.pl", +"sr.gov.pl", +"po.gov.pl", +"pa.gov.pl", +"ngo.pl", +"irc.pl", +"usenet.pl", +"augustow.pl", +"babia-gora.pl", +"bedzin.pl", +"beskidy.pl", +"bialowieza.pl", +"bialystok.pl", +"bielawa.pl", +"bieszczady.pl", +"boleslawiec.pl", +"bydgoszcz.pl", +"bytom.pl", +"cieszyn.pl", +"czeladz.pl", +"czest.pl", +"dlugoleka.pl", +"elblag.pl", +"elk.pl", +"glogow.pl", +"gniezno.pl", +"gorlice.pl", +"grajewo.pl", +"ilawa.pl", +"jaworzno.pl", +"jelenia-gora.pl", +"jgora.pl", +"kalisz.pl", +"kazimierz-dolny.pl", +"karpacz.pl", +"kartuzy.pl", +"kaszuby.pl", +"katowice.pl", +"kepno.pl", +"ketrzyn.pl", +"klodzko.pl", +"kobierzyce.pl", +"kolobrzeg.pl", +"konin.pl", +"konskowola.pl", +"kutno.pl", +"lapy.pl", +"lebork.pl", +"legnica.pl", +"lezajsk.pl", +"limanowa.pl", +"lomza.pl", +"lowicz.pl", +"lubin.pl", +"lukow.pl", +"malbork.pl", +"malopolska.pl", +"mazowsze.pl", +"mazury.pl", +"mielec.pl", +"mielno.pl", +"mragowo.pl", +"naklo.pl", +"nowaruda.pl", +"nysa.pl", +"olawa.pl", +"olecko.pl", +"olkusz.pl", +"olsztyn.pl", +"opoczno.pl", +"opole.pl", +"ostroda.pl", +"ostroleka.pl", +"ostrowiec.pl", +"ostrowwlkp.pl", +"pila.pl", +"pisz.pl", +"podhale.pl", +"podlasie.pl", +"polkowice.pl", +"pomorze.pl", +"pomorskie.pl", +"prochowice.pl", +"pruszkow.pl", +"przeworsk.pl", +"pulawy.pl", +"radom.pl", +"rawa-maz.pl", +"rybnik.pl", +"rzeszow.pl", +"sanok.pl", +"sejny.pl", +"siedlce.pl", +"slask.pl", +"slupsk.pl", +"sosnowiec.pl", +"stalowa-wola.pl", +"skoczow.pl", +"starachowice.pl", +"stargard.pl", +"suwalki.pl", +"swidnica.pl", +"swiebodzin.pl", +"swinoujscie.pl", +"szczecin.pl", +"szczytno.pl", +"tarnobrzeg.pl", +"tgory.pl", +"turek.pl", +"tychy.pl", +"ustka.pl", +"walbrzych.pl", +"warmia.pl", +"warszawa.pl", +"waw.pl", +"wegrow.pl", +"wielun.pl", +"wlocl.pl", +"wloclawek.pl", +"wodzislaw.pl", +"wolomin.pl", +"wroclaw.pl", +"zachpomor.pl", +"zagan.pl", +"zarow.pl", +"zgora.pl", +"zgorzelec.pl", +"gda.pl", +"gdansk.pl", +"gdynia.pl", +"med.pl", +"sopot.pl", +"gliwice.pl", +"krakow.pl", +"poznan.pl", +"wroc.pl", +"zakopane.pl", +"gov.pn", +"co.pn", +"org.pn", +"edu.pn", +"net.pn", +"com.pr", +"net.pr", +"org.pr", +"gov.pr", +"edu.pr", +"isla.pr", +"pro.pr", +"biz.pr", +"info.pr", +"name.pr", +"est.pr", +"prof.pr", +"ac.pr", +"aca.pro", +"bar.pro", +"cpa.pro", +"jur.pro", +"law.pro", +"med.pro", +"eng.pro", +"edu.ps", +"gov.ps", +"sec.ps", +"plo.ps", +"com.ps", +"org.ps", +"net.ps", +"net.pt", +"gov.pt", +"org.pt", +"edu.pt", +"int.pt", +"publ.pt", +"com.pt", +"nome.pt", +"co.pw", +"ne.pw", +"or.pw", +"ed.pw", +"go.pw", +"belau.pw", +"com.py", +"coop.py", +"edu.py", +"gov.py", +"mil.py", +"net.py", +"org.py", +"com.qa", +"edu.qa", +"gov.qa", +"mil.qa", +"name.qa", +"net.qa", +"org.qa", +"sch.qa", +"com.re", +"asso.re", +"nom.re", +"com.ro", +"org.ro", +"tm.ro", +"nt.ro", +"nom.ro", +"info.ro", +"rec.ro", +"arts.ro", +"firm.ro", +"store.ro", +"www.ro", +"co.rs", +"org.rs", +"edu.rs", +"ac.rs", +"gov.rs", +"in.rs", +"ac.ru", +"com.ru", +"edu.ru", +"int.ru", +"net.ru", +"org.ru", +"pp.ru", +"adygeya.ru", +"altai.ru", +"amur.ru", +"arkhangelsk.ru", +"astrakhan.ru", +"bashkiria.ru", +"belgorod.ru", +"bir.ru", +"bryansk.ru", +"buryatia.ru", +"cbg.ru", +"chel.ru", +"chelyabinsk.ru", +"chita.ru", +"chukotka.ru", +"chuvashia.ru", +"dagestan.ru", +"dudinka.ru", +"e-burg.ru", +"grozny.ru", +"irkutsk.ru", +"ivanovo.ru", +"izhevsk.ru", +"jar.ru", +"joshkar-ola.ru", +"kalmykia.ru", +"kaluga.ru", +"kamchatka.ru", +"karelia.ru", +"kazan.ru", +"kchr.ru", +"kemerovo.ru", +"khabarovsk.ru", +"khakassia.ru", +"khv.ru", +"kirov.ru", +"koenig.ru", +"komi.ru", +"kostroma.ru", +"krasnoyarsk.ru", +"kuban.ru", +"kurgan.ru", +"kursk.ru", +"lipetsk.ru", +"magadan.ru", +"mari.ru", +"mari-el.ru", +"marine.ru", +"mordovia.ru", +"mosreg.ru", +"msk.ru", +"murmansk.ru", +"nalchik.ru", +"nnov.ru", +"nov.ru", +"novosibirsk.ru", +"nsk.ru", +"omsk.ru", +"orenburg.ru", +"oryol.ru", +"palana.ru", +"penza.ru", +"perm.ru", +"pskov.ru", +"ptz.ru", +"rnd.ru", +"ryazan.ru", +"sakhalin.ru", +"samara.ru", +"saratov.ru", +"simbirsk.ru", +"smolensk.ru", +"spb.ru", +"stavropol.ru", +"stv.ru", +"surgut.ru", +"tambov.ru", +"tatarstan.ru", +"tom.ru", +"tomsk.ru", +"tsaritsyn.ru", +"tsk.ru", +"tula.ru", +"tuva.ru", +"tver.ru", +"tyumen.ru", +"udm.ru", +"udmurtia.ru", +"ulan-ude.ru", +"vladikavkaz.ru", +"vladimir.ru", +"vladivostok.ru", +"volgograd.ru", +"vologda.ru", +"voronezh.ru", +"vrn.ru", +"vyatka.ru", +"yakutia.ru", +"yamal.ru", +"yaroslavl.ru", +"yekaterinburg.ru", +"yuzhno-sakhalinsk.ru", +"amursk.ru", +"baikal.ru", +"cmw.ru", +"fareast.ru", +"jamal.ru", +"kms.ru", +"k-uralsk.ru", +"kustanai.ru", +"kuzbass.ru", +"magnitka.ru", +"mytis.ru", +"nakhodka.ru", +"nkz.ru", +"norilsk.ru", +"oskol.ru", +"pyatigorsk.ru", +"rubtsovsk.ru", +"snz.ru", +"syzran.ru", +"vdonsk.ru", +"zgrad.ru", +"gov.ru", +"mil.ru", +"test.ru", +"gov.rw", +"net.rw", +"edu.rw", +"ac.rw", +"com.rw", +"co.rw", +"int.rw", +"mil.rw", +"gouv.rw", +"com.sa", +"net.sa", +"org.sa", +"gov.sa", +"med.sa", +"pub.sa", +"edu.sa", +"sch.sa", +"com.sb", +"edu.sb", +"gov.sb", +"net.sb", +"org.sb", +"com.sc", +"gov.sc", +"net.sc", +"org.sc", +"edu.sc", +"com.sd", +"net.sd", +"org.sd", +"edu.sd", +"med.sd", +"tv.sd", +"gov.sd", +"info.sd", +"a.se", +"ac.se", +"b.se", +"bd.se", +"brand.se", +"c.se", +"d.se", +"e.se", +"f.se", +"fh.se", +"fhsk.se", +"fhv.se", +"g.se", +"h.se", +"i.se", +"k.se", +"komforb.se", +"kommunalforbund.se", +"komvux.se", +"l.se", +"lanbib.se", +"m.se", +"n.se", +"naturbruksgymn.se", +"o.se", +"org.se", +"p.se", +"parti.se", +"pp.se", +"press.se", +"r.se", +"s.se", +"t.se", +"tm.se", +"u.se", +"w.se", +"x.se", +"y.se", +"z.se", +"com.sg", +"net.sg", +"org.sg", +"gov.sg", +"edu.sg", +"per.sg", +"com.sh", +"net.sh", +"gov.sh", +"org.sh", +"mil.sh", +"com.sl", +"net.sl", +"edu.sl", +"gov.sl", +"org.sl", +"art.sn", +"com.sn", +"edu.sn", +"gouv.sn", +"org.sn", +"perso.sn", +"univ.sn", +"com.so", +"net.so", +"org.so", +"co.st", +"com.st", +"consulado.st", +"edu.st", +"embaixada.st", +"gov.st", +"mil.st", +"net.st", +"org.st", +"principe.st", +"saotome.st", +"store.st", +"com.sv", +"edu.sv", +"gob.sv", +"org.sv", +"red.sv", +"gov.sx", +"edu.sy", +"gov.sy", +"net.sy", +"mil.sy", +"com.sy", +"org.sy", +"co.sz", +"ac.sz", +"org.sz", +"ac.th", +"co.th", +"go.th", +"in.th", +"mi.th", +"net.th", +"or.th", +"ac.tj", +"biz.tj", +"co.tj", +"com.tj", +"edu.tj", +"go.tj", +"gov.tj", +"int.tj", +"mil.tj", +"name.tj", +"net.tj", +"nic.tj", +"org.tj", +"test.tj", +"web.tj", +"gov.tl", +"com.tm", +"co.tm", +"org.tm", +"net.tm", +"nom.tm", +"gov.tm", +"mil.tm", +"edu.tm", +"com.tn", +"ens.tn", +"fin.tn", +"gov.tn", +"ind.tn", +"intl.tn", +"nat.tn", +"net.tn", +"org.tn", +"info.tn", +"perso.tn", +"tourism.tn", +"edunet.tn", +"rnrt.tn", +"rns.tn", +"rnu.tn", +"mincom.tn", +"agrinet.tn", +"defense.tn", +"turen.tn", +"com.to", +"gov.to", +"net.to", +"org.to", +"edu.to", +"mil.to", +"tr", +"nic.tr", +"gov.nc.tr", +"co.tt", +"com.tt", +"org.tt", +"net.tt", +"biz.tt", +"info.tt", +"pro.tt", +"int.tt", +"coop.tt", +"jobs.tt", +"mobi.tt", +"travel.tt", +"museum.tt", +"aero.tt", +"name.tt", +"gov.tt", +"edu.tt", +"edu.tw", +"gov.tw", +"mil.tw", +"com.tw", +"net.tw", +"org.tw", +"idv.tw", +"game.tw", +"ebiz.tw", +"club.tw", +"xn--zf0ao64a.tw", +"xn--uc0atv.tw", +"xn--czrw28b.tw", +"ac.tz", +"co.tz", +"go.tz", +"hotel.tz", +"info.tz", +"me.tz", +"mil.tz", +"mobi.tz", +"ne.tz", +"or.tz", +"sc.tz", +"tv.tz", +"com.ua", +"edu.ua", +"gov.ua", +"in.ua", +"net.ua", +"org.ua", +"cherkassy.ua", +"cherkasy.ua", +"chernigov.ua", +"chernihiv.ua", +"chernivtsi.ua", +"chernovtsy.ua", +"ck.ua", +"cn.ua", +"cr.ua", +"crimea.ua", +"cv.ua", +"dn.ua", +"dnepropetrovsk.ua", +"dnipropetrovsk.ua", +"dominic.ua", +"donetsk.ua", +"dp.ua", +"if.ua", +"ivano-frankivsk.ua", +"kh.ua", +"kharkiv.ua", +"kharkov.ua", +"kherson.ua", +"khmelnitskiy.ua", +"khmelnytskyi.ua", +"kiev.ua", +"kirovograd.ua", +"km.ua", +"kr.ua", +"krym.ua", +"ks.ua", +"kv.ua", +"kyiv.ua", +"lg.ua", +"lt.ua", +"lugansk.ua", +"lutsk.ua", +"lv.ua", +"lviv.ua", +"mk.ua", +"mykolaiv.ua", +"nikolaev.ua", +"od.ua", +"odesa.ua", +"odessa.ua", +"pl.ua", +"poltava.ua", +"rivne.ua", +"rovno.ua", +"rv.ua", +"sb.ua", +"sebastopol.ua", +"sevastopol.ua", +"sm.ua", +"sumy.ua", +"te.ua", +"ternopil.ua", +"uz.ua", +"uzhgorod.ua", +"vinnica.ua", +"vinnytsia.ua", +"vn.ua", +"volyn.ua", +"yalta.ua", +"zaporizhzhe.ua", +"zaporizhzhia.ua", +"zhitomir.ua", +"zhytomyr.ua", +"zp.ua", +"zt.ua", +"co.ua", +"pp.ua", +"co.ug", +"or.ug", +"ac.ug", +"sc.ug", +"go.ug", +"ne.ug", +"com.ug", +"org.ug", +"uk", +"sch.uk", +"bl.uk", +"british-library.uk", +"jet.uk", +"mod.uk", +"national-library-scotland.uk", +"nel.uk", +"nic.uk", +"nls.uk", +"parliament.uk", +"dni.us", +"fed.us", +"isa.us", +"kids.us", +"nsn.us", +"ak.us", +"al.us", +"ar.us", +"as.us", +"az.us", +"ca.us", +"co.us", +"ct.us", +"dc.us", +"de.us", +"fl.us", +"ga.us", +"gu.us", +"hi.us", +"ia.us", +"id.us", +"il.us", +"in.us", +"ks.us", +"ky.us", +"la.us", +"ma.us", +"md.us", +"me.us", +"mi.us", +"mn.us", +"mo.us", +"ms.us", +"mt.us", +"nc.us", +"nd.us", +"ne.us", +"nh.us", +"nj.us", +"nm.us", +"nv.us", +"ny.us", +"oh.us", +"ok.us", +"or.us", +"pa.us", +"pr.us", +"ri.us", +"sc.us", +"sd.us", +"tn.us", +"tx.us", +"ut.us", +"vi.us", +"vt.us", +"va.us", +"wa.us", +"wi.us", +"wv.us", +"wy.us", +"k12.ak.us", +"k12.al.us", +"k12.ar.us", +"k12.as.us", +"k12.az.us", +"k12.ca.us", +"k12.co.us", +"k12.ct.us", +"k12.dc.us", +"k12.de.us", +"k12.fl.us", +"k12.ga.us", +"k12.gu.us", +"k12.ia.us", +"k12.id.us", +"k12.il.us", +"k12.in.us", +"k12.ks.us", +"k12.ky.us", +"k12.la.us", +"k12.ma.us", +"k12.md.us", +"k12.me.us", +"k12.mi.us", +"k12.mn.us", +"k12.mo.us", +"k12.ms.us", +"k12.mt.us", +"k12.nc.us", +"k12.nd.us", +"k12.ne.us", +"k12.nh.us", +"k12.nj.us", +"k12.nm.us", +"k12.nv.us", +"k12.ny.us", +"k12.oh.us", +"k12.ok.us", +"k12.or.us", +"k12.pa.us", +"k12.pr.us", +"k12.ri.us", +"k12.sc.us", +"k12.tn.us", +"k12.tx.us", +"k12.ut.us", +"k12.vi.us", +"k12.vt.us", +"k12.va.us", +"k12.wa.us", +"k12.wi.us", +"k12.wy.us", +"cc.ak.us", +"cc.al.us", +"cc.ar.us", +"cc.as.us", +"cc.az.us", +"cc.ca.us", +"cc.co.us", +"cc.ct.us", +"cc.dc.us", +"cc.de.us", +"cc.fl.us", +"cc.ga.us", +"cc.gu.us", +"cc.hi.us", +"cc.ia.us", +"cc.id.us", +"cc.il.us", +"cc.in.us", +"cc.ks.us", +"cc.ky.us", +"cc.la.us", +"cc.ma.us", +"cc.md.us", +"cc.me.us", +"cc.mi.us", +"cc.mn.us", +"cc.mo.us", +"cc.ms.us", +"cc.mt.us", +"cc.nc.us", +"cc.nd.us", +"cc.ne.us", +"cc.nh.us", +"cc.nj.us", +"cc.nm.us", +"cc.nv.us", +"cc.ny.us", +"cc.oh.us", +"cc.ok.us", +"cc.or.us", +"cc.pa.us", +"cc.pr.us", +"cc.ri.us", +"cc.sc.us", +"cc.sd.us", +"cc.tn.us", +"cc.tx.us", +"cc.ut.us", +"cc.vi.us", +"cc.vt.us", +"cc.va.us", +"cc.wa.us", +"cc.wi.us", +"cc.wv.us", +"cc.wy.us", +"lib.ak.us", +"lib.al.us", +"lib.ar.us", +"lib.as.us", +"lib.az.us", +"lib.ca.us", +"lib.co.us", +"lib.ct.us", +"lib.dc.us", +"lib.de.us", +"lib.fl.us", +"lib.ga.us", +"lib.gu.us", +"lib.hi.us", +"lib.ia.us", +"lib.id.us", +"lib.il.us", +"lib.in.us", +"lib.ks.us", +"lib.ky.us", +"lib.la.us", +"lib.ma.us", +"lib.md.us", +"lib.me.us", +"lib.mi.us", +"lib.mn.us", +"lib.mo.us", +"lib.ms.us", +"lib.mt.us", +"lib.nc.us", +"lib.nd.us", +"lib.ne.us", +"lib.nh.us", +"lib.nj.us", +"lib.nm.us", +"lib.nv.us", +"lib.ny.us", +"lib.oh.us", +"lib.ok.us", +"lib.or.us", +"lib.pa.us", +"lib.pr.us", +"lib.ri.us", +"lib.sc.us", +"lib.sd.us", +"lib.tn.us", +"lib.tx.us", +"lib.ut.us", +"lib.vi.us", +"lib.vt.us", +"lib.va.us", +"lib.wa.us", +"lib.wi.us", +"lib.wy.us", +"pvt.k12.ma.us", +"chtr.k12.ma.us", +"paroch.k12.ma.us", +"com.uy", +"edu.uy", +"gub.uy", +"mil.uy", +"net.uy", +"org.uy", +"co.uz", +"com.uz", +"net.uz", +"org.uz", +"com.vc", +"net.vc", +"org.vc", +"gov.vc", +"mil.vc", +"edu.vc", +"co.ve", +"com.ve", +"e12.ve", +"edu.ve", +"gov.ve", +"info.ve", +"mil.ve", +"net.ve", +"org.ve", +"web.ve", +"co.vi", +"com.vi", +"k12.vi", +"net.vi", +"org.vi", +"com.vn", +"net.vn", +"org.vn", +"edu.vn", +"gov.vn", +"int.vn", +"ac.vn", +"biz.vn", +"info.vn", +"name.vn", +"pro.vn", +"health.vn", +"com.ws", +"net.ws", +"org.ws", +"gov.ws", +"edu.ws", +"ye", +"za", +"zm", +"zw", +"cloudfront.net", +"compute.amazonaws.com", +"us-east-1.amazonaws.com", +"compute-1.amazonaws.com", +"z-1.compute-1.amazonaws.com", +"z-2.compute-1.amazonaws.com", +"ap-northeast-1.compute.amazonaws.com", +"ap-southeast-1.compute.amazonaws.com", +"ap-southeast-2.compute.amazonaws.com", +"eu-west-1.compute.amazonaws.com", +"sa-east-1.compute.amazonaws.com", +"us-gov-west-1.compute.amazonaws.com", +"us-west-1.compute.amazonaws.com", +"us-west-2.compute.amazonaws.com", +"elasticbeanstalk.com", +"elb.amazonaws.com", +"s3.amazonaws.com", +"s3-us-west-2.amazonaws.com", +"s3-us-west-1.amazonaws.com", +"s3-eu-west-1.amazonaws.com", +"s3-ap-southeast-1.amazonaws.com", +"s3-ap-southeast-2.amazonaws.com", +"s3-ap-northeast-1.amazonaws.com", +"s3-sa-east-1.amazonaws.com", +"s3-us-gov-west-1.amazonaws.com", +"s3-fips-us-gov-west-1.amazonaws.com", +"s3-website-us-east-1.amazonaws.com", +"s3-website-us-west-2.amazonaws.com", +"s3-website-us-west-1.amazonaws.com", +"s3-website-eu-west-1.amazonaws.com", +"s3-website-ap-southeast-1.amazonaws.com", +"s3-website-ap-southeast-2.amazonaws.com", +"s3-website-ap-northeast-1.amazonaws.com", +"s3-website-sa-east-1.amazonaws.com", +"s3-website-us-gov-west-1.amazonaws.com", +"betainabox.com", +"ae.org", +"ar.com", +"br.com", +"cn.com", +"com.de", +"de.com", +"eu.com", +"gb.com", +"gb.net", +"hu.com", +"hu.net", +"jp.net", +"jpn.com", +"kr.com", +"mex.com", +"no.com", +"qc.com", +"ru.com", +"sa.com", +"se.com", +"se.net", +"uk.com", +"uk.net", +"us.com", +"uy.com", +"za.bz", +"za.com", +"africa.com", +"gr.com", +"in.net", +"us.org", +"co.com", +"c.la", +"cloudcontrolled.com", +"cloudcontrolapp.com", +"co.ca", +"co.nl", +"co.no", +"cupcake.is", +"dreamhosters.com", +"dyndns-at-home.com", +"dyndns-at-work.com", +"dyndns-blog.com", +"dyndns-free.com", +"dyndns-home.com", +"dyndns-ip.com", +"dyndns-mail.com", +"dyndns-office.com", +"dyndns-pics.com", +"dyndns-remote.com", +"dyndns-server.com", +"dyndns-web.com", +"dyndns-wiki.com", +"dyndns-work.com", +"dyndns.biz", +"dyndns.info", +"dyndns.org", +"dyndns.tv", +"at-band-camp.net", +"ath.cx", +"barrel-of-knowledge.info", +"barrell-of-knowledge.info", +"better-than.tv", +"blogdns.com", +"blogdns.net", +"blogdns.org", +"blogsite.org", +"boldlygoingnowhere.org", +"broke-it.net", +"buyshouses.net", +"cechire.com", +"dnsalias.com", +"dnsalias.net", +"dnsalias.org", +"dnsdojo.com", +"dnsdojo.net", +"dnsdojo.org", +"does-it.net", +"doesntexist.com", +"doesntexist.org", +"dontexist.com", +"dontexist.net", +"dontexist.org", +"doomdns.com", +"doomdns.org", +"dvrdns.org", +"dyn-o-saur.com", +"dynalias.com", +"dynalias.net", +"dynalias.org", +"dynathome.net", +"dyndns.ws", +"endofinternet.net", +"endofinternet.org", +"endoftheinternet.org", +"est-a-la-maison.com", +"est-a-la-masion.com", +"est-le-patron.com", +"est-mon-blogueur.com", +"for-better.biz", +"for-more.biz", +"for-our.info", +"for-some.biz", +"for-the.biz", +"forgot.her.name", +"forgot.his.name", +"from-ak.com", +"from-al.com", +"from-ar.com", +"from-az.net", +"from-ca.com", +"from-co.net", +"from-ct.com", +"from-dc.com", +"from-de.com", +"from-fl.com", +"from-ga.com", +"from-hi.com", +"from-ia.com", +"from-id.com", +"from-il.com", +"from-in.com", +"from-ks.com", +"from-ky.com", +"from-la.net", +"from-ma.com", +"from-md.com", +"from-me.org", +"from-mi.com", +"from-mn.com", +"from-mo.com", +"from-ms.com", +"from-mt.com", +"from-nc.com", +"from-nd.com", +"from-ne.com", +"from-nh.com", +"from-nj.com", +"from-nm.com", +"from-nv.com", +"from-ny.net", +"from-oh.com", +"from-ok.com", +"from-or.com", +"from-pa.com", +"from-pr.com", +"from-ri.com", +"from-sc.com", +"from-sd.com", +"from-tn.com", +"from-tx.com", +"from-ut.com", +"from-va.com", +"from-vt.com", +"from-wa.com", +"from-wi.com", +"from-wv.com", +"from-wy.com", +"ftpaccess.cc", +"fuettertdasnetz.de", +"game-host.org", +"game-server.cc", +"getmyip.com", +"gets-it.net", +"go.dyndns.org", +"gotdns.com", +"gotdns.org", +"groks-the.info", +"groks-this.info", +"ham-radio-op.net", +"here-for-more.info", +"hobby-site.com", +"hobby-site.org", +"home.dyndns.org", +"homedns.org", +"homeftp.net", +"homeftp.org", +"homeip.net", +"homelinux.com", +"homelinux.net", +"homelinux.org", +"homeunix.com", +"homeunix.net", +"homeunix.org", +"iamallama.com", +"in-the-band.net", +"is-a-anarchist.com", +"is-a-blogger.com", +"is-a-bookkeeper.com", +"is-a-bruinsfan.org", +"is-a-bulls-fan.com", +"is-a-candidate.org", +"is-a-caterer.com", +"is-a-celticsfan.org", +"is-a-chef.com", +"is-a-chef.net", +"is-a-chef.org", +"is-a-conservative.com", +"is-a-cpa.com", +"is-a-cubicle-slave.com", +"is-a-democrat.com", +"is-a-designer.com", +"is-a-doctor.com", +"is-a-financialadvisor.com", +"is-a-geek.com", +"is-a-geek.net", +"is-a-geek.org", +"is-a-green.com", +"is-a-guru.com", +"is-a-hard-worker.com", +"is-a-hunter.com", +"is-a-knight.org", +"is-a-landscaper.com", +"is-a-lawyer.com", +"is-a-liberal.com", +"is-a-libertarian.com", +"is-a-linux-user.org", +"is-a-llama.com", +"is-a-musician.com", +"is-a-nascarfan.com", +"is-a-nurse.com", +"is-a-painter.com", +"is-a-patsfan.org", +"is-a-personaltrainer.com", +"is-a-photographer.com", +"is-a-player.com", +"is-a-republican.com", +"is-a-rockstar.com", +"is-a-socialist.com", +"is-a-soxfan.org", +"is-a-student.com", +"is-a-teacher.com", +"is-a-techie.com", +"is-a-therapist.com", +"is-an-accountant.com", +"is-an-actor.com", +"is-an-actress.com", +"is-an-anarchist.com", +"is-an-artist.com", +"is-an-engineer.com", +"is-an-entertainer.com", +"is-by.us", +"is-certified.com", +"is-found.org", +"is-gone.com", +"is-into-anime.com", +"is-into-cars.com", +"is-into-cartoons.com", +"is-into-games.com", +"is-leet.com", +"is-lost.org", +"is-not-certified.com", +"is-saved.org", +"is-slick.com", +"is-uberleet.com", +"is-very-bad.org", +"is-very-evil.org", +"is-very-good.org", +"is-very-nice.org", +"is-very-sweet.org", +"is-with-theband.com", +"isa-geek.com", +"isa-geek.net", +"isa-geek.org", +"isa-hockeynut.com", +"issmarterthanyou.com", +"isteingeek.de", +"istmein.de", +"kicks-ass.net", +"kicks-ass.org", +"knowsitall.info", +"land-4-sale.us", +"lebtimnetz.de", +"leitungsen.de", +"likes-pie.com", +"likescandy.com", +"merseine.nu", +"mine.nu", +"misconfused.org", +"mypets.ws", +"myphotos.cc", +"neat-url.com", +"office-on-the.net", +"on-the-web.tv", +"podzone.net", +"podzone.org", +"readmyblog.org", +"saves-the-whales.com", +"scrapper-site.net", +"scrapping.cc", +"selfip.biz", +"selfip.com", +"selfip.info", +"selfip.net", +"selfip.org", +"sells-for-less.com", +"sells-for-u.com", +"sells-it.net", +"sellsyourhome.org", +"servebbs.com", +"servebbs.net", +"servebbs.org", +"serveftp.net", +"serveftp.org", +"servegame.org", +"shacknet.nu", +"simple-url.com", +"space-to-rent.com", +"stuff-4-sale.org", +"stuff-4-sale.us", +"teaches-yoga.com", +"thruhere.net", +"traeumtgerade.de", +"webhop.biz", +"webhop.info", +"webhop.net", +"webhop.org", +"worse-than.tv", +"writesthisblog.com", +"a.ssl.fastly.net", +"b.ssl.fastly.net", +"global.ssl.fastly.net", +"a.prod.fastly.net", +"global.prod.fastly.net", +"github.io", +"githubusercontent.com", +"ro.com", +"appspot.com", +"blogspot.be", +"blogspot.bj", +"blogspot.ca", +"blogspot.cf", +"blogspot.ch", +"blogspot.co.at", +"blogspot.co.il", +"blogspot.co.nz", +"blogspot.co.uk", +"blogspot.com", +"blogspot.com.ar", +"blogspot.com.au", +"blogspot.com.br", +"blogspot.com.es", +"blogspot.cv", +"blogspot.cz", +"blogspot.de", +"blogspot.dk", +"blogspot.fi", +"blogspot.fr", +"blogspot.gr", +"blogspot.hk", +"blogspot.hu", +"blogspot.ie", +"blogspot.in", +"blogspot.it", +"blogspot.jp", +"blogspot.kr", +"blogspot.mr", +"blogspot.mx", +"blogspot.nl", +"blogspot.no", +"blogspot.pt", +"blogspot.re", +"blogspot.ro", +"blogspot.se", +"blogspot.sg", +"blogspot.sk", +"blogspot.td", +"blogspot.tw", +"codespot.com", +"googleapis.com", +"googlecode.com", +"withgoogle.com", +"herokuapp.com", +"herokussl.com", +"iki.fi", +"biz.at", +"info.at", +"co.pl", +"azurewebsites.net", +"azure-mobile.net", +"cloudapp.net", +"nyc.mn", +"operaunite.com", +"outsystemscloud.com", +"rhcloud.com", +"priv.at", +"za.net", +"za.org", +]; diff --git a/components/net/resource_task.rs b/components/net/resource_task.rs index 893dd63a197..14aacc5d451 100644 --- a/components/net/resource_task.rs +++ b/components/net/resource_task.rs @@ -10,11 +10,13 @@ use file_loader; use http_loader; use sniffer_task; use sniffer_task::SnifferTask; +use cookie_storage::{CookieStorage, CookieSource}; +use cookie; use util::task::spawn_named; use hyper::header::common::UserAgent; -use hyper::header::Headers; +use hyper::header::{Headers, Header, SetCookie}; use hyper::http::RawStatus; use hyper::method::Method; use hyper::mime::{Mime, Attr}; @@ -22,10 +24,15 @@ use url::Url; use std::borrow::ToOwned; use std::sync::mpsc::{channel, Receiver, Sender}; +use std::thunk::Invoke; pub enum ControlMsg { /// Request the data associated with a particular URL Load(LoadData), + /// Store a set of cookies for a given originating URL + SetCookiesForUrl(Url, String, CookieSource), + /// Retrieve the stored cookies for a given URL + GetCookiesForUrl(Url, Sender<Option<String>>, CookieSource), Exit } @@ -33,7 +40,10 @@ pub enum ControlMsg { pub struct LoadData { pub url: Url, pub method: Method, + /// Headers that will apply to the initial request only pub headers: Headers, + /// Headers that will apply to the initial request and any redirects + pub preserved_headers: Headers, pub data: Option<Vec<u8>>, pub cors: Option<ResourceCORSData>, pub consumer: Sender<LoadResponse>, @@ -45,6 +55,7 @@ impl LoadData { url: url, method: Method::Get, headers: Headers::new(), + preserved_headers: Headers::new(), data: None, cors: None, consumer: consumer, @@ -61,6 +72,7 @@ pub struct ResourceCORSData { } /// Metadata about a loaded resource, such as is obtained from HTTP headers. +#[deriving(Clone)] pub struct Metadata { /// Final URL after redirects. pub final_url: Url, @@ -75,7 +87,7 @@ pub struct Metadata { pub headers: Option<Headers>, /// HTTP Status - pub status: Option<RawStatus> + pub status: Option<RawStatus>, } impl Metadata { @@ -87,7 +99,7 @@ impl Metadata { charset: None, headers: None, // http://fetch.spec.whatwg.org/#concept-response-status-message - status: Some(RawStatus(200, "OK".to_owned())) + status: Some(RawStatus(200, "OK".to_owned())), } } @@ -184,8 +196,9 @@ pub type ResourceTask = Sender<ControlMsg>; pub fn new_resource_task(user_agent: Option<String>) -> ResourceTask { let (setup_chan, setup_port) = channel(); let sniffer_task = sniffer_task::new_sniffer_task(); + let setup_chan_clone = setup_chan.clone(); spawn_named("ResourceManager".to_owned(), move || { - ResourceManager::new(setup_port, user_agent, sniffer_task).start(); + ResourceManager::new(setup_port, user_agent, sniffer_task, setup_chan_clone).start(); }); setup_chan } @@ -194,26 +207,44 @@ struct ResourceManager { from_client: Receiver<ControlMsg>, user_agent: Option<String>, sniffer_task: SnifferTask, + cookie_storage: CookieStorage, + resource_task: Sender<ControlMsg>, } impl ResourceManager { - fn new(from_client: Receiver<ControlMsg>, user_agent: Option<String>, sniffer_task: SnifferTask) -> ResourceManager { + fn new(from_client: Receiver<ControlMsg>, user_agent: Option<String>, sniffer_task: SnifferTask, + resource_task: Sender<ControlMsg>) -> ResourceManager { ResourceManager { from_client: from_client, user_agent: user_agent, sniffer_task: sniffer_task, + cookie_storage: CookieStorage::new(), + resource_task: resource_task, } } } impl ResourceManager { - fn start(&self) { + fn start(&mut self) { loop { match self.from_client.recv().unwrap() { ControlMsg::Load(load_data) => { self.load(load_data) } + ControlMsg::SetCookiesForUrl(request, cookie_list, source) => { + let header = Header::parse_header([cookie_list.into_bytes()].as_slice()); + if let Some(SetCookie(cookies)) = header { + for bare_cookie in cookies.into_iter() { + if let Some(cookie) = cookie::Cookie::new_wrapped(bare_cookie, &request, source) { + self.cookie_storage.push(cookie, source); + } + } + } + } + ControlMsg::GetCookiesForUrl(url, consumer, source) => { + consumer.send(self.cookie_storage.cookies_for_url(&url, source)); + } ControlMsg::Exit => { break } @@ -221,7 +252,7 @@ impl ResourceManager { } } - fn load(&self, load_data: LoadData) { + fn load(&mut self, load_data: LoadData) { let mut load_data = load_data; self.user_agent.as_ref().map(|ua| load_data.headers.set(UserAgent(ua.clone()))); let senders = ResponseSenders { @@ -229,19 +260,28 @@ impl ResourceManager { eventual_consumer: load_data.consumer.clone(), }; - debug!("resource_task: loading url: {}", load_data.url.serialize()); - match load_data.url.scheme.as_slice() { - "file" => file_loader::factory(load_data, self.sniffer_task.clone()), - "http" | "https" => http_loader::factory(load_data, self.sniffer_task.clone()), - "data" => data_loader::factory(load_data, self.sniffer_task.clone()), - "about" => about_loader::factory(load_data, self.sniffer_task.clone()), + fn from_factory(factory: fn(LoadData, Sender<TargetedLoadResponse>)) + -> Box<Invoke<(LoadData, Sender<TargetedLoadResponse>)> + Send> { + box move |&:(load_data, start_chan)| { + factory(load_data, start_chan) + } + } + + let loader = match load_data.url.scheme.as_slice() { + "file" => from_factory(file_loader::factory), + "http" | "https" => http_loader::factory(self.resource_task.clone()), + "data" => from_factory(data_loader::factory), + "about" => from_factory(about_loader::factory), _ => { debug!("resource_task: no loader for scheme {}", load_data.url.scheme); start_sending(senders, Metadata::default(load_data.url)) .send(ProgressMsg::Done(Err("no loader for scheme".to_string()))).unwrap(); return } - } + }; + debug!("resource_task: loading url: {}", load_data.url.serialize()); + + loader.invoke((load_data, self.sniffer_task.clone())); } } diff --git a/components/script/Cargo.toml b/components/script/Cargo.toml index e0b98db4f4b..8b4d56891be 100644 --- a/components/script/Cargo.toml +++ b/components/script/Cargo.toml @@ -50,7 +50,7 @@ git = "https://github.com/servo/html5ever" [dependencies.hyper] git = "https://github.com/servo/hyper" -branch = "servo" +branch = "old_servo_new_cookies" [dependencies.js] git = "https://github.com/servo/rust-mozjs" @@ -67,4 +67,4 @@ git = "https://github.com/servo/string-cache" [dependencies] encoding = "0.2" url = "0.2.16" -time = "0.1.12"
\ No newline at end of file +time = "0.1.12" diff --git a/components/script/dom/document.rs b/components/script/dom/document.rs index b6a5659a88a..3734527bc09 100644 --- a/components/script/dom/document.rs +++ b/components/script/dom/document.rs @@ -19,7 +19,7 @@ use dom::bindings::codegen::InheritTypes::{HTMLAreaElementDerived, HTMLEmbedElem use dom::bindings::codegen::InheritTypes::{HTMLFormElementDerived, HTMLImageElementDerived}; use dom::bindings::codegen::InheritTypes::{HTMLScriptElementDerived}; use dom::bindings::error::{ErrorResult, Fallible}; -use dom::bindings::error::Error::{NotSupported, InvalidCharacter}; +use dom::bindings::error::Error::{NotSupported, InvalidCharacter, Security}; use dom::bindings::error::Error::{HierarchyRequest, NamespaceError}; use dom::bindings::global::GlobalRef; use dom::bindings::js::{MutNullableJS, JS, JSRef, LayoutJS, Temporary, TemporaryPushable}; @@ -54,6 +54,8 @@ use dom::range::Range; use dom::treewalker::TreeWalker; use dom::uievent::UIEvent; use dom::window::{Window, WindowHelpers}; +use net::resource_task::ControlMsg::{SetCookiesForUrl, GetCookiesForUrl}; +use net::cookie_storage::CookieSource::NonHTTP; use util::namespace; use util::str::{DOMString, split_html_space_chars}; @@ -68,6 +70,7 @@ use std::collections::hash_map::Entry::{Occupied, Vacant}; use std::ascii::AsciiExt; use std::cell::{Cell, Ref}; use std::default::Default; +use std::sync::mpsc::channel; use time; #[derive(PartialEq)] @@ -170,7 +173,7 @@ pub trait DocumentHelpers<'a> { fn window(self) -> Temporary<Window>; fn encoding_name(self) -> Ref<'a, DOMString>; fn is_html_document(self) -> bool; - fn url(self) -> &'a Url; + fn url(self) -> Url; fn quirks_mode(self) -> QuirksMode; fn set_quirks_mode(self, mode: QuirksMode); fn set_last_modified(self, value: DOMString); @@ -206,8 +209,9 @@ impl<'a> DocumentHelpers<'a> for JSRef<'a, Document> { self.is_html_document } - fn url(self) -> &'a Url { - &self.extended_deref().url + // http://dom.spec.whatwg.org/#dom-document-url + fn url(self) -> Url { + self.url.clone() } fn quirks_mode(self) -> QuirksMode { @@ -1003,7 +1007,38 @@ impl<'a> DocumentMethods for JSRef<'a, Document> { Temporary::new(self.window) } + // https://html.spec.whatwg.org/multipage/dom.html#dom-document-cookie + fn GetCookie(self) -> Fallible<DOMString> { + //TODO: return empty string for cookie-averse Document + let url = self.url(); + if !is_scheme_host_port_tuple(&url) { + return Err(Security); + } + let window = self.window.root(); + let page = window.page(); + let (tx, rx) = channel(); + let _ = page.resource_task.send(GetCookiesForUrl(url, tx, NonHTTP)); + let cookies = rx.recv().unwrap(); + Ok(cookies.unwrap_or("".to_owned())) + } + + // https://html.spec.whatwg.org/multipage/dom.html#dom-document-cookie + fn SetCookie(self, cookie: DOMString) -> ErrorResult { + //TODO: ignore for cookie-averse Document + let url = self.url(); + if !is_scheme_host_port_tuple(&url) { + return Err(Security); + } + let window = self.window.root(); + let page = window.page(); + let _ = page.resource_task.send(SetCookiesForUrl(url, cookie, NonHTTP)); + Ok(()) + } + global_event_handlers!(); event_handler!(readystatechange, GetOnreadystatechange, SetOnreadystatechange); } +fn is_scheme_host_port_tuple(url: &Url) -> bool { + url.host().is_some() && url.port_or_default().is_some() +} diff --git a/components/script/dom/element.rs b/components/script/dom/element.rs index b1b458bad40..69eb3f2ee23 100644 --- a/components/script/dom/element.rs +++ b/components/script/dom/element.rs @@ -777,7 +777,7 @@ impl<'a> AttributeHandlers for JSRef<'a, Element> { let base = doc.r().url(); // https://html.spec.whatwg.org/multipage/infrastructure.html#reflect // XXXManishearth this doesn't handle `javascript:` urls properly - match UrlParser::new().base_url(base).parse(url.as_slice()) { + match UrlParser::new().base_url(&base).parse(url.as_slice()) { Ok(parsed) => parsed.serialize(), Err(_) => "".to_owned() } @@ -1174,7 +1174,7 @@ impl<'a> VirtualMethods for JSRef<'a, Element> { // Modifying the `style` attribute might change style. let node: JSRef<Node> = NodeCast::from_ref(*self); let doc = document_from_node(*self).root(); - let base_url = doc.r().url().clone(); + let base_url = doc.r().url(); let value = attr.value(); let style = Some(parse_style_attribute(value.as_slice(), &base_url)); *self.style_attribute.borrow_mut() = style; diff --git a/components/script/dom/htmlformelement.rs b/components/script/dom/htmlformelement.rs index 5f0ec3f212a..74f789ab491 100644 --- a/components/script/dom/htmlformelement.rs +++ b/components/script/dom/htmlformelement.rs @@ -23,6 +23,8 @@ use dom::htmlbuttonelement::{HTMLButtonElement}; use dom::htmltextareaelement::{HTMLTextAreaElement, HTMLTextAreaElementHelpers}; use dom::node::{Node, NodeHelpers, NodeTypeId, document_from_node, window_from_node}; use hyper::method::Method; +use hyper::header::common::ContentType; +use hyper::mime; use servo_msg::constellation_msg::LoadData; use util::str::DOMString; use script_task::{ScriptChan, ScriptMsg}; @@ -178,7 +180,7 @@ impl<'a> HTMLFormElementHelpers for JSRef<'a, HTMLFormElement> { } // TODO: Resolve the url relative to the submitter element // Step 10-15 - let action_components = UrlParser::new().base_url(base).parse(action.as_slice()).unwrap_or(base.clone()); + let action_components = UrlParser::new().base_url(&base).parse(action.as_slice()).unwrap_or(base); let _action = action_components.serialize(); let scheme = action_components.scheme.clone(); let enctype = submitter.enctype(); @@ -186,12 +188,17 @@ impl<'a> HTMLFormElementHelpers for JSRef<'a, HTMLFormElement> { let _target = submitter.target(); // TODO: Handle browsing contexts, partially loaded documents (step 16-17) + let mut load_data = LoadData::new(action_components); + let parsed_data = match enctype { - FormEncType::UrlEncoded => serialize(form_data.iter().map(|d| (d.name.as_slice(), d.value.as_slice()))), + FormEncType::UrlEncoded => { + let mime: mime::Mime = "application/x-www-form-urlencoded".parse().unwrap(); + load_data.headers.set(ContentType(mime)); + serialize(form_data.iter().map(|d| (d.name.as_slice(), d.value.as_slice()))) + } _ => "".to_owned() // TODO: Add serializers for the other encoding types }; - let mut load_data = LoadData::new(action_components); // Step 18 match (scheme.as_slice(), method) { (_, FormMethod::FormDialog) => return, // Unimplemented diff --git a/components/script/dom/node.rs b/components/script/dom/node.rs index 745c5a3a135..cdd52e78855 100644 --- a/components/script/dom/node.rs +++ b/components/script/dom/node.rs @@ -1574,7 +1574,7 @@ impl Node { false => IsHTMLDocument::NonHTMLDocument, }; let window = document.window().root(); - let document = Document::new(window.r(), Some(document.url().clone()), + let document = Document::new(window.r(), Some(document.url()), is_html_doc, None, DocumentSource::NotFromParser); NodeCast::from_temporary(document) diff --git a/components/script/dom/webidls/Document.webidl b/components/script/dom/webidls/Document.webidl index 92b7f35c34b..26d2fa03163 100644 --- a/components/script/dom/webidls/Document.webidl +++ b/components/script/dom/webidls/Document.webidl @@ -65,6 +65,8 @@ partial interface Document { readonly attribute DocumentReadyState readyState; readonly attribute DOMString lastModified; readonly attribute Location location; + [Throws] + attribute DOMString cookie; // DOM tree accessors [SetterThrows] diff --git a/components/script/dom/xmlhttprequest.rs b/components/script/dom/xmlhttprequest.rs index a32045cff75..f9f75fbbf7e 100644 --- a/components/script/dom/xmlhttprequest.rs +++ b/components/script/dom/xmlhttprequest.rs @@ -561,41 +561,35 @@ impl<'a> XMLHttpRequestMethods for JSRef<'a, XMLHttpRequest> { let mut load_data = LoadData::new(self.request_url.borrow().clone().unwrap(), start_chan); load_data.data = extracted; - // Default headers - { - #[inline] - fn join_raw(a: &str, b: &str) -> Vec<u8> { - let len = a.len() + b.len(); - let mut vec = Vec::with_capacity(len); - vec.push_all(a.as_bytes()); - vec.push_all(b.as_bytes()); - vec - } - let ref mut request_headers = self.request_headers.borrow_mut(); - if !request_headers.has::<ContentType>() { - // XHR spec differs from http, and says UTF-8 should be in capitals, - // instead of "utf-8", which is what Hyper defaults to. - let params = ";charset=UTF-8"; - let n = "content-type"; - match data { - Some(eString(_)) => - request_headers.set_raw(n.to_owned(), vec![join_raw("text/plain", params)]), - Some(eURLSearchParams(_)) => - request_headers.set_raw( - n.to_owned(), vec![join_raw("application/x-www-form-urlencoded", params)]), - None => () - } - } + #[inline] + fn join_raw(a: &str, b: &str) -> Vec<u8> { + let len = a.len() + b.len(); + let mut vec = Vec::with_capacity(len); + vec.push_all(a.as_bytes()); + vec.push_all(b.as_bytes()); + vec + } + // XHR spec differs from http, and says UTF-8 should be in capitals, + // instead of "utf-8", which is what Hyper defaults to. + let params = ";charset=UTF-8"; + let n = "content-type"; + match data { + Some(eString(_)) => + load_data.headers.set_raw(n.to_owned(), vec![join_raw("text/plain", params)]), + Some(eURLSearchParams(_)) => + load_data.headers.set_raw( + n.to_owned(), vec![join_raw("application/x-www-form-urlencoded", params)]), + None => () + } - if !request_headers.has::<Accept>() { - let mime = Mime(mime::TopLevel::Star, mime::SubLevel::Star, vec![]); - request_headers.set( - Accept(vec![QualityItem::new(mime, 1.0)])); - } - } // drops the borrow_mut + load_data.preserved_headers = (*self.request_headers.borrow()).clone(); + + if !load_data.preserved_headers.has::<Accept>() { + let mime = Mime(mime::TopLevel::Star, mime::SubLevel::Star, vec![]); + load_data.preserved_headers.set(Accept(vec![QualityItem::new(mime, 1.0)])); + } - load_data.headers = (*self.request_headers.borrow()).clone(); load_data.method = (*self.request_method.borrow()).clone(); let (terminate_sender, terminate_receiver) = channel(); *self.terminate_sender.borrow_mut() = Some(terminate_sender); @@ -607,8 +601,10 @@ impl<'a> XMLHttpRequestMethods for JSRef<'a, XMLHttpRequest> { } else { RequestMode::CORS }; + let mut combined_headers = load_data.headers.clone(); + combined_headers.extend(load_data.preserved_headers.iter()); let cors_request = CORSRequest::maybe_new(referer_url.clone(), load_data.url.clone(), mode, - load_data.method.clone(), load_data.headers.clone()); + load_data.method.clone(), combined_headers); match cors_request { Ok(None) => { let mut buf = String::new(); diff --git a/components/script/script_task.rs b/components/script/script_task.rs index 35f85f593c9..2d64f53b396 100644 --- a/components/script/script_task.rs +++ b/components/script/script_task.rs @@ -67,7 +67,7 @@ use util::task::spawn_named_with_send_on_failure; use util::task_state; use geom::point::Point2D; -use hyper::header::{Header, HeaderFormat}; +use hyper::header::{Header, Headers, HeaderFormat}; use hyper::header::shared::util as header_util; use js::jsapi::{JS_SetWrapObjectCallbacks, JS_SetGCZeal, JS_DEFAULT_ZEAL_FREQ, JS_GC}; use js::jsapi::{JSContext, JSRuntime, JSObject}; @@ -787,6 +787,44 @@ impl ScriptTask { let is_javascript = url.scheme.as_slice() == "javascript"; + self.compositor.borrow_mut().set_ready_state(pipeline_id, Loading); + + let (mut parser_input, final_url, last_modified) = if !is_javascript { + // Wait for the LoadResponse so that the parser knows the final URL. + let (input_chan, input_port) = channel(); + self.resource_task.send(ControlMsg::Load(NetLoadData { + url: url, + method: load_data.method, + headers: Headers::new(), + preserved_headers: load_data.headers, + data: load_data.data, + cors: None, + consumer: input_chan, + })).unwrap(); + + let load_response = input_port.recv().unwrap(); + + let last_modified = load_response.metadata.headers.as_ref().and_then(|headers| { + headers.get().map(|&LastModified(ref tm)| tm.clone()) + }); + + let final_url = load_response.metadata.final_url.clone(); + + (Some(HTMLInput::InputUrl(load_response)), final_url, last_modified) + } else { + let doc_url = last_url.unwrap_or_else(|| { + Url::parse("about:blank").unwrap() + }); + (None, doc_url, None) + }; + + // Store the final URL before we start parsing, so that DOM routines + // (e.g. HTMLImageElement::update_image) can resolve relative URLs + // correctly. + { + *page.mut_url() = Some((final_url.clone(), true)); + } + let cx = self.js_context.borrow(); let cx = cx.as_ref().unwrap(); // Create the window and document objects. @@ -796,22 +834,15 @@ impl ScriptTask { self.control_chan.clone(), self.compositor.borrow_mut().dup(), self.image_cache_task.clone()).root(); - let doc_url = if is_javascript { - let doc_url = last_url.unwrap_or_else(|| { - Url::parse("about:blank").unwrap() - }); - *page.mut_url() = Some((doc_url.clone(), true)); - doc_url - } else { - url.clone() - }; - let document = Document::new(window.r(), Some(doc_url.clone()), + + let document = Document::new(window.r(), Some(final_url.clone()), IsHTMLDocument::HTMLDocument, None, DocumentSource::FromParser).root(); - + if let Some(tm) = last_modified { + document.set_last_modified(dom_last_modified(&tm)); + } window.r().init_browser_context(document.r()); - self.compositor.borrow_mut().set_ready_state(pipeline_id, Loading); { // Create the root frame. @@ -822,45 +853,15 @@ impl ScriptTask { }); } - let (parser_input, final_url) = if !is_javascript { - // Wait for the LoadResponse so that the parser knows the final URL. - let (input_chan, input_port) = channel(); - self.resource_task.send(ControlMsg::Load(NetLoadData { - url: url, - method: load_data.method, - headers: load_data.headers, - data: load_data.data, - cors: None, - consumer: input_chan, - })).unwrap(); - - let load_response = input_port.recv().unwrap(); - - load_response.metadata.headers.as_ref().map(|headers| { - headers.get().map(|&LastModified(ref tm)| { - document.r().set_last_modified(dom_last_modified(tm)); - }); - }); - - let final_url = load_response.metadata.final_url.clone(); - - { - // Store the final URL before we start parsing, so that DOM routines - // (e.g. HTMLImageElement::update_image) can resolve relative URLs - // correctly. - *page.mut_url() = Some((final_url.clone(), true)); - } - - (HTMLInput::InputUrl(load_response), final_url) - } else { + if is_javascript { let evalstr = load_data.url.non_relative_scheme_data().unwrap(); let jsval = window.r().evaluate_js_on_global_with_result(evalstr); let strval = FromJSValConvertible::from_jsval(self.get_cx(), jsval, StringificationBehavior::Empty); - (HTMLInput::InputString(strval.unwrap_or("".to_owned())), doc_url) + parser_input = Some(HTMLInput::InputString(strval.unwrap_or("".to_owned()))); }; - parse_html(document.r(), parser_input, &final_url); + parse_html(document.r(), parser_input.unwrap(), &final_url); document.r().set_ready_state(DocumentReadyState::Interactive); self.compositor.borrow_mut().set_ready_state(pipeline_id, PerformingLayout); diff --git a/components/servo/Cargo.lock b/components/servo/Cargo.lock index 819286c9e37..f799f63a952 100644 --- a/components/servo/Cargo.lock +++ b/components/servo/Cargo.lock @@ -100,7 +100,7 @@ dependencies = [ [[package]] name = "cookie" version = "0.1.8" -source = "registry+https://github.com/rust-lang/crates.io-index" +source = "git+https://github.com/servo/cookie-rs?branch=lenientparse_backport#47ffa4d3c6f85d28f222d6e1d54635fff5622ea3" dependencies = [ "openssl 0.2.15 (registry+https://github.com/rust-lang/crates.io-index)", "rustc-serialize 0.2.7 (registry+https://github.com/rust-lang/crates.io-index)", @@ -154,6 +154,7 @@ name = "devtools_traits" version = "0.0.1" dependencies = [ "msg 0.0.1", + "util 0.0.1", ] [[package]] @@ -398,9 +399,9 @@ source = "git+https://github.com/servo/html5ever#d35dfaaf0d85007057a299afc370d07 [[package]] name = "hyper" version = "0.1.1" -source = "git+https://github.com/servo/hyper?branch=servo#7f48a7e945180a4f762dc75236210d20a69b4a6a" +source = "git+https://github.com/servo/hyper?branch=old_servo_new_cookies#7a346f481d683705709526594aa5f13b5c923bc1" dependencies = [ - "cookie 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)", + "cookie 0.1.8 (git+https://github.com/servo/cookie-rs?branch=lenientparse_backport)", "log 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)", "mime 0.0.6 (registry+https://github.com/rust-lang/crates.io-index)", "mucell 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)", @@ -541,7 +542,7 @@ dependencies = [ "azure 0.1.0 (git+https://github.com/servo/rust-azure)", "core_foundation 0.1.0 (git+https://github.com/servo/rust-core-foundation)", "geom 0.1.0 (git+https://github.com/servo/rust-geom)", - "hyper 0.1.1 (git+https://github.com/servo/hyper?branch=servo)", + "hyper 0.1.1 (git+https://github.com/servo/hyper?branch=old_servo_new_cookies)", "io_surface 0.1.0 (git+https://github.com/servo/rust-io-surface)", "layers 0.1.0 (git+https://github.com/servo/rust-layers)", "style 0.0.1", @@ -558,8 +559,9 @@ source = "registry+https://github.com/rust-lang/crates.io-index" name = "net" version = "0.0.1" dependencies = [ + "cookie 0.1.8 (git+https://github.com/servo/cookie-rs?branch=lenientparse_backport)", "geom 0.1.0 (git+https://github.com/servo/rust-geom)", - "hyper 0.1.1 (git+https://github.com/servo/hyper?branch=servo)", + "hyper 0.1.1 (git+https://github.com/servo/hyper?branch=old_servo_new_cookies)", "openssl 0.2.15 (registry+https://github.com/rust-lang/crates.io-index)", "png 0.1.0 (git+https://github.com/servo/rust-png)", "stb_image 0.1.0 (git+https://github.com/servo/rust-stb-image)", @@ -655,7 +657,7 @@ dependencies = [ "geom 0.1.0 (git+https://github.com/servo/rust-geom)", "gfx 0.0.1", "html5ever 0.0.0 (git+https://github.com/servo/html5ever)", - "hyper 0.1.1 (git+https://github.com/servo/hyper?branch=servo)", + "hyper 0.1.1 (git+https://github.com/servo/hyper?branch=old_servo_new_cookies)", "js 0.1.0 (git+https://github.com/servo/rust-mozjs)", "msg 0.0.1", "net 0.0.1", diff --git a/ports/cef/Cargo.lock b/ports/cef/Cargo.lock index fca6588c306..1b45aa7eed3 100644 --- a/ports/cef/Cargo.lock +++ b/ports/cef/Cargo.lock @@ -99,7 +99,7 @@ dependencies = [ [[package]] name = "cookie" version = "0.1.8" -source = "registry+https://github.com/rust-lang/crates.io-index" +source = "git+https://github.com/servo/cookie-rs?branch=lenientparse_backport#47ffa4d3c6f85d28f222d6e1d54635fff5622ea3" dependencies = [ "openssl 0.2.15 (registry+https://github.com/rust-lang/crates.io-index)", "rustc-serialize 0.2.7 (registry+https://github.com/rust-lang/crates.io-index)", @@ -153,6 +153,7 @@ name = "devtools_traits" version = "0.0.1" dependencies = [ "msg 0.0.1", + "util 0.0.1", ] [[package]] @@ -397,9 +398,9 @@ source = "git+https://github.com/servo/html5ever#d35dfaaf0d85007057a299afc370d07 [[package]] name = "hyper" version = "0.1.1" -source = "git+https://github.com/servo/hyper?branch=servo#7f48a7e945180a4f762dc75236210d20a69b4a6a" +source = "git+https://github.com/servo/hyper?branch=old_servo_new_cookies#7a346f481d683705709526594aa5f13b5c923bc1" dependencies = [ - "cookie 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)", + "cookie 0.1.8 (git+https://github.com/servo/cookie-rs?branch=lenientparse_backport)", "log 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)", "mime 0.0.6 (registry+https://github.com/rust-lang/crates.io-index)", "mucell 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)", @@ -540,7 +541,7 @@ dependencies = [ "azure 0.1.0 (git+https://github.com/servo/rust-azure)", "core_foundation 0.1.0 (git+https://github.com/servo/rust-core-foundation)", "geom 0.1.0 (git+https://github.com/servo/rust-geom)", - "hyper 0.1.1 (git+https://github.com/servo/hyper?branch=servo)", + "hyper 0.1.1 (git+https://github.com/servo/hyper?branch=old_servo_new_cookies)", "io_surface 0.1.0 (git+https://github.com/servo/rust-io-surface)", "layers 0.1.0 (git+https://github.com/servo/rust-layers)", "style 0.0.1", @@ -557,8 +558,9 @@ source = "registry+https://github.com/rust-lang/crates.io-index" name = "net" version = "0.0.1" dependencies = [ + "cookie 0.1.8 (git+https://github.com/servo/cookie-rs?branch=lenientparse_backport)", "geom 0.1.0 (git+https://github.com/servo/rust-geom)", - "hyper 0.1.1 (git+https://github.com/servo/hyper?branch=servo)", + "hyper 0.1.1 (git+https://github.com/servo/hyper?branch=old_servo_new_cookies)", "openssl 0.2.15 (registry+https://github.com/rust-lang/crates.io-index)", "png 0.1.0 (git+https://github.com/servo/rust-png)", "stb_image 0.1.0 (git+https://github.com/servo/rust-stb-image)", @@ -654,7 +656,7 @@ dependencies = [ "geom 0.1.0 (git+https://github.com/servo/rust-geom)", "gfx 0.0.1", "html5ever 0.0.0 (git+https://github.com/servo/html5ever)", - "hyper 0.1.1 (git+https://github.com/servo/hyper?branch=servo)", + "hyper 0.1.1 (git+https://github.com/servo/hyper?branch=old_servo_new_cookies)", "js 0.1.0 (git+https://github.com/servo/rust-mozjs)", "msg 0.0.1", "net 0.0.1", diff --git a/ports/gonk/Cargo.lock b/ports/gonk/Cargo.lock index a3581dd23f0..d24d9264541 100644 --- a/ports/gonk/Cargo.lock +++ b/ports/gonk/Cargo.lock @@ -124,6 +124,7 @@ name = "devtools_traits" version = "0.0.1" dependencies = [ "msg 0.0.1", + "util 0.0.1", ] [[package]] diff --git a/ports/gonk/src/lib.rs b/ports/gonk/src/lib.rs index 60544549fed..329b2e7996c 100644 --- a/ports/gonk/src/lib.rs +++ b/ports/gonk/src/lib.rs @@ -163,4 +163,3 @@ impl<Window> Browser<Window> where Window: WindowMethods + 'static { self.compositor.shutdown(); } } - diff --git a/tests/wpt/metadata/XMLHttpRequest/anonymous-mode-unsupported.htm.ini b/tests/wpt/metadata/XMLHttpRequest/anonymous-mode-unsupported.htm.ini deleted file mode 100644 index 23151d36cc8..00000000000 --- a/tests/wpt/metadata/XMLHttpRequest/anonymous-mode-unsupported.htm.ini +++ /dev/null @@ -1,5 +0,0 @@ -[anonymous-mode-unsupported.htm] - type: testharness - [XMLHttpRequest: anonymous mode unsupported] - expected: FAIL - diff --git a/tests/wpt/metadata/html/dom/documents/resource-metadata-management/document-cookie.html.ini b/tests/wpt/metadata/html/dom/documents/resource-metadata-management/document-cookie.html.ini index 8db0e27d721..74249d5a63d 100644 --- a/tests/wpt/metadata/html/dom/documents/resource-metadata-management/document-cookie.html.ini +++ b/tests/wpt/metadata/html/dom/documents/resource-metadata-management/document-cookie.html.ini @@ -1,8 +1,5 @@ [document-cookie.html] type: testharness - [document has no cookie] - expected: FAIL - [getting cookie for a cookie-averse document returns empty string, setting does nothing] expected: FAIL diff --git a/tests/wpt/metadata/html/dom/interfaces.html.ini b/tests/wpt/metadata/html/dom/interfaces.html.ini index fcb2642d34a..b9c8eff57bf 100644 --- a/tests/wpt/metadata/html/dom/interfaces.html.ini +++ b/tests/wpt/metadata/html/dom/interfaces.html.ini @@ -6,9 +6,6 @@ [Document interface: attribute referrer] expected: FAIL - [Document interface: attribute cookie] - expected: FAIL - [Document interface: attribute dir] expected: FAIL @@ -1089,9 +1086,6 @@ [Document interface: document.implementation.createDocument(null, "", null) must inherit property "referrer" with the proper type (35)] expected: FAIL - [Document interface: document.implementation.createDocument(null, "", null) must inherit property "cookie" with the proper type (36)] - expected: FAIL - [Document interface: document.implementation.createDocument(null, "", null) must inherit property "dir" with the proper type (41)] expected: FAIL |