From 92f6bd3a155c2d68dd84be8e42a5147a75cbe38c Mon Sep 17 00:00:00 2001 From: Raul Metsma Date: Wed, 4 May 2011 17:40:15 +0200 Subject: Use OpenSSL X509_NAME_ENTRY API to parse UTF8 subjectName/issuerName ... to be able to display non-ASCII names from subject and issuerInfo. Task-number: QTBUG-7912 Merge-request: 922 Reviewed-by: Peter Hartmann (cherry picked from commit e5d94256be2525c24a8b61edd771662b7f2b8be3) --- src/network/ssl/qsslcertificate.cpp | 47 ++++++++------------------ src/network/ssl/qsslsocket_openssl_symbols.cpp | 12 +++++-- src/network/ssl/qsslsocket_openssl_symbols_p.h | 6 +++- 3 files changed, 29 insertions(+), 36 deletions(-) (limited to 'src') diff --git a/src/network/ssl/qsslcertificate.cpp b/src/network/ssl/qsslcertificate.cpp index a5cdf011aa..988743852c 100644 --- a/src/network/ssl/qsslcertificate.cpp +++ b/src/network/ssl/qsslcertificate.cpp @@ -127,7 +127,7 @@ QT_BEGIN_NAMESPACE // forward declaration -static QMap _q_mapFromOnelineName(char *name); +static QMap _q_mapFromX509Name(X509_NAME *name); /*! Constructs a QSslCertificate by reading \a format encoded data @@ -324,7 +324,7 @@ QString QSslCertificate::issuerInfo(SubjectInfo info) const // lazy init if (d->issuerInfo.isEmpty() && d->x509) d->issuerInfo = - _q_mapFromOnelineName(q_X509_NAME_oneline(q_X509_get_issuer_name(d->x509), 0, 0)); + _q_mapFromX509Name(q_X509_get_issuer_name(d->x509)); return d->issuerInfo.value(_q_SubjectInfoToString(info)); } @@ -341,7 +341,7 @@ QString QSslCertificate::issuerInfo(const QByteArray &tag) const // lazy init if (d->issuerInfo.isEmpty() && d->x509) d->issuerInfo = - _q_mapFromOnelineName(q_X509_NAME_oneline(q_X509_get_issuer_name(d->x509), 0, 0)); + _q_mapFromX509Name(q_X509_get_issuer_name(d->x509)); return d->issuerInfo.value(QString::fromLatin1(tag)); } @@ -360,7 +360,7 @@ QString QSslCertificate::subjectInfo(SubjectInfo info) const // lazy init if (d->subjectInfo.isEmpty() && d->x509) d->subjectInfo = - _q_mapFromOnelineName(q_X509_NAME_oneline(q_X509_get_subject_name(d->x509), 0, 0)); + _q_mapFromX509Name(q_X509_get_subject_name(d->x509)); return d->subjectInfo.value(_q_SubjectInfoToString(info)); } @@ -376,7 +376,7 @@ QString QSslCertificate::subjectInfo(const QByteArray &tag) const // lazy init if (d->subjectInfo.isEmpty() && d->x509) d->subjectInfo = - _q_mapFromOnelineName(q_X509_NAME_oneline(q_X509_get_subject_name(d->x509), 0, 0)); + _q_mapFromX509Name(q_X509_get_subject_name(d->x509)); return d->subjectInfo.value(QString::fromLatin1(tag)); } @@ -666,37 +666,18 @@ QByteArray QSslCertificatePrivate::QByteArray_from_X509(X509 *x509, QSsl::Encodi return BEGINCERTSTRING "\n" + tmp + ENDCERTSTRING "\n"; } -static QMap _q_mapFromOnelineName(char *name) +static QMap _q_mapFromX509Name(X509_NAME *name) { QMap info; - QString infoStr = QString::fromLocal8Bit(name); - q_CRYPTO_free(name); - - // ### The right-hand encoding seems to allow hex (Regulierungsbeh\xC8orde) - //entry.replace(QLatin1String("\\x"), QLatin1String("%")); - //entry = QUrl::fromPercentEncoding(entry.toLatin1()); - // ### See RFC-4630 for more details! - - QRegExp rx(QLatin1String("/([A-Za-z]+)=(.+)")); - - int pos = 0; - while ((pos = rx.indexIn(infoStr, pos)) != -1) { - const QString name = rx.cap(1); - - QString value = rx.cap(2); - const int valuePos = rx.pos(2); - - const int next = rx.indexIn(value); - if (next == -1) { - info.insert(name, value); - break; - } - - value = value.left(next); - info.insert(name, value); - pos = valuePos + value.length(); + for( int i = 0; i < q_X509_NAME_entry_count(name); ++i ) + { + X509_NAME_ENTRY *e = q_X509_NAME_get_entry( name, i ); + const char *obj = q_OBJ_nid2sn( q_OBJ_obj2nid( q_X509_NAME_ENTRY_get_object( e ) ) ); + unsigned char *data = 0; + int size = q_ASN1_STRING_to_UTF8( &data, q_X509_NAME_ENTRY_get_data( e ) ); + info[QString::fromUtf8( obj )] = QString::fromUtf8( (char*)data, size ); + q_CRYPTO_free( data ); } - return info; } diff --git a/src/network/ssl/qsslsocket_openssl_symbols.cpp b/src/network/ssl/qsslsocket_openssl_symbols.cpp index b1310ccb8d..6cb4794559 100644 --- a/src/network/ssl/qsslsocket_openssl_symbols.cpp +++ b/src/network/ssl/qsslsocket_openssl_symbols.cpp @@ -101,6 +101,7 @@ DEFINEFUNC3(void *, ASN1_dup, i2d_of_void *a, a, d2i_of_void *b, b, char *c, c, DEFINEFUNC(long, ASN1_INTEGER_get, ASN1_INTEGER *a, a, return 0, return) DEFINEFUNC(unsigned char *, ASN1_STRING_data, ASN1_STRING *a, a, return 0, return) DEFINEFUNC(int, ASN1_STRING_length, ASN1_STRING *a, a, return 0, return) +DEFINEFUNC2(int, ASN1_STRING_to_UTF8, unsigned char **a, a, ASN1_STRING *b, b, return 0, return); DEFINEFUNC4(long, BIO_ctrl, BIO *a, a, int b, b, long c, c, void *d, d, return -1, return) DEFINEFUNC(int, BIO_free, BIO *a, a, return 0, return) DEFINEFUNC(BIO *, BIO_new, BIO_METHOD *a, a, return 0, return) @@ -248,7 +249,10 @@ DEFINEFUNC4(void *, X509_get_ext_d2i, X509 *a, a, int b, b, int *c, c, int *d, d DEFINEFUNC(X509_NAME *, X509_get_issuer_name, X509 *a, a, return 0, return) DEFINEFUNC(X509_NAME *, X509_get_subject_name, X509 *a, a, return 0, return) DEFINEFUNC(int, X509_verify_cert, X509_STORE_CTX *a, a, return -1, return) -DEFINEFUNC3(char *, X509_NAME_oneline, X509_NAME *a, a, char *b, b, int c, c, return 0, return) +DEFINEFUNC(int, X509_NAME_entry_count, X509_NAME *a, a, return 0, return) +DEFINEFUNC2(X509_NAME_ENTRY *, X509_NAME_get_entry, X509_NAME *a, a, int b, b, return 0, return) +DEFINEFUNC(ASN1_STRING *, X509_NAME_ENTRY_get_data, X509_NAME_ENTRY *a, a, return 0, return) +DEFINEFUNC(ASN1_OBJECT *, X509_NAME_ENTRY_get_object, X509_NAME_ENTRY *a, a, return 0, return) DEFINEFUNC(EVP_PKEY *, X509_PUBKEY_get, X509_PUBKEY *a, a, return 0, return) DEFINEFUNC(void, X509_STORE_free, X509_STORE *a, a, return, DUMMYARG) DEFINEFUNC(X509_STORE *, X509_STORE_new, DUMMYARG, DUMMYARG, return 0, return) @@ -647,6 +651,7 @@ bool q_resolveOpenSslSymbols() RESOLVEFUNC(ASN1_INTEGER_get) RESOLVEFUNC(ASN1_STRING_data) RESOLVEFUNC(ASN1_STRING_length) + RESOLVEFUNC(ASN1_STRING_to_UTF8) RESOLVEFUNC(BIO_ctrl) RESOLVEFUNC(BIO_free) RESOLVEFUNC(BIO_new) @@ -736,7 +741,10 @@ bool q_resolveOpenSslSymbols() RESOLVEFUNC(SSLv3_server_method) RESOLVEFUNC(SSLv23_server_method) RESOLVEFUNC(TLSv1_server_method) - RESOLVEFUNC(X509_NAME_oneline) + RESOLVEFUNC(X509_NAME_entry_count) + RESOLVEFUNC(X509_NAME_get_entry) + RESOLVEFUNC(X509_NAME_ENTRY_get_data) + RESOLVEFUNC(X509_NAME_ENTRY_get_object) RESOLVEFUNC(X509_PUBKEY_get) RESOLVEFUNC(X509_STORE_free) RESOLVEFUNC(X509_STORE_new) diff --git a/src/network/ssl/qsslsocket_openssl_symbols_p.h b/src/network/ssl/qsslsocket_openssl_symbols_p.h index 49830acc1e..ceff57d9d8 100644 --- a/src/network/ssl/qsslsocket_openssl_symbols_p.h +++ b/src/network/ssl/qsslsocket_openssl_symbols_p.h @@ -204,6 +204,7 @@ bool q_resolveOpenSslSymbols(); long q_ASN1_INTEGER_get(ASN1_INTEGER *a); unsigned char * q_ASN1_STRING_data(ASN1_STRING *a); int q_ASN1_STRING_length(ASN1_STRING *a); +int q_ASN1_STRING_to_UTF8(unsigned char **a, ASN1_STRING *b); long q_BIO_ctrl(BIO *a, int b, long c, void *d); int q_BIO_free(BIO *a); BIO *q_BIO_new(BIO_METHOD *a); @@ -360,7 +361,10 @@ void *q_X509_get_ext_d2i(X509 *a, int b, int *c, int *d); X509_NAME *q_X509_get_issuer_name(X509 *a); X509_NAME *q_X509_get_subject_name(X509 *a); int q_X509_verify_cert(X509_STORE_CTX *ctx); -char *q_X509_NAME_oneline(X509_NAME *a, char *b, int c); +int q_X509_NAME_entry_count(X509_NAME *a); +X509_NAME_ENTRY *q_X509_NAME_get_entry(X509_NAME *a,int b); +ASN1_STRING *q_X509_NAME_ENTRY_get_data(X509_NAME_ENTRY *a); +ASN1_OBJECT *q_X509_NAME_ENTRY_get_object(X509_NAME_ENTRY *a); EVP_PKEY *q_X509_PUBKEY_get(X509_PUBKEY *a); void q_X509_STORE_free(X509_STORE *store); X509_STORE *q_X509_STORE_new(); -- cgit v1.2.3 From fe54165149f4220eb983ac7f75747bcd99d8b68d Mon Sep 17 00:00:00 2001 From: Pierre Rossi Date: Tue, 1 Feb 2011 11:29:13 +0100 Subject: fix coding style for merge request re. utf8 characters in SSL certs fixes minor coding issues for "Use OpenSSL X509_NAME_ENTRY API to parse UTF8 subjectName/issuerName" Task-number: QTBUG-7912 Reviewed-by: Peter Hartmann (cherry picked from commit 2e8d206fd9f656cd88b797c059ef83ed3df32881) --- src/network/ssl/qsslcertificate.cpp | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) (limited to 'src') diff --git a/src/network/ssl/qsslcertificate.cpp b/src/network/ssl/qsslcertificate.cpp index 988743852c..3a70327020 100644 --- a/src/network/ssl/qsslcertificate.cpp +++ b/src/network/ssl/qsslcertificate.cpp @@ -669,14 +669,13 @@ QByteArray QSslCertificatePrivate::QByteArray_from_X509(X509 *x509, QSsl::Encodi static QMap _q_mapFromX509Name(X509_NAME *name) { QMap info; - for( int i = 0; i < q_X509_NAME_entry_count(name); ++i ) - { - X509_NAME_ENTRY *e = q_X509_NAME_get_entry( name, i ); - const char *obj = q_OBJ_nid2sn( q_OBJ_obj2nid( q_X509_NAME_ENTRY_get_object( e ) ) ); + for (int i = 0; i < q_X509_NAME_entry_count(name); ++i) { + X509_NAME_ENTRY *e = q_X509_NAME_get_entry(name, i); + const char *obj = q_OBJ_nid2sn(q_OBJ_obj2nid(q_X509_NAME_ENTRY_get_object(e))); unsigned char *data = 0; - int size = q_ASN1_STRING_to_UTF8( &data, q_X509_NAME_ENTRY_get_data( e ) ); - info[QString::fromUtf8( obj )] = QString::fromUtf8( (char*)data, size ); - q_CRYPTO_free( data ); + int size = q_ASN1_STRING_to_UTF8(&data, q_X509_NAME_ENTRY_get_data(e)); + info[QString::fromUtf8(obj)] = QString::fromUtf8((char*)data, size); + q_CRYPTO_free(data); } return info; } -- cgit v1.2.3 From 6c72eb845657b670af5435ef8084ae91e5dfbbdd Mon Sep 17 00:00:00 2001 From: Peter Hartmann Date: Tue, 24 May 2011 10:29:01 +0200 Subject: fix Symbian ordinals for merge request re. utf8 characters in SSL certs Task-number: QTBUG-7912 (cherry picked from commit 83c37059df7f23be482d4ecb2c54603a3665a33d) --- src/network/ssl/qsslsocket_openssl_symbols.cpp | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) (limited to 'src') diff --git a/src/network/ssl/qsslsocket_openssl_symbols.cpp b/src/network/ssl/qsslsocket_openssl_symbols.cpp index 6cb4794559..a940fcde51 100644 --- a/src/network/ssl/qsslsocket_openssl_symbols.cpp +++ b/src/network/ssl/qsslsocket_openssl_symbols.cpp @@ -522,6 +522,7 @@ bool q_resolveOpenSslSymbols() RESOLVEFUNC(ASN1_INTEGER_get, 48, libs.second ) RESOLVEFUNC(ASN1_STRING_data, 71, libs.second ) RESOLVEFUNC(ASN1_STRING_length, 76, libs.second ) + RESOLVEFUNC(ASN1_STRING_to_UTF8, 86, libs.second ) RESOLVEFUNC(BIO_ctrl, 184, libs.second ) RESOLVEFUNC(BIO_free, 209, libs.second ) RESOLVEFUNC(BIO_new, 222, libs.second ) @@ -612,7 +613,10 @@ bool q_resolveOpenSslSymbols() RESOLVEFUNC(SSLv23_server_method, 191, libs.first ) RESOLVEFUNC(TLSv1_server_method, 200, libs.first ) RESOLVEFUNC(SSL_CTX_load_verify_locations, 34, libs.first ) - RESOLVEFUNC(X509_NAME_oneline, 1830, libs.second ) + RESOLVEFUNC(X509_NAME_entry_count, 1821, libs.second ) + RESOLVEFUNC(X509_NAME_get_entry, 1823, libs.second ) + RESOLVEFUNC(X509_NAME_ENTRY_get_data, 1808, libs.second ) + RESOLVEFUNC(X509_NAME_ENTRY_get_object, 1809, libs.second ) RESOLVEFUNC(X509_PUBKEY_get, 1844, libs.second ) RESOLVEFUNC(X509_STORE_free, 1939, libs.second ) RESOLVEFUNC(X509_STORE_new, 1942, libs.second ) -- cgit v1.2.3 From 093a92fb03e7c163882d1ba5fbdaf9fabb5bd969 Mon Sep 17 00:00:00 2001 From: Robert Hogan Date: Tue, 24 May 2011 11:04:27 +0200 Subject: Add QUrl::topLevelDomain() and move TLD table from QtNetwork to QtCore Move Qt's copy of the Mozilla public suffix list from QtNetwork to QtCore and use it to expose a new API function QUrl::topLevelDomain(). This function returns the section of the url that is a registrar-controlled top level domain. QtCore now exports a couple of functions to the other Qt modules: qTopLevelDomain, a helper function for QUrl::topLevelDomain(); and qIsEffectiveTLD(), a helper function for QNetworkCookeieJar. The motivation for this new API is to allow QtWebKit implement a Third-Party Cookie blocking policy. For this QtWebKit needs to know the element of the url that is the registry-controlled TLD. Without this knowledge it would end up blocking third-party cookies per host rather than per registry-controlled domain. See also https://bugs.webkit.org/show_bug.cgi?id=45455 Merge-request: 1205 Task-number: QTBUG-13601 Reviewed-by: Peter Hartmann (cherry picked from commit 154402f56dcf8303a6ce601a52215226af8d31ba) --- src/corelib/io/io.pri | 3 + src/corelib/io/qtldurl.cpp | 117 + src/corelib/io/qtldurl_p.h | 66 + src/corelib/io/qurl.cpp | 19 +- src/corelib/io/qurl.h | 3 + src/corelib/io/qurltlds_p.h | 6481 +++++++++++++++++++++ src/corelib/io/qurltlds_p.h.INFO | 17 + src/network/access/access.pri | 1 - src/network/access/qnetworkcookiejar.cpp | 43 +- src/network/access/qnetworkcookiejar_p.h | 3 - src/network/access/qnetworkcookiejartlds_p.h | 6481 --------------------- src/network/access/qnetworkcookiejartlds_p.h.INFO | 17 - 12 files changed, 6707 insertions(+), 6544 deletions(-) create mode 100644 src/corelib/io/qtldurl.cpp create mode 100644 src/corelib/io/qtldurl_p.h create mode 100644 src/corelib/io/qurltlds_p.h create mode 100644 src/corelib/io/qurltlds_p.h.INFO delete mode 100644 src/network/access/qnetworkcookiejartlds_p.h delete mode 100644 src/network/access/qnetworkcookiejartlds_p.h.INFO (limited to 'src') diff --git a/src/corelib/io/io.pri b/src/corelib/io/io.pri index f67600d750..e411f8f643 100644 --- a/src/corelib/io/io.pri +++ b/src/corelib/io/io.pri @@ -24,6 +24,8 @@ HEADERS += \ io/qresource_p.h \ io/qresource_iterator_p.h \ io/qurl.h \ + io/qurltlds_p.h \ + io/qtldurl_p.h \ io/qsettings.h \ io/qsettings_p.h \ io/qfsfileengine.h \ @@ -41,6 +43,7 @@ SOURCES += \ io/qbuffer.cpp \ io/qdatastream.cpp \ io/qdataurl.cpp \ + io/qtldurl.cpp \ io/qdebug.cpp \ io/qdir.cpp \ io/qdiriterator.cpp \ diff --git a/src/corelib/io/qtldurl.cpp b/src/corelib/io/qtldurl.cpp new file mode 100644 index 0000000000..7db4bbddd5 --- /dev/null +++ b/src/corelib/io/qtldurl.cpp @@ -0,0 +1,117 @@ +/**************************************************************************** +** +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtCore module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "qplatformdefs.h" +#include "qurl.h" +#include "private/qurltlds_p.h" +#include "private/qtldurl_p.h" +#include "QtCore/qstringlist.h" + +QT_BEGIN_NAMESPACE + +static bool containsTLDEntry(const QString &entry) +{ + int index = qHash(entry) % tldCount; + int currentDomainIndex = tldIndices[index]; + while (currentDomainIndex < tldIndices[index+1]) { + QString currentEntry = QString::fromUtf8(tldData + currentDomainIndex); + if (currentEntry == entry) + return true; + currentDomainIndex += qstrlen(tldData + currentDomainIndex) + 1; // +1 for the ending \0 + } + return false; +} + +/*! + \internal + + Return the top-level-domain per Qt's copy of the Mozilla public suffix list of + \a domain. +*/ + +Q_CORE_EXPORT QString qTopLevelDomain(const QString &domain) +{ + QStringList sections = domain.toLower().split(QLatin1Char('.'), QString::SkipEmptyParts); + if (sections.isEmpty()) + return QString(); + + QString level, tld; + for (int j = sections.count() - 1; j >= 0; --j) { + level.prepend(QLatin1Char('.') + sections.at(j)); + if (qIsEffectiveTLD(level.right(level.size() - 1))) + tld = level; + } + return tld; +} + +/*! + \internal + + Return true if \a domain is a top-level-domain per Qt's copy of the Mozilla public suffix list. +*/ + +Q_CORE_EXPORT bool qIsEffectiveTLD(const QString &domain) +{ + // for domain 'foo.bar.com': + // 1. return if TLD table contains 'foo.bar.com' + if (containsTLDEntry(domain)) + return true; + + if (domain.contains(QLatin1Char('.'))) { + int count = domain.size() - domain.indexOf(QLatin1Char('.')); + QString wildCardDomain; + wildCardDomain.reserve(count + 1); + wildCardDomain.append(QLatin1Char('*')); + wildCardDomain.append(domain.right(count)); + // 2. if table contains '*.bar.com', + // test if table contains '!foo.bar.com' + if (containsTLDEntry(wildCardDomain)) { + QString exceptionDomain; + exceptionDomain.reserve(domain.size() + 1); + exceptionDomain.append(QLatin1Char('!')); + exceptionDomain.append(domain); + return (! containsTLDEntry(exceptionDomain)); + } + } + return false; +} + +QT_END_NAMESPACE diff --git a/src/corelib/io/qtldurl_p.h b/src/corelib/io/qtldurl_p.h new file mode 100644 index 0000000000..152ffa0f63 --- /dev/null +++ b/src/corelib/io/qtldurl_p.h @@ -0,0 +1,66 @@ +/**************************************************************************** +** +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtCore module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef QTLDURL_P_H +#define QTLDURL_P_H + +// +// W A R N I N G +// ------------- +// +// This file is not part of the Qt API. It exists for the convenience +// of qDecodeDataUrl. This header file may change from version to +// version without notice, or even be removed. +// +// We mean it. +// + +#include "QtCore/qurl.h" +#include "QtCore/qstring.h" + +QT_BEGIN_NAMESPACE + +Q_CORE_EXPORT QString qTopLevelDomain(const QString &domain); +Q_CORE_EXPORT bool qIsEffectiveTLD(const QString &domain); + +QT_END_NAMESPACE + +#endif // QDATAURL_P_H diff --git a/src/corelib/io/qurl.cpp b/src/corelib/io/qurl.cpp index efd3f45ef0..c433d3519c 100644 --- a/src/corelib/io/qurl.cpp +++ b/src/corelib/io/qurl.cpp @@ -192,7 +192,9 @@ #if defined QT3_SUPPORT #include "qfileinfo.h" #endif - +#ifndef QT_BOOTSTRAPPED +#include "qtldurl_p.h" +#endif #if defined(Q_OS_WINCE_WM) #pragma optimize("g", off) #endif @@ -5592,6 +5594,21 @@ bool QUrl::hasFragment() const return d->hasFragment; } +/*! + \since 4.8 + + Returns the TLD (Top-Level Domain) of the URL, (e.g. .co.uk, .net). + Note that the return value is prefixed with a '.' unless the + URL does not contain a valid TLD, in which case the function returns + an empty string. +*/ +#ifndef QT_BOOTSTRAPPED +QString QUrl::topLevelDomain() const +{ + return qTopLevelDomain(host()); +} +#endif + /*! Returns the result of the merge of this URL with \a relative. This URL is used as a base to convert \a relative to an absolute URL. diff --git a/src/corelib/io/qurl.h b/src/corelib/io/qurl.h index 7534b8d474..07b0b4e68d 100644 --- a/src/corelib/io/qurl.h +++ b/src/corelib/io/qurl.h @@ -181,6 +181,9 @@ public: void setEncodedFragment(const QByteArray &fragment); QByteArray encodedFragment() const; bool hasFragment() const; +#ifndef QT_BOOTSTRAPPED + QString topLevelDomain() const; +#endif QUrl resolved(const QUrl &relative) const; diff --git a/src/corelib/io/qurltlds_p.h b/src/corelib/io/qurltlds_p.h new file mode 100644 index 0000000000..f4f525ced7 --- /dev/null +++ b/src/corelib/io/qurltlds_p.h @@ -0,0 +1,6481 @@ +// Version: MPL 1.1/GPL 2.0/LGPL 2.1 +// +// The contents of this file are subject to the Mozilla Public License Version +// 1.1 (the "License"); you may not use this file except in compliance with +// the License. You may obtain a copy of the License at +// http://www.mozilla.org/MPL/ +// +// Software distributed under the License is distributed on an "AS IS" basis, +// WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License +// for the specific language governing rights and limitations under the +// License. +// +// The Original Code is the Public Suffix List. +// +// The Initial Developer of the Original Code is +// Jo Hermans . +// Portions created by the Initial Developer are Copyright (C) 2007 +// the Initial Developer. All Rights Reserved. +// +// Contributor(s): +// Ruben Arakelyan +// Gervase Markham +// Pamela Greene +// David Triendl +// Jothan Frakes +// The kind representatives of many TLD registries +// +// Alternatively, the contents of this file may be used under the terms of +// either the GNU General Public License Version 2 or later (the "GPL"), or +// the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), +// in which case the provisions of the GPL or the LGPL are applicable instead +// of those above. If you wish to allow use of your version of this file only +// under the terms of either the GPL or the LGPL, and not to allow others to +// use your version of this file under the terms of the MPL, indicate your +// decision by deleting the provisions above and replace them with the notice +// and other provisions required by the GPL or the LGPL. If you do not delete +// the provisions above, a recipient may use your version of this file under +// the terms of any one of the MPL, the GPL or the LGPL. +// + +#ifndef QURLTLD_P_H +#define QURLTLD_P_H + +// +// W A R N I N G +// ------------- +// +// This file is not part of the Qt API. It exists for the convenience +// of the Network Access and Core framework. This header file may change from +// version to version without notice, or even be removed. +// +// We mean it. +// + +QT_BEGIN_NAMESPACE + +// note to maintainer: +// this file should be updated before each release -> +// for instructions see the program at +// util/corelib/qurl-generateTLDs + +static const quint16 tldCount = 3949; +static const quint16 tldIndices[] = { +0, +7, +14, +14, +20, +51, +61, +93, +100, +100, +116, +159, +167, +180, +180, +193, +234, +234, +234, +255, +255, +255, +280, +280, +287, +287, +295, +303, +313, +326, +326, +380, +393, +413, +419, +419, +419, +424, +438, +438, +469, +515, +515, +515, +534, +534, +557, +557, +557, +557, +572, +572, +572, +579, +587, +597, +612, +612, +624, +636, +648, +662, +687, +709, +714, +740, +766, +789, +789, +805, +805, +810, +815, +815, +824, +824, +831, +857, +869, +891, +891, +916, +916, +916, +927, +934, +964, +971, +987, +987, +987, +1008, +1008, +1016, +1016, +1030, +1030, +1052, +1075, +1075, +1082, +1087, +1115, +1135, +1135, +1135, +1172, +1178, +1178, +1178, +1202, +1207, +1220, +1220, +1266, +1266, +1266, +1266, +1272, +1290, +1316, +1316, +1332, +1332, +1339, +1339, +1352, +1352, +1389, +1389, +1408, +1415, +1437, +1444, +1489, +1489, +1502, +1502, +1512, +1518, +1539, +1555, +1562, +1584, +1598, +1607, +1607, +1607, +1632, +1652, +1652, +1658, +1658, +1675, +1682, +1709, +1733, +1748, +1776, +1783, +1783, +1790, +1797, +1826, +1850, +1850, +1856, +1880, +1887, +1901, +1921, +1947, +1961, +1967, +1967, +1967, +1972, +1986, +1986, +1986, +2009, +2029, +2029, +2047, +2061, +2075, +2075, +2075, +2075, +2075, +2075, +2082, +2082, +2124, +2124, +2129, +2162, +2162, +2162, +2236, +2256, +2263, +2276, +2283, +2313, +2313, +2347, +2380, +2387, +2387, +2387, +2431, +2438, +2445, +2452, +2459, +2459, +2469, +2490, +2516, +2527, +2540, +2540, +2586, +2610, +2630, +2630, +2653, +2660, +2669, +2693, +2693, +2710, +2710, +2719, +2719, +2734, +2740, +2740, +2753, +2753, +2763, +2770, +2775, +2782, +2789, +2802, +2820, +2827, +2827, +2841, +2855, +2855, +2865, +2872, +2884, +2884, +2919, +2937, +2955, +2962, +3012, +3042, +3073, +3083, +3083, +3100, +3105, +3112, +3131, +3131, +3166, +3180, +3187, +3194, +3211, +3218, +3223, +3233, +3249, +3259, +3268, +3314, +3314, +3324, +3324, +3336, +3336, +3336, +3336, +3350, +3363, +3376, +3398, +3416, +3445, +3464, +3488, +3488, +3497, +3545, +3552, +3552, +3552, +3566, +3573, +3573, +3573, +3581, +3581, +3603, +3603, +3615, +3621, +3621, +3683, +3683, +3710, +3710, +3716, +3716, +3748, +3770, +3791, +3803, +3810, +3817, +3833, +3846, +3846, +3852, +3876, +3876, +3882, +3903, +3910, +3939, +3939, +3939, +3947, +3962, +3962, +3981, +3994, +4021, +4030, +4042, +4085, +4085, +4096, +4096, +4104, +4123, +4123, +4123, +4143, +4154, +4164, +4194, +4194, +4194, +4205, +4205, +4222, +4238, +4301, +4309, +4322, +4331, +4331, +4331, +4331, +4331, +4347, +4365, +4375, +4375, +4385, +4398, +4412, +4430, +4430, +4437, +4447, +4463, +4472, +4472, +4472, +4484, +4484, +4484, +4484, +4484, +4490, +4490, +4511, +4511, +4522, +4522, +4522, +4522, +4528, +4528, +4534, +4551, +4551, +4551, +4564, +4583, +4583, +4611, +4611, +4611, +4622, +4622, +4649, +4668, +4677, +4692, +4692, +4692, +4705, +4723, +4723, +4723, +4729, +4729, +4743, +4743, +4750, +4750, +4763, +4770, +4776, +4776, +4776, +4793, +4811, +4811, +4811, +4821, +4821, +4841, +4857, +4891, +4897, +4903, +4903, +4903, +4919, +4935, +4942, +4958, +4958, +4975, +4975, +4975, +4985, +4985, +5020, +5032, +5032, +5040, +5053, +5068, +5079, +5079, +5101, +5115, +5115, +5135, +5154, +5161, +5161, +5168, +5168, +5184, +5210, +5210, +5238, +5255, +5278, +5285, +5308, +5318, +5327, +5327, +5333, +5333, +5340, +5348, +5355, +5366, +5377, +5384, +5408, +5415, +5422, +5435, +5442, +5482, +5482, +5482, +5482, +5498, +5527, +5534, +5541, +5572, +5572, +5572, +5579, +5591, +5602, +5602, +5621, +5621, +5646, +5664, +5671, +5671, +5681, +5696, +5707, +5716, +5716, +5723, +5723, +5732, +5742, +5742, +5763, +5770, +5776, +5790, +5790, +5797, +5806, +5816, +5832, +5882, +5882, +5882, +5882, +5893, +5934, +5934, +5965, +5965, +5980, +5980, +5980, +5980, +6007, +6017, +6034, +6051, +6065, +6075, +6075, +6091, +6097, +6097, +6109, +6109, +6109, +6122, +6147, +6168, +6168, +6191, +6191, +6191, +6191, +6191, +6198, +6217, +6224, +6224, +6231, +6245, +6252, +6252, +6270, +6270, +6284, +6305, +6315, +6322, +6322, +6322, +6329, +6329, +6329, +6353, +6361, +6361, +6375, +6391, +6405, +6405, +6415, +6431, +6431, +6431, +6431, +6458, +6475, +6475, +6475, +6482, +6489, +6496, +6496, +6503, +6520, +6520, +6520, +6527, +6527, +6544, +6561, +6573, +6573, +6580, +6580, +6587, +6587, +6592, +6592, +6592, +6592, +6599, +6599, +6612, +6633, +6649, +6649, +6669, +6676, +6683, +6683, +6713, +6720, +6727, +6736, +6736, +6746, +6770, +6807, +6814, +6827, +6846, +6846, +6864, +6864, +6864, +6864, +6881, +6888, +6888, +6888, +6914, +6935, +6935, +6935, +6953, +6959, +6966, +6983, +6983, +6983, +7013, +7023, +7023, +7023, +7023, +7037, +7044, +7058, +7079, +7086, +7123, +7134, +7155, +7168, +7178, +7203, +7227, +7236, +7258, +7265, +7274, +7274, +7303, +7303, +7314, +7314, +7345, +7352, +7367, +7377, +7388, +7388, +7402, +7402, +7409, +7421, +7421, +7467, +7484, +7484, +7484, +7491, +7532, +7532, +7539, +7546, +7546, +7553, +7573, +7573, +7573, +7580, +7587, +7594, +7594, +7594, +7606, +7606, +7637, +7637, +7637, +7664, +7664, +7664, +7677, +7684, +7701, +7723, +7723, +7723, +7723, +7734, +7734, +7734, +7748, +7748, +7748, +7748, +7759, +7759, +7775, +7775, +7782, +7789, +7817, +7824, +7831, +7836, +7865, +7865, +7876, +7901, +7901, +7908, +7918, +7938, +7945, +7945, +7957, +7964, +7979, +7986, +7994, +8007, +8007, +8014, +8021, +8061, +8061, +8071, +8088, +8131, +8138, +8153, +8160, +8160, +8160, +8175, +8183, +8197, +8211, +8211, +8211, +8243, +8243, +8243, +8243, +8259, +8259, +8259, +8259, +8259, +8266, +8275, +8281, +8281, +8281, +8281, +8288, +8288, +8309, +8309, +8309, +8330, +8330, +8330, +8330, +8337, +8343, +8343, +8360, +8370, +8370, +8380, +8380, +8386, +8386, +8397, +8415, +8415, +8428, +8454, +8460, +8475, +8492, +8526, +8554, +8554, +8583, +8583, +8583, +8598, +8607, +8617, +8617, +8642, +8652, +8652, +8652, +8662, +8688, +8688, +8704, +8704, +8747, +8765, +8775, +8783, +8811, +8835, +8835, +8835, +8850, +8859, +8884, +8910, +8919, +8952, +8978, +8978, +8991, +8991, +8991, +8999, +8999, +8999, +9030, +9030, +9030, +9030, +9030, +9041, +9048, +9048, +9054, +9054, +9054, +9086, +9108, +9108, +9119, +9119, +9130, +9144, +9152, +9161, +9174, +9194, +9207, +9207, +9207, +9232, +9242, +9242, +9271, +9290, +9308, +9308, +9308, +9308, +9320, +9333, +9343, +9356, +9379, +9379, +9379, +9395, +9395, +9406, +9419, +9419, +9419, +9419, +9450, +9485, +9485, +9497, +9497, +9505, +9517, +9528, +9528, +9551, +9564, +9586, +9586, +9608, +9608, +9626, +9626, +9626, +9653, +9653, +9681, +9681, +9681, +9698, +9698, +9698, +9714, +9729, +9737, +9737, +9765, +9765, +9765, +9765, +9765, +9825, +9844, +9866, +9880, +9880, +9880, +9880, +9886, +9895, +9895, +9895, +9895, +9895, +9913, +9913, +9924, +9958, +9958, +9967, +9975, +9975, +9975, +9981, +9998, +9998, +9998, +10012, +10036, +10036, +10066, +10079, +10097, +10121, +10133, +10142, +10142, +10142, +10156, +10173, +10173, +10173, +10196, +10205, +10205, +10205, +10205, +10218, +10234, +10240, +10240, +10240, +10264, +10273, +10286, +10286, +10286, +10286, +10299, +10299, +10309, +10309, +10339, +10358, +10358, +10374, +10374, +10390, +10390, +10413, +10413, +10439, +10461, +10467, +10467, +10467, +10492, +10492, +10501, +10528, +10528, +10528, +10539, +10583, +10583, +10583, +10613, +10613, +10619, +10628, +10645, +10645, +10645, +10650, +10671, +10687, +10709, +10709, +10709, +10709, +10709, +10727, +10727, +10727, +10727, +10733, +10733, +10768, +10768, +10773, +10780, +10788, +10788, +10797, +10797, +10835, +10835, +10845, +10852, +10861, +10861, +10861, +10861, +10861, +10861, +10861, +10875, +10888, +10907, +10907, +10907, +10920, +10920, +10932, +10946, +10977, +10977, +10997, +11008, +11037, +11059, +11059, +11059, +11067, +11067, +11067, +11067, +11067, +11077, +11091, +11102, +11102, +11112, +11125, +11129, +11129, +11154, +11154, +11154, +11164, +11164, +11189, +11189, +11189, +11189, +11189, +11196, +11196, +11227, +11238, +11247, +11256, +11265, +11265, +11286, +11307, +11330, +11337, +11378, +11378, +11389, +11413, +11454, +11469, +11475, +11475, +11475, +11475, +11503, +11503, +11503, +11503, +11534, +11534, +11550, +11550, +11557, +11557, +11557, +11557, +11574, +11585, +11585, +11603, +11626, +11643, +11643, +11643, +11643, +11663, +11663, +11682, +11696, +11696, +11696, +11696, +11706, +11706, +11706, +11706, +11723, +11723, +11757, +11757, +11773, +11795, +11813, +11836, +11836, +11883, +11903, +11952, +11965, +11965, +11984, +11997, +12008, +12008, +12008, +12024, +12043, +12065, +12071, +12099, +12129, +12140, +12140, +12146, +12161, +12161, +12161, +12161, +12167, +12167, +12180, +12186, +12208, +12226, +12243, +12243, +12252, +12252, +12274, +12289, +12302, +12302, +12313, +12313, +12313, +12313, +12358, +12358, +12358, +12369, +12375, +12391, +12391, +12391, +12391, +12405, +12410, +12416, +12416, +12436, +12436, +12436, +12443, +12443, +12462, +12477, +12492, +12492, +12503, +12519, +12525, +12531, +12571, +12571, +12591, +12591, +12601, +12641, +12641, +12641, +12657, +12657, +12657, +12699, +12699, +12699, +12712, +12728, +12744, +12761, +12769, +12782, +12793, +12823, +12836, +12851, +12863, +12890, +12900, +12900, +12900, +12910, +12910, +12924, +12924, +12924, +12924, +12924, +12952, +12984, +13003, +13038, +13038, +13056, +13056, +13056, +13056, +13074, +13081, +13093, +13103, +13103, +13112, +13119, +13132, +13132, +13132, +13141, +13151, +13183, +13193, +13206, +13206, +13206, +13236, +13252, +13267, +13267, +13294, +13307, +13307, +13307, +13343, +13349, +13349, +13349, +13375, +13375, +13375, +13384, +13384, +13384, +13393, +13393, +13393, +13402, +13414, +13425, +13445, +13467, +13485, +13499, +13509, +13528, +13528, +13549, +13549, +13559, +13570, +13570, +13570, +13570, +13598, +13637, +13647, +13647, +13661, +13673, +13682, +13687, +13694, +13694, +13720, +13733, +13742, +13748, +13771, +13795, +13795, +13814, +13821, +13821, +13855, +13862, +13862, +13862, +13874, +13874, +13897, +13909, +13909, +13947, +13947, +13952, +13952, +13970, +13979, +13979, +13979, +14008, +14049, +14049, +14049, +14049, +14049, +14049, +14060, +14083, +14083, +14091, +14101, +14101, +14101, +14101, +14118, +14136, +14195, +14195, +14195, +14213, +14213, +14232, +14232, +14253, +14253, +14258, +14275, +14275, +14304, +14311, +14311, +14318, +14318, +14318, +14318, +14318, +14318, +14325, +14325, +14345, +14345, +14379, +14389, +14422, +14422, +14422, +14422, +14435, +14441, +14441, +14460, +14460, +14471, +14471, +14481, +14495, +14495, +14495, +14502, +14502, +14502, +14502, +14524, +14533, +14541, +14552, +14552, +14552, +14552, +14563, +14563, +14568, +14568, +14585, +14595, +14602, +14628, +14628, +14645, +14672, +14678, +14697, +14697, +14734, +14757, +14764, +14771, +14771, +14771, +14796, +14815, +14822, +14845, +14861, +14861, +14861, +14873, +14873, +14873, +14902, +14920, +14920, +14926, +14926, +14926, +14941, +14949, +14949, +14949, +14949, +14949, +14960, +14960, +14971, +14971, +14998, +15003, +15003, +15003, +15013, +15013, +15027, +15027, +15027, +15043, +15053, +15063, +15074, +15083, +15093, +15093, +15121, +15121, +15128, +15128, +15144, +15144, +15144, +15144, +15165, +15170, +15170, +15170, +15170, +15170, +15170, +15170, +15186, +15206, +15206, +15206, +15224, +15236, +15236, +15252, +15258, +15258, +15258, +15258, +15264, +15277, +15288, +15307, +15307, +15318, +15328, +15328, +15334, +15334, +15363, +15399, +15399, +15422, +15438, +15447, +15447, +15456, +15456, +15456, +15495, +15495, +15495, +15495, +15511, +15511, +15530, +15557, +15566, +15582, +15590, +15590, +15604, +15604, +15625, +15635, +15655, +15655, +15655, +15655, +15655, +15665, +15675, +15675, +15675, +15675, +15675, +15682, +15682, +15682, +15694, +15719, +15749, +15749, +15794, +15794, +15837, +15854, +15854, +15861, +15861, +15861, +15861, +15884, +15900, +15911, +15931, +15931, +15931, +15931, +15931, +15963, +15963, +15996, +16006, +16013, +16024, +16034, +16049, +16049, +16049, +16059, +16059, +16059, +16059, +16059, +16059, +16059, +16064, +16075, +16104, +16104, +16117, +16124, +16124, +16124, +16124, +16130, +16145, +16159, +16190, +16193, +16196, +16210, +16224, +16243, +16255, +16261, +16280, +16283, +16292, +16295, +16295, +16301, +16304, +16322, +16325, +16328, +16349, +16355, +16382, +16408, +16414, +16414, +16414, +16458, +16477, +16480, +16485, +16488, +16514, +16520, +16530, +16530, +16546, +16562, +16597, +16603, +16622, +16622, +16646, +16669, +16672, +16715, +16715, +16715, +16718, +16718, +16727, +16733, +16752, +16770, +16787, +16794, +16810, +16827, +16840, +16850, +16876, +16901, +16901, +16901, +16916, +16919, +16926, +16943, +16972, +16978, +16978, +16978, +16981, +17008, +17008, +17016, +17053, +17053, +17053, +17053, +17072, +17086, +17105, +17139, +17153, +17162, +17162, +17177, +17177, +17177, +17177, +17195, +17218, +17221, +17221, +17237, +17276, +17276, +17300, +17319, +17339, +17357, +17370, +17383, +17400, +17407, +17419, +17439, +17439, +17449, +17465, +17475, +17504, +17527, +17527, +17534, +17548, +17564, +17564, +17598, +17598, +17601, +17630, +17649, +17669, +17669, +17679, +17686, +17757, +17776, +17796, +17810, +17840, +17840, +17877, +17884, +17884, +17911, +17936, +17970, +17980, +17995, +17995, +18008, +18011, +18036, +18075, +18097, +18097, +18104, +18115, +18115, +18129, +18134, +18141, +18141, +18157, +18180, +18190, +18217, +18224, +18252, +18284, +18284, +18296, +18299, +18312, +18322, +18338, +18348, +18348, +18363, +18372, +18387, +18387, +18390, +18402, +18445, +18445, +18445, +18466, +18479, +18479, +18498, +18508, +18511, +18511, +18511, +18511, +18511, +18526, +18558, +18586, +18622, +18643, +18670, +18686, +18710, +18720, +18739, +18739, +18742, +18745, +18771, +18774, +18777, +18791, +18813, +18816, +18822, +18839, +18845, +18851, +18854, +18878, +18881, +18896, +18896, +18899, +18926, +18937, +18940, +18953, +18963, +19010, +19010, +19017, +19046, +19060, +19060, +19087, +19095, +19101, +19101, +19128, +19146, +19157, +19157, +19188, +19198, +19205, +19223, +19230, +19255, +19280, +19280, +19283, +19292, +19301, +19320, +19323, +19323, +19341, +19341, +19365, +19378, +19381, +19394, +19423, +19433, +19440, +19466, +19490, +19490, +19490, +19497, +19504, +19511, +19511, +19518, +19545, +19568, +19575, +19575, +19583, +19586, +19592, +19592, +19609, +19622, +19629, +19641, +19641, +19656, +19673, +19700, +19723, +19733, +19746, +19759, +19769, +19782, +19789, +19795, +19831, +19834, +19841, +19851, +19854, +19880, +19895, +19898, +19898, +19911, +19922, +19950, +20020, +20030, +20059, +20062, +20089, +20107, +20151, +20154, +20175, +20205, +20208, +20229, +20229, +20255, +20261, +20261, +20283, +20335, +20362, +20385, +20392, +20392, +20392, +20392, +20418, +20418, +20418, +20418, +20443, +20446, +20446, +20452, +20452, +20467, +20467, +20489, +20489, +20498, +20525, +20554, +20560, +20575, +20589, +20589, +20589, +20614, +20652, +20659, +20659, +20668, +20679, +20679, +20679, +20685, +20685, +20685, +20685, +20685, +20685, +20696, +20733, +20760, +20766, +20769, +20792, +20792, +20792, +20792, +20813, +20813, +20813, +20813, +20826, +20826, +20846, +20862, +20880, +20887, +20901, +20908, +20933, +20938, +20958, +20969, +20978, +20978, +20978, +20985, +20985, +20985, +21000, +21010, +21010, +21014, +21026, +21033, +21041, +21041, +21051, +21051, +21064, +21071, +21113, +21120, +21120, +21127, +21134, +21142, +21164, +21164, +21164, +21188, +21195, +21208, +21215, +21226, +21226, +21226, +21238, +21249, +21255, +21255, +21265, +21279, +21296, +21301, +21315, +21321, +21331, +21331, +21331, +21337, +21343, +21343, +21351, +21351, +21361, +21368, +21383, +21383, +21389, +21413, +21437, +21449, +21462, +21478, +21506, +21534, +21546, +21546, +21557, +21580, +21595, +21595, +21595, +21595, +21626, +21626, +21646, +21670, +21676, +21688, +21688, +21716, +21731, +21762, +21762, +21762, +21762, +21762, +21783, +21789, +21799, +21828, +21828, +21837, +21845, +21868, +21874, +21874, +21880, +21880, +21889, +21901, +21910, +21941, +21941, +21959, +21959, +21959, +21966, +21966, +21972, +21972, +21995, +22011, +22043, +22043, +22051, +22051, +22060, +22060, +22060, +22074, +22086, +22086, +22099, +22099, +22120, +22120, +22134, +22144, +22150, +22158, +22164, +22164, +22171, +22199, +22210, +22210, +22210, +22220, +22228, +22228, +22239, +22261, +22304, +22304, +22312, +22349, +22349, +22349, +22357, +22381, +22381, +22390, +22390, +22390, +22390, +22402, +22413, +22413, +22422, +22422, +22445, +22445, +22445, +22456, +22456, +22469, +22479, +22501, +22512, +22528, +22528, +22528, +22528, +22528, +22528, +22528, +22540, +22540, +22546, +22546, +22546, +22546, +22569, +22591, +22591, +22591, +22591, +22610, +22655, +22655, +22667, +22667, +22677, +22677, +22692, +22692, +22702, +22702, +22702, +22717, +22736, +22750, +22755, +22780, +22785, +22822, +22844, +22859, +22871, +22909, +22949, +22962, +22973, +22979, +22988, +23007, +23027, +23035, +23072, +23082, +23082, +23109, +23116, +23130, +23158, +23166, +23166, +23172, +23177, +23189, +23219, +23219, +23250, +23273, +23281, +23281, +23281, +23281, +23281, +23287, +23287, +23299, +23305, +23315, +23315, +23321, +23328, +23334, +23355, +23355, +23355, +23355, +23355, +23366, +23390, +23396, +23396, +23396, +23396, +23402, +23418, +23424, +23424, +23438, +23446, +23446, +23446, +23500, +23525, +23569, +23592, +23592, +23592, +23605, +23614, +23614, +23614, +23627, +23633, +23657, +23673, +23673, +23673, +23689, +23689, +23701, +23701, +23701, +23713, +23713, +23713, +23738, +23758, +23775, +23775, +23794, +23794, +23803, +23803, +23803, +23803, +23813, +23826, +23845, +23845, +23845, +23845, +23872, +23872, +23872, +23888, +23888, +23900, +23900, +23906, +23906, +23906, +23906, +23906, +23924, +23924, +23924, +23930, +23930, +23939, +23949, +23971, +23971, +23971, +24000, +24012, +24042, +24042, +24042, +24042, +24042, +24070, +24076, +24094, +24094, +24094, +24123, +24123, +24123, +24134, +24150, +24150, +24150, +24150, +24150, +24150, +24155, +24179, +24179, +24189, +24189, +24189, +24198, +24198, +24218, +24218, +24218, +24234, +24251, +24257, +24276, +24305, +24321, +24321, +24321, +24334, +24334, +24334, +24349, +24356, +24361, +24372, +24372, +24372, +24388, +24396, +24396, +24402, +24410, +24410, +24428, +24428, +24450, +24450, +24467, +24485, +24495, +24495, +24495, +24507, +24507, +24514, +24531, +24531, +24531, +24531, +24531, +24537, +24537, +24558, +24572, +24584, +24584, +24601, +24601, +24607, +24615, +24615, +24632, +24632, +24632, +24632, +24661, +24676, +24676, +24724, +24751, +24751, +24774, +24774, +24783, +24793, +24793, +24793, +24813, +24819, +24819, +24826, +24826, +24842, +24858, +24872, +24872, +24890, +24890, +24890, +24890, +24890, +24890, +24890, +24890, +24890, +24906, +24906, +24917, +24928, +24947, +24947, +24947, +24947, +24947, +24947, +24947, +24947, +24947, +24963, +24983, +24991, +24991, +24991, +24991, +24991, +24991, +24991, +24991, +25007, +25007, +25007, +25007, +25007, +25007, +25007, +25030, +25040, +25040, +25040, +25040, +25040, +25059, +25097, +25132, +25149, +25159, +25169, +25169, +25169, +25192, +25192, +25192, +25192, +25205, +25205, +25216, +25221, +25221, +25233, +25233, +25240, +25250, +25256, +25273, +25273, +25303, +25321, +25321, +25321, +25333, +25333, +25333, +25333, +25370, +25370, +25402, +25418, +25418, +25439, +25439, +25454, +25454, +25454, +25463, +25477, +25526, +25526, +25526, +25526, +25545, +25562, +25572, +25572, +25582, +25582, +25582, +25597, +25610, +25634, +25641, +25641, +25641, +25668, +25668, +25675, +25707, +25727, +25727, +25741, +25756, +25756, +25779, +25811, +25811, +25811, +25817, +25817, +25817, +25827, +25827, +25827, +25827, +25827, +25836, +25836, +25836, +25836, +25850, +25850, +25860, +25884, +25901, +25922, +25936, +25946, +25969, +25969, +25969, +25969, +25975, +25975, +25987, +25987, +26065, +26065, +26065, +26084, +26084, +26103, +26128, +26141, +26151, +26169, +26169, +26169, +26180, +26191, +26191, +26191, +26197, +26197, +26205, +26211, +26235, +26235, +26235, +26235, +26235, +26235, +26245, +26245, +26259, +26259, +26259, +26259, +26284, +26284, +26325, +26325, +26355, +26364, +26364, +26402, +26418, +26418, +26425, +26432, +26432, +26454, +26504, +26513, +26525, +26525, +26525, +26525, +26525, +26545, +26545, +26571, +26590, +26597, +26597, +26597, +26597, +26597, +26639, +26648, +26659, +26666, +26672, +26672, +26672, +26672, +26672, +26694, +26701, +26701, +26701, +26724, +26724, +26746, +26753, +26774, +26774, +26774, +26774, +26806, +26824, +26824, +26830, +26852, +26882, +26882, +26889, +26889, +26889, +26889, +26889, +26889, +26903, +26911, +26918, +26918, +26928, +26948, +26948, +26970, +26970, +26985, +26996, +27045, +27045, +27058, +27058, +27068, +27068, +27104, +27155, +27155, +27155, +27155, +27155, +27172, +27172, +27172, +27172, +27189, +27195, +27195, +27223, +27223, +27223, +27223, +27244, +27290, +27322, +27332, +27364, +27371, +27371, +27371, +27401, +27401, +27417, +27417, +27431, +27470, +27470, +27470, +27470, +27484, +27484, +27484, +27484, +27484, +27496, +27496, +27515, +27515, +27543, +27560, +27576, +27604, +27622, +27631, +27631, +27638, +27649, +27672, +27682, +27682, +27682, +27707, +27717, +27724, +27732, +27755, +27755, +27755, +27768, +27768, +27783, +27789, +27799, +27799, +27799, +27818, +27826, +27838, +27848, +27848, +27848, +27855, +27862, +27862, +27896, +27921, +27921, +27943, +27954, +27954, +27976, +27976, +27976, +27985, +28002, +28012, +28019, +28034, +28034, +28046, +28068, +28097, +28122, +28122, +28131, +28137, +28151, +28151, +28172, +28190, +28196, +28211, +28211, +28264, +28273, +28286, +28324, +28324, +28324, +28354, +28354, +28361, +28397, +28417, +28417, +28424, +28435, +28461, +28461, +28470, +28483, +28483, +28483, +28483, +28483, +28483, +28483, +28515, +28531, +28531, +28549, +28575, +28575, +28575, +28582, +28599, +28615, +28630, +28630, +28672, +28711, +28723, +28723, +28731, +28752, +28752, +28752, +28763, +28763, +28775, +28775, +28775, +28775, +28775, +28775, +28805, +28814, +28830, +28861, +28882, +28882, +28902, +28918, +28937, +28952, +28959, +28998, +29009, +29009, +29009, +29009, +29019, +29019, +29019, +29019, +29019, +29057, +29069, +29076, +29076, +29076, +29076, +29076, +29082, +29082, +29082, +29117, +29117, +29117, +29117, +29134, +29134, +29159, +29159, +29185, +29185, +29196, +29196, +29242, +29248, +29256, +29280, +29301, +29307, +29307, +29307, +29314, +29314, +29338, +29356, +29367, +29367, +29381, +29391, +29399, +29399, +29414, +29434, +29434, +29441, +29473, +29484, +29503, +29520, +29520, +29548, +29565, +29572, +29572, +29572, +29572, +29572, +29597, +29597, +29620, +29655, +29660, +29660, +29660, +29667, +29674, +29688, +29698, +29705, +29728, +29740, +29740, +29761, +29761, +29767, +29780, +29787, +29794, +29794, +29807, +29820, +29820, +29820, +29820, +29832, +29844, +29855, +29855, +29855, +29867, +29867, +29867, +29867, +29881, +29881, +29905, +29905, +29905, +29923, +29923, +29948, +29948, +29948, +29976, +29986, +29996, +29996, +30030, +30030, +30054, +30054, +30070, +30070, +30070, +30077, +30077, +30087, +30107, +30107, +30115, +30141, +30178, +30178, +30201, +30201, +30201, +30207, +30229, +30239, +30254, +30268, +30277, +30311, +30323, +30323, +30331, +30331, +30331, +30331, +30331, +30353, +30365, +30374, +30374, +30374, +30380, +30380, +30380, +30380, +30410, +30410, +30410, +30443, +30443, +30453, +30462, +30472, +30472, +30472, +30472, +30472, +30472, +30489, +30500, +30500, +30500, +30532, +30532, +30553, +30577, +30599, +30599, +30609, +30640, +30640, +30640, +30664, +30676, +30676, +30676, +30692, +30719, +30728, +30728, +30742, +30742, +30749, +30749, +30760, +30770, +30770, +30783, +30783, +30783, +30804, +30847, +30847, +30847, +30847, +30857, +30857, +30857, +30857, +30875, +30875, +30895, +30895, +30921, +30926, +30926, +30926, +30945, +30945, +30945, +30945, +30959, +30959, +30959, +30959, +30972, +30972, +30984, +31011, +31011, +31048, +31056, +31056, +31070, +31077, +31077, +31110, +31110, +31115, +31122, +31139, +31159, +31159, +31165, +31171, +31171, +31197, +31204, +31211, +31211, +31221, +31228, +31228, +31245, +31245, +31245, +31252, +31265, +31265, +31265, +31265, +31294, +31305, +31320, +31333, +31333, +31333, +31343, +31350, +31357, +31369, +31369, +31379, +31385, +31391, +31407, +31407, +31407, +31423, +31423, +31423, +31434, +31454, +31470, +31511, +31521, +31521, +31521, +31542, +31582, +31582, +31597, +31597, +31597, +31614, +31623, +31645, +31645, +31661, +31661, +31669, +31669, +31676, +31676, +31706, +31720, +31726, +31743, +31785, +31804, +31817, +31817, +31835, +31846, +31863, +31885, +31885, +31896, +31907, +31907, +31907, +31922, +31922, +31929, +31929, +31929, +31936, +31943, +31949, +31949, +31949, +31959, +32006, +32024, +32031, +32031, +32038, +32063, +32095, +32095, +32105, +32105, +32105, +32105, +32105, +32125, +32134, +32140, +32176, +32185, +32195, +32195, +32195, +32195, +32202, +32202, +32218, +32236, +32259, +32294, +32300, +32305, +32305, +32305, +32323, +32337, +32352, +32359, +32374, +32381, +32388, +32388, +32388, +32402, +32402, +32402, +32402, +32418, +32428, +32428, +32428, +32450, +32450, +32450, +32462, +32467, +32480, +32480, +32480, +32487, +32502, +32509, +32525, +32560, +32570, +32583, +32597, +32623, +32637, +32644, +32667, +32707, +32725, +32725, +32747, +32747, +32751, +32758, +32789, +32807, +32824, +32824, +32824, +32824, +32843, +32843, +32850, +32876, +32908, +32915, +32946, +32965, +32965, +32982, +33002, +33009, +33029, +33064, +33084, +33098, +33098, +33098, +33098, +33110, +33110, +33151, +33158, +33180, +33198, +33205, +33227, +33227, +33237, +33237, +33253, +33258, +33277, +33292, +33315, +33315, +33333, +33348, +33348, +33348, +33348, +33348, +33348, +33348, +33355, +33355, +33355, +33390, +33408, +33423, +33437, +33452, +33458, +33465, +33480, +33480, +33487, +33494, +33504, +33511, +33551, +33551, +33558, +33589, +33595, +33595, +33602, +33627, +33644, +33668, +33668, +33668, +33676, +33676, +33716, +33728, +33747, +33747, +33769, +33775, +33789, +33803, +33803, +33810, +33810, +33810, +33820, +33820, +33820, +33820, +33843, +33843, +33843, +33879, +33889, +33889, +33889, +33903, +33917, +33931, +33959, +33993, +34000, +34014, +34037, +34043, +34055, +34055, +34077, +34083, +34090, +34099, +34099, +34115, +34115, +34133, +34140, +34167, +34172, +34184, +34221, +34245, +34252, +34252, +34259, +34318, +34318, +34325, +34325, +34352, +34400, +34415, +34422, +34422, +34431, +34438, +34445, +34445, +34473, +34473, +34489, +34489, +34489, +34489, +34499, +34499, +34499, +34516, +34536, +34551, +34564, +34580, +34580, +34580, +34589, +34589, +34589, +34613, +34648, +34648, +34648, +34655, +34664, +34681, +34681, +34698, +34698, +34720, +34736, +34749, +34749, +34765, +34778, +34785, +34795, +34819, +34819, +34829, +34841, +34848, +34854, +34854, +34854, +34878, +34894, +34894, +34900, +34917, +34934, +34940, +34970, +34998, +34998, +35004, +35004, +35012, +35012, +35012, +35020, +35020, +35032, +35038, +35062, +35062, +35062, +35068, +35068, +35082, +35092, +35096, +35107, +35118, +35134, +35155, +35155, +35166, +35178, +35178, +35195, +35201, +35201, +35201, +35226, +35226, +35226, +35226, +35256, +35262, +35272, +35280, +35299, +35332, +35354, +35354, +35354, +35370, +35386, +35417, +35417, +35460, +35473, +35478, +35495, +35504, +35504, +35518, +35552, +35589, +35624, +35624, +35637, +35637, +35643, +35643, +35669, +35682, +35695, +35702, +35709, +35709, +35726, +35739, +35749, +35756, +35756, +35778, +35803, +35810, +35829, +35883, +35899, +35905, +35911, +35911, +35923, +35947, +35954, +35980, +35987, +36034, +36052, +36063, +36095, +36106, +36106, +36113, +36120, +36140, +36140, +36153, +36160, +36160, +36167, +36203, +36203, +36218, +36218, +36225, +36253, +36259, +36284, +36296, +36310, +36324, +36331, +36344, +36367, +36367, +36367, +36412, +36412, +36422, +36463, +36463, +36463, +36479, +36490, +36513, +36520, +36520, +36527, +36527, +36527, +36540, +36574, +36594, +36594, +36605, +36621, +36621, +36641, +36641, +36641, +36659, +36682, +36682, +36682, +36682, +36705, +36705, +36705, +36720, +36720, +36755, +36755, +36771, +36771, +36771, +36788, +36806, +36835, +36845, +36875, +36875, +36903, +36921, +36928, +36928, +36940, +36940, +36940, +36966, +36966, +36973, +36983, +36998, +37004, +37014, +37024, +37024, +37032, +37038, +37038, +37061, +37074, +37074, +37091, +37098, +37105, +37105, +37133, +37141, +37141, +37148, +37191, +37191, +37197, +37197, +37210, +37224, +37224, +37231, +37250, +37257, +37273, +37273, +37280, +37287, +37294, +37300, +37307, +37330, +37348, +37348, +37359, +37359, +37359, +37377, +37392, +37398, +37412, +37431, +37469, +37486, +37508, +37517, +37535, +37535, +37542, +37542, +37549, +37549, +37549, +37549, +37556, +37576, +37576, +37583, +37590, +37597, +37604, +37604, +37621, +37635, +37676, +37676, +37704, +37711, +37728, +37728, +37737, +37737, +37737, +37750, +37757, +37778, +37785, +37785, +37819, +37826, +37833, +37843, +37850, +37869, +37914, +37921, +37935, +37942, +37949, +37982, +38013, +38013, +38013, +38023, +38057, +38077, +38097, +38110, +38117, +38123, +38133, +38133, +38133, +38140, +38140, +38148, +38159, +38179, +38192, +38205, +38218, +38218, +38218, +38218, +38218, +38218, +38218, +38218, +38218, +38218, +38218, +38218, +38225, +38225, +38230, +38246, +38258, +38280, +38287, +38294, +38294, +38294, +38301, +38318, +38318, +38340, +38371, +38371, +38384, +38420, +38440, +38453, +38481, +38506, +38522, +38534, +38559, +38559, +38559, +38564, +38564, +38581, +38604, +38604, +38611, +38620, +38626, +38635, +38635, +38635, +38666, +38674, +38688, +38693, +38710, +38722, +38722, +38722, +38729, +38734, +38752, +38792, +38818, +38825, +38861, +38902, +38934, +38949, +38949, +38960, +38969, +38985, +38985, +38996, +39013, +39024, +39024, +39032, +39061, +39074, +39089, +39123, +39123, +39123, +39140, +39161, +39180, +39206, +39215, +39254, +39261, +39277, +39284, +39314, +39314, +39330, +39340, +39340, +39371, +39371, +39392, +39430, +39430, +39437, +39444, +39461, +39468, +39468, +39485, +39517, +39524, +39538, +39543, +39548, +39555, +39581, +39588, +39588, +39609, +39609, +39616, +39652, +39670, +39677, +39677, +39684, +39691, +39702, +39717, +39717, +39717, +39724, +39749, +39760, +39766, +39775, +39791, +39791, +39814, +39827, +39827, +39837, +39859}; + +static const char tldData[] = { +"com.cn\0" +"com.co\0" +"hb.cn\0" +"med.br\0conf.lv\0wallonie.museum\0" +"namsos.no\0" +"\xe7\xb6\xb2\xe7\xbb\x9c.hk\0farmers.museum\0rel.pl\0" +"com.cu\0" +"military.museum\0" +"*.jm\0convent.museum\0cymru.museum\0malvik.no\0" +"univ.sn\0" +"gliding.aero\0" +"wodzislaw.pl\0" +"com.dm\0!pref.iwate.jp\0tran\xc3\xb8y.no\0pila.pl\0" +"mb.it\0*.ke\0lib.ri.us\0" +"com.ec\0*.kh\0tr\xc3\xb8gstad.no\0" +"com.ee\0" +"mobi.gp\0" +"gran.no\0" +"wa.gov.au\0" +"com.dz\0kg.kr\0" +"zoological.museum\0gjerstad.no\0haugesund.no\0kharkov.ua\0" +"walbrzych.pl\0" +"civilization.museum\0" +"ha.no\0" +"*.kw\0" +"med.ec\0com.es\0" +"med.ee\0otago.museum\0svelvik.no\0" +"art.ht\0amber.museum\0elvendrell.museum\0rost.no\0" +"jx.cn\0gratangen.no\0" +"association.aero\0ca.it\0" +"zaporizhzhe.ua\0" +"com.fr\0" +"szex.hu\0" +"e-burg.ru\0" +"com.ge\0bokn.no\0" +"mordovia.ru\0" +"com.gh\0*.mm\0" +"com.gi\0z.se\0" +"cahcesuolo.no\0" +"hurdal.no\0joshkar-ola.ru\0" +"cadaques.museum\0ma.us\0" +"a.bg\0" +"com.gn\0bozen.it\0tambov.ru\0" +"*.gifu.jp\0*.tokyo.jp\0*.mt\0" +"com.gp\0travel\0cc.tx.us\0" +"com.gr\0hemne.no\0" +"*.ni\0" +"*.mz\0" +"cc.il.us\0" +"com.gy\0" +"zj.cn\0oksnes.no\0museum.tt\0" +"com.hk\0*.np\0" +"rc.it\0baseball.museum\0" +"com.hn\0exhibition.museum\0" +"h\xc3\xa1""bmer.no\0" +"com.hr\0" +"fg.it\0stathelle.no\0defense.tn\0" +"com.ht\0" +"qld.gov.au\0*.nz\0" +"davvenj\xc3\xa1rga.no\0*.om\0" +"vang.no\0" +"*.kumamoto.jp\0" +"vercelli.it\0usenet.pl\0" +"com.io\0stalbans.museum\0" +"com.iq\0" +"*.pg\0" +"com.is\0klabu.no\0skiptvet.no\0" +"med.ht\0field.museum\0" +"gr.it\0gj\xc3\xb8vik.no\0tromsa.no\0lib.mi.us\0" +"ca.na\0" +"hagebostad.no\0k12.ma.us\0" +"*.qa\0" +"*.niigata.jp\0" +"monzaebrianza.it\0com.jo\0comunica\xc3\xa7\xc3\xb5""es.museum\0" +"gr.jp\0" +"ballangen.no\0*.py\0" +"scienceandindustry.museum\0" +"nuoro.it\0com.kg\0" +"com.ki\0" +"im.it\0idv.tw\0" +"*.akita.jp\0com.km\0r\xc3\xb8ros.no\0sopot.pl\0" +"!pref.yamanashi.jp\0" +"com.kp\0" +"!pref.kochi.jp\0com.la\0" +"com.lb\0" +"com.lc\0stjordalshalsen.no\0sigdal.no\0cc.nm.us\0" +"samnanger.no\0" +"drobak.no\0" +"vt.it\0" +"catering.aero\0com.ky\0" +"com.kz\0cc.ca.us\0" +"com.lk\0" +"grosseto.it\0mosvik.no\0" +"namsskogan.no\0" +"loten.no\0" +"chirurgiens-dentistes.fr\0" +"com.lr\0bremanger.no\0" +"gs.cn\0" +"com.lv\0lib.co.us\0" +"com.mg\0" +"passenger-association.aero\0" +"com.ly\0yekaterinburg.ru\0" +"vladivostok.ru\0" +"com.mk\0beeldengeluid.museum\0" +"com.ml\0" +"art.pl\0" +"com.mo\0" +"britishcolumbia.museum\0tx.us\0" +"com.na\0sakhalin.ru\0*.sv\0" +"mc.it\0" +"amsterdam.museum\0udm.ru\0" +"com.mu\0" +"com.mv\0com.nf\0" +"com.mw\0com.ng\0il.us\0" +"geometre-expert.fr\0com.mx\0" +"med.ly\0com.my\0" +"ag.it\0" +"*.tr\0" +"!pref.oita.jp\0" +"hoyanger.no\0skedsmo.no\0" +"com.nr\0turystyka.pl\0" +"koebenhavn.museum\0" +"quebec.museum\0" +"stord.no\0*.uk\0" +"act.au\0" +"br.it\0cb.it\0gyeonggi.kr\0jobs.tt\0lib.hi.us\0" +"*.ve\0" +"*.saga.jp\0wildlife.museum\0com.pa\0" +"monzabrianza.it\0sciencehistory.museum\0stange.no\0oskol.ru\0principe.st\0*.uy\0" +"plaza.museum\0com.pe\0" +"com.pf\0" +"eigersund.no\0" +"com.ph\0" +"manx.museum\0marylhurst.museum\0" +"md.ci\0pi.it\0schweiz.museum\0com.pk\0" +"grp.lk\0fr\xc3\xb8ya.no\0com.pl\0press.se\0" +"us.com\0" +"b.bg\0cremona.it\0communication.museum\0art.sn\0" +"med.pa\0" +"com.pr\0" +"com.ps\0" +"com.pt\0" +"k12.in.us\0" +"ah.cn\0bahcavuotna.no\0" +"sondrio.it\0arkhangelsk.ru\0" +"cargo.aero\0" +"council.aero\0" +"museum.mv\0hattfjelldal.no\0spydeberg.no\0med.pl\0" +"niepce.museum\0museum.mw\0" +"anthropology.museum\0" +"pharmacien.fr\0smola.no\0" +"fin.ec\0" +"selbu.no\0" +"workinggroup.aero\0nm.us\0" +"museum.no\0com.re\0" +"cc.vt.us\0" +"village.museum\0" +"ca.us\0" +"*.sapporo.jp\0" +"teramo.it\0" +"com.ro\0" +"*.ye\0" +"com.sa\0" +"com.sb\0" +"so.it\0com.sc\0" +"jolster.no\0com.sd\0" +"com.ru\0" +"com.rw\0com.sg\0" +"sydney.museum\0" +"sa.edu.au\0" +"tom.ru\0" +"com.sl\0*.za\0" +"\xe7\xbd\x91\xe7\xb5\xa1.hk\0naturbruksgymn.se\0com.sn\0" +"assedic.fr\0com.so\0" +"!pref.mie.jp\0*.yu\0" +"med.sa\0" +"newspaper.museum\0holmestrand.no\0dnepropetrovsk.ua\0" +"christiansburg.museum\0roan.no\0" +"pesaro-urbino.it\0med.sd\0com.st\0" +"s\xc3\xb8gne.no\0" +"nuernberg.museum\0" +"*.zm\0" +"com.sy\0" +"*.nagano.jp\0com.tj\0" +"nt.gov.au\0news.hu\0paderborn.museum\0" +"boston.museum\0" +"com.tn\0" +"com.to\0" +"broadcast.museum\0" +"com.ua\0" +"*.zw\0" +"baikal.ru\0" +"bykle.no\0com.tt\0" +"verdal.no\0" +"roros.no\0" +"fi.cr\0carboniaiglesias.it\0chuvashia.ru\0com.tw\0" +"k12.ca.us\0" +"eidsvoll.no\0" +"*.ishikawa.jp\0" +"dolls.museum\0" +"naval.museum\0" +"karasjok.no\0tysvar.no\0" +"bielawa.pl\0com.vc\0" +"svalbard.no\0deatnu.no\0rnd.ru\0" +"grandrapids.museum\0" +"bauern.museum\0k12.pr.us\0" +"press.ma\0" +"*.kagawa.jp\0fribourg.museum\0przeworsk.pl\0com.vi\0" +"com.uz\0" +"babia-gora.pl\0" +"com.vn\0" +"med.pro\0" +"suedtirol.it\0kursk.ru\0" +"bonn.museum\0" +"lt.it\0" +"design.aero\0microlight.aero\0americanantiques.museum\0meland.no\0" +"insurance.aero\0aarborte.no\0" +"kh.ua\0" +"macerata.it\0architecture.museum\0" +"rovigo.it\0rawa-maz.pl\0" +"store.nf\0levanger.no\0" +"b\xc3\xa1jddar.no\0" +"not.br\0" +"com.ws\0" +"!pref.kagawa.jp\0" +"!omanpost.om\0" +"vt.us\0" +"gs.ah.no\0vladikavkaz.ru\0" +"no.it\0" +"in.na\0szkola.pl\0a.se\0" +"aid.pl\0" +"workshop.museum\0vegarshei.no\0" +"sund.no\0" +"bs.it\0flora.no\0" +"agriculture.museum\0" +"koeln.museum\0" +"minnesota.museum\0k12.il.us\0" +"froya.no\0" +"aeroport.fr\0" +"davvenjarga.no\0zgora.pl\0ivano-frankivsk.ua\0" +"*.gunma.jp\0" +"amot.no\0" +"mus.br\0chungbuk.kr\0" +"ggf.br\0lorenskog.no\0" +"jeonbuk.kr\0" +"k12.vi.us\0" +"c.bg\0sande.more-og-romsdal.no\0" +"perugia.it\0" +"massa-carrara.it\0" +"michigan.museum\0" +"archaeology.museum\0mosj\xc3\xb8""en.no\0czest.pl\0koenig.ru\0\xe0\xb6\xbd\xe0\xb6\x82\xe0\xb6\x9a\xe0\xb7\x8f\0" +"mobi.tt\0" +"kraanghke.no\0" +"cc.in.us\0" +"re.it\0lib.vt.us\0" +"dell-ogliastra.it\0" +"s\xc3\xb8mna.no\0" +"k12.wv.us\0" +"gok.pk\0fh.se\0" +"luzern.museum\0" +"fi.it\0swidnica.pl\0" +"cbg.ru\0" +"latina.it\0" +"vibovalentia.it\0" +"modum.no\0" +"safety.aero\0" +"sp.it\0" +"science.museum\0ah.no\0" +"norddal.no\0" +"cc.na\0" +"re.kr\0" +"dielddanuorri.no\0" +"force.museum\0" +"torino.it\0cc.md.us\0" +"artanddesign.museum\0pisz.pl\0" +"olsztyn.pl\0" +"unsa.ba\0rade.no\0vinnica.ua\0" +"in.rs\0astrakhan.ru\0" +"sogne.no\0" +"homebuilt.aero\0" +"polkowice.pl\0" +"hole.no\0health.vn\0" +"fj.cn\0" +"davvesiida.no\0" +"vic.au\0" +"kongsberg.no\0" +"pub.sa\0" +"vv.it\0" +"!pref.tottori.jp\0" +"*.sendai.jp\0in.th\0" +"lib.pa.us\0" +"chiropractic.museum\0" +"mobi.na\0aca.pro\0" +"konyvelo.hu\0sciencecenters.museum\0" +"he.cn\0" +"in.ua\0" +"!city.nagoya.jp\0" +"muenchen.museum\0" +"psi.br\0" +"maryland.museum\0" +"!statecouncil.om\0" +"tr\xc3\xa6na.no\0" +"!pref.yamagata.jp\0jewishart.museum\0" +"lu.it\0me.it\0" +"chel.ru\0" +"tatarstan.ru\0" +"adult.ht\0in.us\0" +"kafjord.no\0" +"\xd7\x99\xd7\xa8\xd7\x95\xd7\xa9\xd7\x9c\xd7\x99\xd7\x9d.museum\0" +"net.ac\0k12.ec\0" +"net.ae\0bashkiria.ru\0" +"net.af\0!omantel.om\0" +"net.ag\0" +"net.ai\0" +"!pref.toyama.jp\0" +"net.al\0timekeeping.museum\0" +"net.an\0design.museum\0fin.tn\0" +"ethnology.museum\0" +"perso.ht\0asker.no\0b.se\0" +"net.ba\0" +"net.bb\0flanders.museum\0" +"mincom.tn\0" +"frana.no\0" +"bt.it\0" +"net.bh\0" +"auto.pl\0" +"net.az\0" +"treviso.it\0" +"war.museum\0" +"net.bm\0" +"langevag.no\0m\xc3\xa5lselv.no\0" +"net.bo\0" +"gol.no\0" +"folkebibl.no\0" +"net.br\0" +"net.bs\0troandin.no\0saotome.st\0lib.tn.us\0" +"md.us\0k12.ut.us\0" +"d.bg\0cambridge.museum\0\xc3\xa5s.no\0" +"net.ci\0" +"net.bz\0" +"sch.ae\0undersea.museum\0odda.no\0" +"net.cn\0" +"net.co\0c.la\0" +"gliwice.pl\0" +"aurskog-h\xc3\xb8land.no\0" +"andria-trani-barletta.it\0" +"net.cu\0loab\xc3\xa1t.no\0" +"rep.kp\0" +"\xe7\xbb\x84\xe7\xb9\x94.hk\0" +"gallery.museum\0" +"\xc3\xb8rland.no\0" +"store.ro\0" +"net.dm\0" +"somna.no\0" +"hemnes.no\0" +"ringebu.no\0k12.ky.us\0" +"net.ec\0" +"dn.ua\0" +"tarnobrzeg.pl\0" +"soc.lk\0" +"romsa.no\0" +"bamble.no\0" +"net.dz\0lutsk.ua\0" +"barlettatraniandria.it\0ta.it\0countryestate.museum\0" +"kaszuby.pl\0" +"*.yamaguchi.jp\0cranbrook.museum\0store.st\0" +"southcarolina.museum\0lib.md.us\0" +"textile.museum\0" +"cheltenham.museum\0hurum.no\0" +"*.oita.jp\0" +"shop.ht\0cc.me.us\0" +"shop.hu\0turin.it\0" +"louvre.museum\0" +"k12.ar.us\0" +"consulting.aero\0" +"gv.ao\0" +"sauherad.no\0" +"gv.at\0net.ge\0" +"ostre-toten.no\0lib.ok.us\0" +"net.gg\0pilots.museum\0" +"2000.hu\0geology.museum\0" +"net.gn\0" +"mazowsze.pl\0bir.ru\0" +"net.gp\0" +"net.gr\0" +"oxford.museum\0" +"per.la\0" +"eastafrica.museum\0" +"meeres.museum\0" +"net.gy\0*.shizuoka.jp\0" +"\xe5\x95\x86\xe6\xa5\xad.tw\0" +"net.hk\0" +"net.hn\0" +"philadelphiaarea.museum\0" +"osen.no\0" +"net.ht\0net.id\0" +"fundacio.museum\0" +"j\xc3\xb8rpeland.no\0" +"\xe6\x95\x99\xe8\x82\xb2.hk\0" +"divtasvuodna.no\0" +"student.aero\0sch.gg\0net.im\0" +"\xe7\xbd\x91\xe7\xbb\x9c.cn\0net.in\0" +"net.iq\0" +"net.ir\0" +"net.is\0" +"net.je\0" +"kepno.pl\0lapy.pl\0" +"per.nf\0" +"gov\0*.shimane.jp\0" +"artcenter.museum\0" +"k\xc3\xa5""fjord.no\0" +"net.jo\0" +"eu.int\0" +"c.se\0" +"net.kg\0" +"ce.it\0net.ki\0" +"sch.id\0os.hedmark.no\0" +"columbus.museum\0" +"arteducation.museum\0" +"net.kn\0" +"kr.com\0" +"net.la\0bushey.museum\0cc.gu.us\0" +"net.lb\0" +"net.lc\0" +"gs.bu.no\0" +"e164.arpa\0" +"chieti.it\0labour.museum\0" +"sch.ir\0creation.museum\0krodsherad.no\0" +"net.ky\0" +"net.kz\0me.us\0" +"e.bg\0sch.je\0net.lk\0" +"zlg.br\0suwalki.pl\0" +"\xe5\x80\x8b\xe4\xba\xba.hk\0net.ma\0" +"net.lr\0" +"sch.jo\0notaires.km\0net.me\0" +"net.lv\0karate.museum\0" +"net.ly\0karm\xc3\xb8y.no\0" +"rg.it\0" +"net.mk\0" +"net.ml\0evenes.no\0" +"ngo.lk\0net.mo\0egyptian.museum\0" +"marine.ru\0" +"realestate.pl\0" +"net.mu\0" +"net.mv\0net.nf\0" +"net.mw\0net.ng\0gda.pl\0" +"net.mx\0" +"freemasonry.museum\0net.my\0enebakk.no\0" +"karlsoy.no\0" +"\xe7\xbd\x91\xe7\xbb\x9c.hk\0\xc3\xb8rskog.no\0" +"randaberg.no\0" +"club.aero\0" +"certification.aero\0sr.it\0" +"center.museum\0so.gov.pl\0" +"caa.aero\0" +"sch.lk\0tvedestrand.no\0" +"net.nr\0" +"luroy.no\0" +"aukra.no\0s\xc3\xa1lat.no\0lib.me.us\0" +"ddr.museum\0" +"york.museum\0stryn.no\0k12.nm.us\0" +"per.sg\0" +"judaica.museum\0" +"verona.it\0" +"agdenes.no\0" +"cng.br\0sch.ly\0" +"net.pa\0" +"author.aero\0" +"naturalhistory.museum\0steiermark.museum\0bu.no\0" +"sn\xc3\xa5sa.no\0net.pe\0" +"net.ph\0" +"savannahga.museum\0batsfjord.no\0lib.oh.us\0" +"net.pk\0" +"net.pl\0" +"net.pn\0" +"washingtondc.museum\0" +"net.pr\0" +"net.ps\0" +"net.pt\0" +"nordkapp.no\0" +"emergency.aero\0krokstadelva.no\0" +"satx.museum\0ngo.ph\0omsk.ru\0" +"texas.museum\0" +"ngo.pl\0" +"mantova.it\0gu.us\0" +"!pref.shiga.jp\0isa.us\0" +"usa.museum\0" +"gb.net\0k12.vi\0" +"iveland.no\0" +"tempio-olbia.it\0" +"net.sa\0" +"net.sb\0" +"works.aero\0net.sc\0komvux.se\0" +"net.sd\0" +"net.ru\0" +"0.bg\0" +"forlicesena.it\0net.rw\0net.sg\0" +"klodzko.pl\0" +"detroit.museum\0wegrow.pl\0" +"net.sl\0" +"glogow.pl\0" +"store.bb\0air.museum\0" +"net.so\0" +"katowice.pl\0" +"nsk.ru\0" +"pisa.it\0eid.no\0" +"net.st\0" +"film.hu\0" +"tuva.ru\0d.se\0" +"net.th\0" +"net.sy\0" +"viterbo.it\0tsaritsyn.ru\0perso.sn\0net.tj\0" +"lib.gu.us\0" +"plc.co.im\0sec.ps\0" +"r\xc3\xa1hkker\xc3\xa1vju.no\0kazimierz-dolny.pl\0net.tn\0" +"net.to\0" +"veterinaire.km\0" +"net.ua\0" +"info.ht\0net.tt\0" +"info.hu\0" +"exchange.aero\0" +"sch.sa\0net.tw\0" +"andriatranibarletta.it\0perso.tn\0" +"f.bg\0malselv.no\0" +"net.vc\0" +"trana.no\0" +"ns.ca\0" +"net.vi\0" +"lucca.it\0oristano.it\0" +"usarts.museum\0net.vn\0" +"gon.pk\0" +"pl.ua\0" +"eastcoast.museum\0" +"novara.it\0" +"k12.ks.us\0" +"dp.ua\0" +"nesseby.no\0" +"!pref.wakayama.jp\0" +"repbody.aero\0" +"jamison.museum\0lugansk.ua\0" +"ss.it\0" +"alessandria.it\0" +"hadsel.no\0net.ws\0" +"\xe0\xae\x9a\xe0\xae\xbf\xe0\xae\x99\xe0\xaf\x8d\xe0\xae\x95\xe0\xae\xaa\xe0\xaf\x8d\xe0\xae\xaa\xe0\xaf\x82\xe0\xae\xb0\xe0\xaf\x8d\0" +"veterinaire.fr\0leirfjord.no\0" +"massacarrara.it\0north.museum\0" +"project.museum\0" +"other.nf\0" +"k12.nh.us\0" +"mat.br\0artgallery.museum\0" +"sr.gov.pl\0" +"gamvik.no\0" +"info.ec\0lancashire.museum\0" +"fm.br\0ltd.co.im\0" +"americana.museum\0southwest.museum\0cc.ak.us\0" +"enna.it\0lunner.no\0" +"v\xc3\xa5gan.no\0" +"mari.ru\0" +"accident-investigation.aero\0" +"sor-aurdal.no\0lib.ny.us\0" +"novosibirsk.ru\0" +"bjugn.no\0" +"n\xc3\xa6r\xc3\xb8y.no\0ostrowwlkp.pl\0" +"info.bb\0foundation.museum\0" +"brand.se\0" +"info.at\0!pref.akita.jp\0l\xc3\xb8ten.no\0" +"coal.museum\0miners.museum\0" +"glass.museum\0" +"info.az\0" +"frog.museum\0szczytno.pl\0nov.ru\0" +"sunndal.no\0" +"gen.in\0" +"gx.cn\0" +"web.co\0*.mie.jp\0hobol.no\0\xe5\x8f\xb0\xe6\xb9\xbe\0" +"logistics.aero\0plo.ps\0" +"erotika.hu\0" +"torsken.no\0" +"exeter.museum\0" +"info.co\0" +"selje.no\0" +"storfjord.no\0" +"barum.no\0lind\xc3\xa5s.no\0" +"leasing.aero\0" +"championship.aero\0fst.br\0" +"lierne.no\0" +"!gobiernoelectronico.ar\0""1.bg\0" +"corporation.museum\0" +"al.it\0*.miyagi.jp\0" +"*.aomori.jp\0" +"\xd8\xa7\xd9\x84\xd8\xa7\xd8\xb1\xd8\xaf\xd9\x86\0" +"amursk.ru\0" +"vestvagoy.no\0" +"\xd8\xa7\xdb\x8c\xd8\xb1\xd8\xa7\xd9\x86.ir\0cc.fl.us\0" +"os.hordaland.no\0" +"pistoia.it\0" +"tver.ru\0e.se\0" +"res.in\0*.yamagata.jp\0syzran.ru\0" +"capebreton.museum\0sandnessj\xc3\xb8""en.no\0" +"ternopil.ua\0" +"shop.pl\0" +"tank.museum\0" +"m\xc3\xa5s\xc3\xb8y.no\0" +"potenza.it\0time.museum\0" +"mjondalen.no\0" +"eng.br\0nedre-eiker.no\0" +"air-surveillance.aero\0" +"nt.au\0am.br\0pn.it\0" +"oystre-slidre.no\0ug.gov.pl\0" +"g.bg\0nesodden.no\0vologda.ru\0" +"parma.it\0tula.ru\0" +"*.nara.jp\0ak.us\0" +"nt.ca\0konin.pl\0" +"kiev.ua\0" +"skierv\xc3\xa1.no\0vestre-toten.no\0" +"ri.it\0botanical.museum\0farsund.no\0veg\xc3\xa5rshei.no\0dagestan.ru\0" +"ind.br\0k-uralsk.ru\0" +"rahkkeravju.no\0cmw.ru\0" +"canada.museum\0" +"fm.it\0" +"cc.wi.us\0" +"web.id\0aver\xc3\xb8y.no\0" +"dudinka.ru\0" +"baghdad.museum\0fitjar.no\0grane.no\0" +"gs.fm.no\0" +"sumy.ua\0" +"al.no\0" +"westfalen.museum\0" +"oregon.museum\0" +"bruxelles.museum\0elk.pl\0" +"planetarium.museum\0sn\xc3\xa5""ase.no\0" +"s\xc3\xb8rreisa.no\0" +"gs.st.no\0skien.no\0" +"bible.museum\0ivanovo.ru\0" +"avellino.it\0" +"tgory.pl\0" +"family.museum\0" +"ppg.br\0k12.as.us\0" +"trader.aero\0gorlice.pl\0" +"cc.al.us\0" +"ogliastra.it\0" +"is.it\0lib.nv.us\0" +"dr.na\0" +"media.hu\0nesna.no\0fl.us\0" +"uri.arpa\0" +"bjerkreim.no\0" +"charter.aero\0" +"genova.it\0" +"it.ao\0botany.museum\0hapmir.no\0" +"educational.museum\0" +"helsinki.museum\0" +"memorial.museum\0" +"web.lk\0pharmacy.museum\0" +"aircraft.aero\0appspot.com\0" +"ferrara.it\0beskidy.pl\0" +"hi.cn\0" +"taxi.aero\0flekkefjord.no\0" +"varoy.no\0" +"ragusa.it\0ambulance.museum\0" +"can.museum\0" +"*.osaka.jp\0isleofman.museum\0fm.no\0warmia.pl\0" +"educator.aero\0asmatart.museum\0" +"mi.it\0" +"kutno.pl\0" +"skedsmokorset.no\0" +"2.bg\0" +"*.kagoshima.jp\0km.ua\0" +"!city.sendai.jp\0" +"web.nf\0st.no\0cc.ri.us\0" +"reggiocalabria.it\0" +"wi.us\0" +"ancona.it\0newjersey.museum\0nnov.ru\0" +"f.se\0" +"ind.in\0" +"info.vn\0" +"andoy.no\0" +"ch.it\0fredrikstad.no\0guovdageaidnu.no\0" +"fjaler.no\0" +"sa.com\0" +"gs.nt.no\0" +"masfjorden.no\0" +"pordenone.it\0" +"po.it\0basel.museum\0" +"chambagri.fr\0" +"h.bg\0web.pk\0" +"london.museum\0" +"sciencecenter.museum\0\xe0\xb9\x84\xe0\xb8\x97\xe0\xb8\xa2\0" +"unbi.ba\0augustow.pl\0" +"wolomin.pl\0" +"notaires.fr\0tcm.museum\0al.us\0" +"nu.ca\0!pref.nagano.jp\0" +"info.tn\0" +"lib.wa.us\0" +"ed.ao\0info.tt\0" +"barreau.bj\0" +"k12.wy.us\0" +"pp.az\0gop.pk\0" +"int\0" +"l\xc3\xb8renskog.no\0podhale.pl\0" +"voagat.no\0" +"telekommunikation.museum\0" +"qld.au\0" +"te.it\0freiburg.museum\0snasa.no\0" +"gjemnes.no\0" +"sejny.pl\0" +"media.pl\0" +"skjak.no\0" +"watchandclock.museum\0" +"ed.ci\0pacific.museum\0" +"theater.museum\0info.ro\0" +"uk.com\0" +"campobasso.it\0aquarium.museum\0tysv\xc3\xa6r.no\0" +"kragero.no\0" +"windmill.museum\0info.sd\0" +"sologne.museum\0sande.m\xc3\xb8re-og-romsdal.no\0" +"nt.no\0cc.mi.us\0" +"ed.cr\0" +"academy.museum\0zachpomor.pl\0" +"tananger.no\0v\xc3\xa1rgg\xc3\xa1t.no\0ri.us\0" +"federation.aero\0" +"web.tj\0" +"matta-varjjat.no\0" +"steigen.no\0" +"local\0akrehamn.no\0" +"!pref.chiba.jp\0info.pk\0" +"info.pl\0""6bone.pl\0" +"klepp.no\0kherson.ua\0" +"ketrzyn.pl\0info.pr\0" +"sweden.museum\0" +"lardal.no\0" +"!retina.ar\0gz.cn\0" +"barletta-trani-andria.it\0vikna.no\0" +"bearalv\xc3\xa1hki.no\0" +"broker.aero\0gov.nc.tr\0" +"info.na\0k12.fl.us\0" +"hembygdsforbund.museum\0" +"entertainment.aero\0jerusalem.museum\0l\xc3\xa6rdal.no\0" +"hitra.no\0sogndal.no\0" +"farmequipment.museum\0info.mv\0info.nf\0\xc3\xa5lg\xc3\xa5rd.no\0" +"la-spezia.it\0" +"skanland.no\0fam.pk\0" +"skole.museum\0" +"art.museum\0" +"presidio.museum\0" +"3.bg\0public.museum\0" +"h\xc3\xb8yanger.no\0zagan.pl\0" +"an.it\0" +"philadelphia.museum\0info.nr\0" +"pesarourbino.it\0g\xc3\xa1ivuotna.no\0" +"poltava.ua\0" +"nt.ro\0" +"station.museum\0" +"mi.th\0" +"altoadige.it\0" +"nu.it\0" +"usculture.museum\0g.se\0" +"h\xc3\xa1mm\xc3\xa1rfeasta.no\0" +"daegu.kr\0info.la\0" +"dovre.no\0" +"ci.it\0horology.museum\0" +"bergbau.museum\0" +"press.museum\0" +"gangwon.kr\0" +"!city.kitakyushu.jp\0sor-varanger.no\0cc.hi.us\0" +"fuossko.no\0" +"zp.ua\0" +"american.museum\0" +"fl\xc3\xa5.no\0mi.us\0" +"i.bg\0" +"od.ua\0" +"encyclopedic.museum\0" +"ind.tn\0" +"midatlantic.museum\0" +"newyork.museum\0" +"castres.museum\0" +"act.edu.au\0" +"topology.museum\0" +"ed.jp\0" +"of.by\0" +"iris.arpa\0inf.br\0askim.no\0pyatigorsk.ru\0" +"nord-fron.no\0nsn.us\0" +"beardu.no\0" +"agrar.hu\0corvette.museum\0chtr.k12.ma.us\0" +"figueres.museum\0" +"!pref.gunma.jp\0medizinhistorisches.museum\0" +"tjeldsund.no\0" +"nebraska.museum\0" +"bellevue.museum\0" +"abo.pa\0k12.al.us\0" +"info.ki\0" +"inf.cu\0sv.it\0" +"jfk.museum\0" +"!city.osaka.jp\0swinoujscie.pl\0" +"bydgoszcz.pl\0" +"!city.kyoto.jp\0" +"uvic.museum\0" +"madrid.museum\0steinkjer.no\0" +"lib.ma.us\0" +"sirdal.no\0" +"n\xc3\xb8tter\xc3\xb8y.no\0" +"taranto.it\0starnberg.museum\0" +"vic.gov.au\0pvt.ge\0pors\xc3\xa1\xc5\x8bgu.no\0" +"naroy.no\0ris\xc3\xb8r.no\0" +"va.it\0salem.museum\0starachowice.pl\0" +"!nawrastelecom.om\0" +"town.museum\0te.ua\0" +"se.net\0" +"kemerovo.ru\0" +"lerdal.no\0" +"gs.va.no\0" +"kms.ru\0" +"consulado.st\0" +"haram.no\0" +"tysnes.no\0" +"!pref.ibaraki.jp\0hamburg.museum\0" +"\xc3\xa5rdal.no\0" +"airline.aero\0" +"crew.aero\0newhampshire.museum\0" +"muenster.museum\0" +"aerodrome.aero\0" +"heroy.nordland.no\0belau.pw\0" +"kamchatka.ru\0" +"b\xc3\xa5""d\xc3\xa5""ddj\xc3\xa5.no\0lillehammer.no\0hi.us\0" +"hk.cn\0" +"!city.kobe.jp\0berlevag.no\0" +"ardal.no\0" +"askoy.no\0" +"vardo.no\0" +"fyresdal.no\0" +"sassari.it\0" +"video.hu\0drammen.no\0" +"lyngen.no\0nakhodka.ru\0" +"ip6.arpa\0games.hu\0" +"online.museum\0" +"k12.sd.us\0" +"4.bg\0sebastopol.ua\0" +"ao.it\0atlanta.museum\0" +"lebork.pl\0" +"ravenna.it\0" +"railway.museum\0songdalen.no\0" +"!pref.shimane.jp\0delaware.museum\0ed.pw\0" +"f\xc3\xb8rde.no\0" +"living.museum\0" +"juif.museum\0" +"lomza.pl\0" +"h.se\0" +"!bl.uk\0" +"portland.museum\0\xe7\xb5\x84\xe7\xb9\x94.tw\0" +"stj\xc3\xb8rdal.no\0" +"lecce.it\0" +"bz.it\0" +"farmstead.museum\0va.no\0" +"express.aero\0!nacion.ar\0" +"presse.km\0gs.of.no\0" +"\xe5\x8f\xb0\xe7\x81\xa3\0" +"og.ao\0gyeongbuk.kr\0vestv\xc3\xa5g\xc3\xb8y.no\0" +"prd.fr\0" +"pp.ru\0pp.se\0" +"forum.hu\0!pref.saga.jp\0" +"kvalsund.no\0" +"!city.kawasaki.jp\0n\xc3\xa5\xc3\xa5mesjevuemie.no\0" +"j.bg\0" +"vlaanderen.museum\0" +"cc.va.us\0" +"\xd8\xa7\xd9\x8a\xd8\xb1\xd8\xa7\xd9\x86.ir\0alabama.museum\0" +"school.museum\0her\xc3\xb8y.m\xc3\xb8re-og-romsdal.no\0" +"\xc3\xa5seral.no\0" +"traniandriabarletta.it\0" +"flog.br\0" +"presse.ml\0" +"k\xc3\xa1r\xc3\xa1\xc5\xa1johka.no\0" +"historisch.museum\0" +"farm.museum\0palmsprings.museum\0oslo.no\0dyroy.no\0stranda.no\0" +"gs.rl.no\0r\xc3\xa5""de.no\0" +"bomlo.no\0s\xc3\xb8rum.no\0" +"jan-mayen.no\0ivgu.no\0" +"coop\0" +"agr.br\0k12.ak.us\0" +"!nic.ar\0catanzaro.it\0fusa.no\0" +"hu.com\0" +"inf.mk\0" +"vet.br\0" +"k12.mt.us\0k12.nd.us\0" +"vlog.br\0\xe5\x85\xac\xe5\x8f\xb8.cn\0sandnessjoen.no\0" +"lib.az.us\0" +"nsw.edu.au\0of.no\0\xc3\xb8stre-toten.no\0" +"*.okinawa.jp\0" +"vb.it\0" +"asso.fr\0firenze.it\0" +"trieste.it\0" +"\xe5\x85\xac\xe5\x8f\xb8.hk\0" +"museet.museum\0" +"prd.km\0" +"navuotna.no\0lib.ca.us\0" +"cc.nv.us\0" +"asso.gp\0" +"meraker.no\0" +"h\xc3\xa1pmir.no\0" +"i.ph\0" +"sx.cn\0jeonnam.kr\0" +"halden.no\0" +"fed.us\0" +"medio-campidano.it\0tsk.ru\0" +"barcelona.museum\0" +"giessen.museum\0roma.museum\0" +"hl.cn\0" +"\xe0\xae\x87\xe0\xae\xb2\xe0\xae\x99\xe0\xaf\x8d\xe0\xae\x95\xe0\xaf\x88\0" +"biz.bb\0benevento.it\0rl.no\0bygland.no\0" +"port.fr\0asso.ht\0prd.mg\0" +"biz.at\0" +"tra.kp\0" +"*.aichi.jp\0khabarovsk.ru\0" +"campidano-medio.it\0" +"biz.az\0" +"newmexico.museum\0va.us\0" +"finearts.museum\0" +"murmansk.ru\0" +"\xc3\xb8rsta.no\0radom.pl\0k12.sc.us\0" +"5.bg\0kvinesdal.no\0" +"ap.it\0" +"*.fukushima.jp\0" +"asso.bj\0" +"mad.museum\0" +"lebesby.no\0" +"og.it\0glas.museum\0sauda.no\0" +"i.se\0" +"k12.tx.us\0" +"asso.ci\0mk.ua\0" +"cesena-forli.it\0" +"lowicz.pl\0" +"k12.id.us\0" +"tas.gov.au\0" +"lukow.pl\0" +"utazas.hu\0" +"maritimo.museum\0bjark\xc3\xb8y.no\0" +"adm.br\0" +"pr.it\0lib.vi.us\0" +"bergamo.it\0k12.va.us\0" +"k.bg\0" +"railroad.museum\0" +"!british-library.uk\0" +"cincinnati.museum\0" +"sorreisa.no\0" +"asso.dz\0!nel.uk\0" +"rm.it\0" +"nv.us\0" +"nx.cn\0gos.pk\0" +"vic.edu.au\0" +"biella.it\0tjome.no\0" +"r\xc3\xb8yken.no\0" +"beiarn.no\0" +"qc.ca\0" +"georgia.museum\0square.museum\0" +"labor.museum\0omasvuotna.no\0cc.la.us\0" +"br.com\0reggioemilia.it\0" +"kristiansund.no\0" +"sorum.no\0" +"orsta.no\0" +"furniture.museum\0surrey.museum\0eng.pro\0" +"asn.lv\0balat.no\0" +"lavangen.no\0sld.pa\0" +"fla.no\0k12.ms.us\0k12.nc.us\0" +"bardu.no\0" +"donostia.museum\0" +"club.tw\0" +"elburg.museum\0" +"gs.hl.no\0lodingen.no\0" +"samara.ru\0" +"vc.it\0*.nagasaki.jp\0" +"fosnes.no\0" +"fuel.aero\0" +"qc.com\0" +"skjervoy.no\0" +"bill.museum\0kv\xc3\xa6""fjord.no\0" +"skydiving.aero\0*.tokushima.jp\0" +"!congresodelalengua3.ar\0laquila.it\0k12.ct.us\0" +"gorge.museum\0linz.museum\0sherbrooke.museum\0" +"tranoy.no\0ing.pa\0" +"ptz.ru\0" +"kr.it\0prato.it\0stat.no\0" +"\xd0\xb8\xd0\xba\xd0\xbe\xd0\xbc.museum\0" +"cosenza.it\0" +"stj\xc3\xb8rdalshalsen.no\0" +"finland.museum\0leka.no\0cc.pr.us\0" +"historichouses.museum\0s\xc3\xa1l\xc3\xa1t.no\0" +"venice.it\0" +"biz.ki\0" +"g\xc3\xa1ls\xc3\xa1.no\0" +"\xe7\xbb\x84\xe7\xbb\x87.hk\0" +"*.yamanashi.jp\0" +"rad\xc3\xb8y.no\0" +"6.bg\0" +"fareast.ru\0" +"paragliding.aero\0ba.it\0aq.it\0" +"sk\xc3\xa5nland.no\0" +"its.me\0" +"us.na\0" +"hl.no\0cc.ga.us\0" +"ac\0granvin.no\0" +"ad\0qld.edu.au\0!city.sapporo.jp\0" +"ae\0" +"af\0" +"ag\0crotone.it\0" +"dallas.museum\0" +"ai\0brussels.museum\0" +"dali.museum\0" +"la.us\0" +"al\0salzburg.museum\0" +"am\0" +"an\0cl.it\0" +"ao\0" +"aq\0ba\0" +"bb\0" +"as\0lajolla.museum\0" +"at\0" +"be\0" +"bf\0inderoy.no\0snz.ru\0" +"aw\0bg\0" +"ax\0bh\0cim.br\0ltd.gi\0biz.mv\0" +"bi\0xz.cn\0\xe7\xb5\x84\xe7\xb9\x94.hk\0biz.mw\0" +"az\0bj\0" +"bm\0tranibarlettaandria.it\0naamesjevuemie.no\0" +"chattanooga.museum\0" +"bo\0" +"l.bg\0" +"ca\0" +"br\0stateofdelaware.museum\0" +"bs\0cc\0" +"cd\0biz.nr\0" +"cf\0berlev\xc3\xa5g.no\0" +"bw\0cg\0snaase.no\0" +"ch\0harvestcelebration.museum\0ck.ua\0" +"by\0ci\0" +"bz\0bahccavuotna.no\0" +"cl\0yuzhno-sakhalinsk.ru\0" +"cm\0halsa.no\0lyngdal.no\0" +"cn\0" +"co\0rn.it\0childrens.museum\0frankfurt.museum\0" +"cr\0" +"pskov.ru\0" +"cu\0de\0" +"cv\0fr.it\0lib.ky.us\0" +"aseral.no\0kvam.no\0" +"cx\0hellas.museum\0" +"hof.no\0" +"cz\0dj\0k12.la.us\0" +"dk\0moscow.museum\0" +"sosnowiec.pl\0" +"dm\0biz.pk\0" +"schokoladen.museum\0biz.pl\0" +"far.br\0arna.no\0tynset.no\0" +"even\xc3\xa1\xc5\xa1\xc5\xa1i.no\0" +"ec\0" +"biz.pr\0" +"ee\0celtic.museum\0" +"scientist.aero\0modern.museum\0" +"pr.us\0" +"dz\0" +"mj\xc3\xb8ndalen.no\0s\xc3\xb8r-odal.no\0" +"!nic.tr\0" +"conference.aero\0vestnes.no\0k12.mn.us\0" +"!pref.hiroshima.jp\0" +"es\0trapani.it\0" +"fermo.it\0vard\xc3\xb8.no\0" +"eu\0gs.hm.no\0r\xc3\xb8""d\xc3\xb8y.no\0stordal.no\0" +"gc.ca\0!nhs.uk\0" +"jgora.pl\0" +"fi\0stjordal.no\0" +"fm\0!mediaphone.om\0" +"kirov.ru\0pvt.k12.ma.us\0" +"fo\0" +"ga\0hyllestad.no\0" +"gov.ac\0fr\0andriabarlettatrani.it\0ga.us\0" +"gov.ae\0gd\0estate.museum\0" +"gov.af\0ge\0tolga.no\0" +"gf\0asso.re\0cc.oh.us\0" +"gg\0florida.museum\0" +"presse.ci\0gh\0" +"gi\0k12.dc.us\0" +"ltd.lk\0orland.no\0" +"gov.al\0" +"gl\0tokke.no\0" +"hanggliding.aero\0gm\0" +"hareid.no\0" +"gov.ba\0tj.cn\0gp\0" +"gov.bb\0gq\0" +"gov.as\0gr\0agrigento.it\0lc.it\0" +"gs\0kalmykia.ru\0aero.tt\0" +"gov.bf\0" +"county.museum\0" +"gov.bh\0hn.cn\0gw\0" +"gov.az\0gy\0assn.lk\0guernsey.museum\0" +"hk\0" +"gov.bm\0h\xc3\xa6gebostad.no\0biz.tj\0" +"hm\0computer.museum\0" +"gov.bo\0hn\0kl\xc3\xa6""bu.no\0" +"pulawy.pl\0" +"gov.br\0" +"trd.br\0gov.bs\0hr\0reggio-calabria.it\0historyofscience.museum\0lipetsk.ru\0" +"gov.cd\0*.nagoya.jp\0" +"ht\0id\0spjelkavik.no\0" +"hu\0ie\0aero.mv\0" +"marketplace.aero\0mn.it\0biz.tt\0" +"gov.by\0saintlouis.museum\0mer\xc3\xa5ker.no\0" +"gov.bz\0" +"7.bg\0gov.cl\0virtual.museum\0" +"gov.cm\0vennesla.no\0kr.ua\0" +"gov.cn\0im\0ar.it\0galsa.no\0rovno.ua\0" +"gov.co\0in\0" +"io\0limanowa.pl\0" +"iq\0k12.ga.us\0" +"ir\0" +"riik.ee\0is\0\xc3\xa1laheadju.no\0" +"gov.cu\0it\0hawaii.museum\0seaport.museum\0" +"je\0pubol.museum\0hm.no\0" +"gov.cx\0" +"*.chiba.jp\0" +"*.kawasaki.jp\0" +"k.se\0" +"gov.dm\0" +"aland.fi\0vik.no\0" +"yk.ca\0jo\0kobierzyce.pl\0" +"jp\0biz.vn\0" +"presse.fr\0lib.il.us\0\xe9\xa6\x99\xe6\xb8\xaf\0" +"gov.ec\0" +"transport.museum\0bronnoy.no\0" +"slg.br\0gov.ee\0asso.nc\0bievat.no\0" +"nyny.museum\0" +"kg\0" +"mo-i-rana.no\0" +"gov.dz\0ki\0" +"monmouth.museum\0" +"suldal.no\0" +"bc.ca\0km\0zt.ua\0" +"pt.it\0kn\0" +"fineart.museum\0" +"la\0" +"kr\0gulen.no\0" +"m.bg\0mo.cn\0lc\0alaheadju.no\0g\xc3\xa1\xc5\x8bgaviika.no\0" +"nowaruda.pl\0cc.ut.us\0" +"br\xc3\xb8nn\xc3\xb8y.no\0" +"ky\0li\0overhalla.no\0" +"kz\0khv.ru\0" +"lk\0" +"artdeco.museum\0" +"ma\0fortworth.museum\0kostroma.ru\0" +"ro.it\0kirkenes.no\0vestby.no\0" +"urbino-pesaro.it\0ls\0mc\0alstahaug.no\0" +"blog.br\0gov.ge\0lt\0md\0" +"lu\0me\0botanicgarden.museum\0" +"gov.gg\0lv\0oh.us\0" +"gov.gh\0mg\0valley.museum\0" +"gov.gi\0mh\0" +"ly\0sandiego.museum\0" +"mk\0" +"ml\0" +"gov.gn\0rollag.no\0naklo.pl\0" +"mn\0" +"mo\0" +"mp\0leirvik.no\0" +"gov.gr\0mq\0na\0cc.ks.us\0" +"mr\0" +"ms\0nc\0" +"valer.hedmark.no\0" +"mu\0ne\0" +"mv\0nf\0" +"mw\0" +"mx\0nord-odal.no\0jur.pro\0" +"my\0" +"gov.hk\0name.hr\0" +"nl\0" +"astronomy.museum\0lib.nm.us\0" +"catania.it\0" +"no\0" +"skjerv\xc3\xb8y.no\0" +"k12.ne.us\0" +"monza-e-della-brianza.it\0!pref.fukushima.jp\0nr\0" +"gov.ie\0" +"stuttgart.museum\0nu\0cc.mn.us\0" +"karasjohka.no\0" +"engine.aero\0bearalvahki.no\0" +"oyer.no\0" +"ve.it\0" +"gov.im\0froland.no\0cc.ar.us\0" +"gov.in\0magadan.ru\0" +"pescara.it\0" +"gov.iq\0usdecorativearts.museum\0" +"gov.ir\0pa\0" +"gov.is\0" +"gov.it\0lavagis.no\0" +"gov.je\0" +"naustdal.no\0pe\0k12.or.us\0" +"gd.cn\0carraramassa.it\0pf\0" +"ph\0" +"cc.ny.us\0" +"rissa.no\0" +"info\0pk\0pomorze.pl\0" +"pl\0" +"gov.jo\0asso.km\0pn\0" +"*.okayama.jp\0cieszyn.pl\0" +"freight.aero\0" +"pr\0" +"narvik.no\0ps\0" +"!pref.aichi.jp\0elverum.no\0pt\0" +"edunet.tn\0" +"gov.kg\0" +"flatanger.no\0marker.no\0pw\0" +"gov.ki\0nuremberg.museum\0" +"aip.ee\0" +"gov.km\0" +"gov.kn\0" +"gov.kp\0" +"rieti.it\0gov.la\0bajddar.no\0" +"gov.lb\0aviation.museum\0" +"gov.lc\0" +"asso.mc\0" +"re\0" +"ut.us\0" +"sa.gov.au\0gov.ky\0" +"mo.it\0gov.kz\0" +"gov.lk\0" +"iraq.museum\0" +"badajoz.museum\0" +"8.bg\0inder\xc3\xb8y.no\0" +"monticello.museum\0ro\0ks.ua\0" +"gov.ma\0svizzera.museum\0" +"gov.lr\0sa\0" +"matera.it\0sb\0" +"gov.lt\0rs\0sc\0" +"gov.me\0sd\0" +"gov.lv\0ru\0se\0" +"gov.mg\0" +"rw\0sg\0" +"gov.ly\0assisi.museum\0kids.museum\0sh\0" +"si\0" +"gov.mk\0" +"gov.ml\0sk\0" +"sl\0" +"gov.mn\0airguard.museum\0sm\0" +"gov.mo\0l.se\0sn\0" +"so\0" +"gov.mr\0ks.us\0" +"name.az\0sr\0" +"naturhistorisches.museum\0tc\0" +"trainer.aero\0cn.it\0urbinopesaro.it\0gov.mu\0nativeamerican.museum\0st\0td\0" +"gov.mv\0su\0" +"trentino.it\0gov.mw\0gov.ng\0tf\0" +"tg\0" +"co.ae\0venezia.it\0gov.my\0th\0" +"!pref.ehime.jp\0sy\0" +"co.ag\0lewismiller.museum\0ostrowiec.pl\0sz\0tj\0" +"tk\0" +"motorcycle.museum\0tl\0" +"birdart.museum\0trogstad.no\0tm\0" +"tn\0" +"humanities.museum\0to\0" +"pu.it\0gov.nr\0ua\0lib.ut.us\0" +"co.ao\0" +"co.ba\0trondheim.no\0tt\0" +"in-addr.arpa\0tempioolbia.it\0!city.yokohama.jp\0mn.us\0" +"n.bg\0schoenbrunn.museum\0tv\0" +"co.at\0aremark.no\0tw\0ug\0" +"jus.br\0" +"co.bi\0bialowieza.pl\0ar.us\0" +"audnedaln.no\0kustanai.ru\0" +"va\0" +"us\0vc\0" +"newport.museum\0" +"kopervik.no\0gov.ph\0vg\0" +"ny.us\0vi\0" +"co.bw\0finn\xc3\xb8y.no\0gov.pk\0uz\0" +"honefoss.no\0gov.pl\0lanbib.se\0" +"co.ci\0" +"gov.pn\0intl.tn\0" +"act.gov.au\0vn\0" +"television.museum\0gov.pr\0" +"sykkylven.no\0v\xc3\xa5ler.hedmark.no\0gov.ps\0" +"gov.pt\0" +"co.cr\0vu\0" +"legnica.pl\0" +"sa.au\0" +"bjarkoy.no\0" +"openair.museum\0birkenes.no\0lib.nj.us\0" +"fylkesbibl.no\0holt\xc3\xa5len.no\0" +"iz.hr\0" +"ws\0" +"oceanographique.museum\0" +"b\xc3\xa1id\xc3\xa1r.no\0cc.mo.us\0" +"\xc3\xb8ygarden.no\0" +"contemporary.museum\0" +"gb.com\0cc.as.us\0" +"belluno.it\0gov.sa\0" +"gov.sb\0" +"gov.rs\0gov.sc\0" +"gov.sd\0" +"!pref.nagasaki.jp\0gov.ru\0" +"asia\0" +"sa.cr\0gov.rw\0gov.sg\0" +"kuzbass.ru\0" +"gs.vf.no\0" +"gov.sl\0" +"norfolk.museum\0" +"k12.de.us\0" +"mil\0" +"rendalen.no\0" +"gov.st\0" +"agro.pl\0" +"orkdal.no\0" +"le.it\0gov.sy\0" +"gov.tj\0" +"co.gg\0nore-og-uvdal.no\0v\xc3\xa5ler.\xc3\xb8stfold.no\0" +"gov.tl\0" +"gov.tn\0" +"gov.to\0" +"kids.us\0" +"equipment.aero\0gov.ua\0" +"!city.niigata.jp\0gov.tt\0" +"sel.no\0" +"l\xc3\xa4ns.museum\0" +"gov.tw\0" +"rennebu.no\0" +"egersund.no\0" +"medecin.km\0" +"co.gy\0" +"!mecon.ar\0" +"berlin.museum\0" +"carrara-massa.it\0" +"9.bg\0" +"pri.ee\0gov.vc\0" +"at.it\0" +"muosat.no\0" +"co.id\0" +"co.hu\0" +"etne.no\0" +"\xc3\xa1lt\xc3\xa1.no\0" +"gov.vn\0" +"modelling.aero\0" +"co.im\0" +"co.in\0\xc3\xa5krehamn.no\0m.se\0" +"gouv.fr\0*.kitakyushu.jp\0" +"narviika.no\0" +"rennes\xc3\xb8y.no\0" +"co.ir\0afjord.no\0" +"lea\xc5\x8bgaviika.no\0buryatia.ru\0" +"co.it\0coastaldefence.museum\0" +"co.je\0vf.no\0" +"osteroy.no\0" +"uslivinghistory.museum\0" +"aerobatic.aero\0" +"mesaverde.museum\0mining.museum\0" +"a\xc3\xa9roport.ci\0gov.ws\0" +"co.jp\0copenhagen.museum\0" +"pv.it\0" +"r\xc3\xb8mskog.no\0" +"vossevangen.no\0porsanger.no\0" +"salat.no\0mo.us\0" +"o.bg\0imperia.it\0carrier.museum\0" +"carbonia-iglesias.it\0" +"as.us\0" +"alvdal.no\0" +"state.museum\0mandal.no\0cn.ua\0" +"cuneo.it\0" +"gouv.ht\0" +"!city.okayama.jp\0co.kr\0" +"co.lc\0" +"sa.it\0" +"donna.no\0" +"sortland.no\0" +"tomsk.ru\0" +"birthplace.museum\0l\xc3\xb8""dingen.no\0" +"ge.it\0orenburg.ru\0" +"cn.com\0" +"co.ma\0" +"co.ls\0skaun.no\0name.vn\0" +"navigation.aero\0" +"cagliari.it\0co.me\0portal.museum\0" +"gouv.bj\0" +"udine.it\0" +"engineer.aero\0" +"szczecin.pl\0" +"wales.museum\0" +"co.na\0bo.telemark.no\0" +"austin.museum\0" +"k12.mo.us\0" +"co.mu\0" +"gouv.ci\0" +"co.mw\0" +"esp.br\0" +"naturalhistorymuseum.museum\0" +"mosjoen.no\0" +"solund.no\0" +"name.tj\0" +"sand\xc3\xb8y.no\0" +"kunstunddesign.museum\0" +"cartoonart.museum\0collection.museum\0gsm.pl\0" +"aure.no\0" +"!pref.yamaguchi.jp\0historical.museum\0" +"name.tt\0" +"england.museum\0valle.no\0" +"cc.ok.us\0" +"salangen.no\0" +"gloppen.no\0" +"cc.co.us\0" +"contemporaryart.museum\0" +"tas.edu.au\0" +"trading.aero\0" +"mazury.pl\0" +"!pref.aomori.jp\0co.pl\0" +"opoczno.pl\0" +"*.kobe.jp\0co.pn\0" +"oppegard.no\0" +"co.pw\0" +"saltdal.no\0smolensk.ru\0" +"na.it\0\xc4\x8d\xc3\xa1hcesuolo.no\0" +"vgs.no\0evenassi.no\0" +"parachuting.aero\0jl.cn\0maritime.museum\0bd.se\0" +"badaddja.no\0" +"bergen.no\0" +"brussel.museum\0" +"avoues.fr\0" +"cesenaforli.it\0" +"oregontrail.museum\0" +"ullensaker.no\0" +"jobs\0" +"accident-prevention.aero\0" +"n.se\0" +"association.museum\0california.museum\0" +"cultural.museum\0co.rs\0" +"zoology.museum\0" +"pruszkow.pl\0" +"control.aero\0nt.edu.au\0net\0komforb.se\0" +"lincoln.museum\0aurland.no\0name.pr\0co.rw\0" +"ostroleka.pl\0" +"isernia.it\0" +"tm.fr\0" +"gs.ol.no\0" +"nb.ca\0marnardal.no\0" +"williamsburg.museum\0" +"!jet.uk\0" +"suisse.museum\0\xc3\xa5""fjord.no\0flakstad.no\0" +"karmoy.no\0" +"yn.cn\0chesapeakebay.museum\0" +"nsw.au\0" +"amur.ru\0co.st\0" +"imb.br\0siellak.no\0\xe7\xb6\xb2\xe8\xb7\xaf.tw\0" +"name.na\0" +"co.th\0" +"p.bg\0" +"co.sz\0co.tj\0" +"name.mv\0\xc3\xa5lesund.no\0lib.in.us\0" +"lucerne.museum\0naumburg.museum\0" +"society.museum\0name.my\0" +"tinn.no\0" +"co.tt\0" +"unj\xc3\xa1rga.no\0" +"co.ug\0" +"lib.wy.us\0" +"co.tz\0" +"ass.km\0" +"ok.us\0" +"tm.hu\0kongsvinger.no\0" +"ibestad.no\0" +"juedisches.museum\0co.us\0" +"cq.cn\0" +"rs.ba\0" +"wa.edu.au\0co.vi\0" +"co.uz\0" +"health.museum\0" +"grue.no\0" +"automotive.museum\0journalism.museum\0settlement.museum\0" +"qh.cn\0interactive.museum\0" +"snillfjord.no\0!national-library-scotland.uk\0" +"balsfjord.no\0lib.nh.us\0" +"kolobrzeg.pl\0" +"gs.tm.no\0" +"h\xc3\xb8nefoss.no\0" +"ol.no\0" +"music.museum\0moareke.no\0" +"b\xc3\xb8.nordland.no\0" +"name.mk\0lier.no\0" +"eidfjord.no\0" +"sc.cn\0tm.km\0" +"jelenia-gora.pl\0sanok.pl\0" +"intelligence.museum\0" +"srv.br\0elblag.pl\0" +"judygarland.museum\0" +"padua.it\0" +"k12.co.us\0" +"lindesnes.no\0" +"name.jo\0izhevsk.ru\0" +"yorkshire.museum\0mel\xc3\xb8y.no\0" +"tm.mc\0lib.pr.us\0" +"hjartdal.no\0" +"tm.mg\0" +"bari.it\0milano.it\0" +"lg.jp\0" +"zgrad.ru\0" +"sm\xc3\xb8la.no\0" +"communications.museum\0" +"arts.co\0seoul.kr\0engerdal.no\0" +"oster\xc3\xb8y.no\0" +"\xe6\x95\x8e\xe8\x82\xb2.hk\0foggia.it\0verran.no\0" +"orskog.no\0voronezh.ru\0kv.ua\0" +"av.it\0" +"tm.no\0nissedal.no\0" +"historisches.museum\0gs.mr.no\0" +"medecin.fr\0" +"montreal.museum\0" +"o.se\0" +"!metro.tokyo.jp\0sola.no\0" +"k12.tn.us\0" +"floro.no\0" +"milan.it\0*.shiga.jp\0" +"berkeley.museum\0" +"maintenance.aero\0" +"ws.na\0" +"lindas.no\0cc.ia.us\0" +"brescia.it\0embroidery.museum\0" +"arezzo.it\0tm.pl\0" +"r\xc3\xa6lingen.no\0" +"burghof.museum\0" +"rec.br\0" +"q.bg\0" +"!nawras.om\0" +"hammarfeasta.no\0" +"moss.no\0" +"on.ca\0" +"gouv.rw\0" +"luxembourg.museum\0" +"rec.co\0british.museum\0" +"reggio-emilia.it\0" +"gouv.sn\0lib.wv.us\0" +"avocat.fr\0" +"simbirsk.ru\0" +"jar.ru\0" +"monza-brianza.it\0" +"tm.ro\0" +"imageandsound.museum\0" +"jpn.com\0mr.no\0" +"siracusa.it\0" +"norilsk.ru\0tm.se\0" +"tn.it\0" +"jeju.kr\0" +"!pref.fukuoka.jp\0" +"*.hyogo.jp\0portlligat.museum\0" +"!pref.osaka.jp\0" +"siena.it\0sc.kr\0omaha.museum\0saskatchewan.museum\0" +"phoenix.museum\0vanylven.no\0" +"botanicalgarden.museum\0" +"turek.pl\0" +"vagsoy.no\0" +"riodejaneiro.museum\0" +"vi.it\0" +"uy.com\0" +"kristiansand.no\0" +"sd.cn\0trento.it\0" +"muncie.museum\0" +"berg.no\0meldal.no\0" +"nes.buskerud.no\0" +"saratov.ru\0" +"gs.oslo.no\0" +"harstad.no\0vaga.no\0" +"research.museum\0" +"brunel.museum\0ia.us\0" +"test.tj\0" +"columbia.museum\0" +"ms.it\0stockholm.museum\0" +"reklam.hu\0" +"pomorskie.pl\0lg.ua\0" +"bg.it\0historicalsociety.museum\0rns.tn\0" +"mallorca.museum\0surgut.ru\0cc.sc.us\0" +"ushistory.museum\0" +"palana.ru\0" +"snoasa.no\0" +"naturalsciences.museum\0" +"yaroslavl.ru\0" +"unjarga.no\0" +"p.se\0" +"ingatlan.hu\0" +"irc.pl\0" +"savona.it\0" +"cr.it\0" +"test.ru\0cc.tn.us\0" +"ms.kr\0museumvereniging.museum\0" +"time.no\0k12.ia.us\0" +"vladimir.ru\0" +"correios-e-telecomunica\xc3\xa7\xc3\xb5""es.museum\0" +"gouv.km\0nationalfirearms.museum\0" +"m\xc3\xa1latvuopmi.no\0" +"aero\0yosemite.museum\0" +"r.bg\0school.na\0" +"cc.vi.us\0" +"*.wakayama.jp\0" +"beauxarts.museum\0averoy.no\0ullensvang.no\0bar.pro\0" +"!city.hiroshima.jp\0" +"b\xc3\xa1hccavuotna.no\0" +"frosta.no\0" +"gdynia.pl\0" +"medical.museum\0" +"embaixada.st\0" +"balsan.it\0vantaa.museum\0" +"za.net\0" +"!city.saitama.jp\0lib.ks.us\0" +"fnd.br\0" +"ru.com\0se.com\0hol.no\0modalen.no\0" +"gouv.ml\0chukotka.ru\0" +"malopolska.pl\0" +"mansion.museum\0" +"iki.fi\0children.museum\0" +"cyber.museum\0rec.nf\0mo\xc3\xa5reke.no\0" +"to.it\0" +"hasvik.no\0" +"\xc3\xb8yer.no\0" +"arts.ro\0sc.ug\0" +"lib.ar.us\0" +"sc.tz\0cc.ms.us\0cc.nc.us\0" +"etc.br\0poznan.pl\0" +"cnt.br\0viking.museum\0" +"*.miyazaki.jp\0" +"melhus.no\0" +"skodje.no\0vevelstad.no\0" +"sc.us\0" +"upow.gov.pl\0" +"!city.fukuoka.jp\0brandywinevalley.museum\0natuurwetenschappen.museum\0tranby.no\0" +"bahn.museum\0msk.ru\0" +"delmenhorst.museum\0" +"russia.museum\0fuoisku.no\0" +"shell.museum\0" +"r\xc3\xa1isa.no\0" +"hs.kr\0udmurtia.ru\0" +"palermo.it\0" +"pilot.aero\0" +"tn.us\0" +"priv.hu\0" +"li.it\0" +"kr\xc3\xa5""anghke.no\0mosreg.ru\0" +"lib.fl.us\0" +"plants.museum\0" +"ulsan.kr\0national.museum\0" +"mil.ac\0!pref.nara.jp\0surgeonshall.museum\0" +"mil.ae\0santacruz.museum\0vi.us\0" +"wlocl.pl\0" +"mt.it\0napoli.it\0alaska.museum\0arts.nf\0" +"missoula.museum\0" +"rec.ro\0" +"mil.al\0" +"marburg.museum\0waw.pl\0" +"pharmaciens.km\0indianapolis.museum\0larsson.museum\0" +"cc.sd.us\0" +"mil.ba\0mobi\0" +"indianmarket.museum\0" +"recreation.aero\0padova.it\0" +"varese.it\0parti.se\0" +"mil.az\0" +"mil.bo\0!pref.kagoshima.jp\0khmelnitskiy.ua\0" +"rygge.no\0" +"os\xc3\xb8yro.no\0" +"mil.br\0" +"cs.it\0" +"austevoll.no\0fjell.no\0" +"mil.by\0" +"!pref.tokushima.jp\0org\0" +"mil.cn\0gs.svalbard.no\0" +"mil.co\0" +"pz.it\0lib.va.us\0\xd1\x80\xd1\x84\0" +"\xe4\xb8\xaa\xe4\xba\xba.hk\0ms.us\0nc.us\0k12.wi.us\0" +"s.bg\0drangedal.no\0" +"en.it\0" +"culturalcenter.museum\0" +"house.museum\0divttasvuotna.no\0" +"fhs.no\0" +"circus.museum\0" +"priv.at\0" +"mil.ec\0" +"ruovat.no\0" +"midsund.no\0vagan.no\0" +"casadelamoneda.museum\0" +"bristol.museum\0" +"and.museum\0" +"ascolipiceno.it\0computerhistory.museum\0vyatka.ru\0" +"uhren.museum\0" +"lahppi.no\0" +"*.yokohama.jp\0cody.museum\0lib.al.us\0" +"colonialwilliamsburg.museum\0indian.museum\0cc.ky.us\0" +"tp.it\0biev\xc3\xa1t.no\0" +"can.br\0royken.no\0" +"id.ir\0" +"mediocampidano.it\0tromso.no\0" +"kartuzy.pl\0k12.ok.us\0" +"*.saitama.jp\0stjohn.museum\0m\xc3\xa1tta-v\xc3\xa1rjjat.no\0" +"mil.ge\0trani-barletta-andria.it\0" +"lib.as.us\0" +"swiebodzin.pl\0cc.mt.us\0cc.nd.us\0" +"mil.gh\0" +"science-fiction.museum\0\xd9\x82\xd8\xb7\xd8\xb1\0" +"airtraffic.aero\0" +"konskowola.pl\0" +"scienceandhistory.museum\0nysa.pl\0sd.us\0" +"balestrand.no\0" +"oygarden.no\0" +"her\xc3\xb8y.nordland.no\0" +"!pref.ishikawa.jp\0strand.no\0" +"\xe7\xb5\x84\xe7\xbb\x87.hk\0mil.hn\0" +"gob.bo\0volda.no\0" +"losangeles.museum\0larvik.no\0" +"university.museum\0" +"cc.dc.us\0" +"mil.id\0" +"sorfold.no\0" +"watch-and-clock.museum\0" +"flor\xc3\xb8.no\0" +"nittedal.no\0oppeg\xc3\xa5rd.no\0" +"k12.ri.us\0" +"gob.cl\0" +"komi.ru\0" +"government.aero\0mil.in\0" +"mil.iq\0id.lv\0" +"culture.museum\0" +"id.ly\0" +"raholt.no\0" +"lubin.pl\0grozny.ru\0" +"kchr.ru\0" +"nikolaev.ua\0" +"lib.sd.us\0" +"de.com\0" +"mil.jo\0" +"*.kanagawa.jp\0gaular.no\0miasta.pl\0" +"bi.it\0rnu.tn\0uzhgorod.ua\0" +"idrett.no\0v\xc3\xa5gs\xc3\xb8y.no\0" +"wroclaw.pl\0" +"res.aero\0ne.jp\0mil.kg\0" +"\xc3\xa5mli.no\0" +"education.museum\0" +"dgca.aero\0" +"mil.km\0" +"trolley.museum\0" +"cci.fr\0r.se\0" +"archaeological.museum\0" +"monzaedellabrianza.it\0mil.kr\0" +"gob.es\0kvafjord.no\0ky.us\0" +"lecco.it\0" +"ct.it\0" +"magazine.aero\0" +"operaunite.com\0ne.kr\0" +"mil.kz\0skoczow.pl\0" +"nf.ca\0" +"western.museum\0" +"kunst.museum\0gaivuotna.no\0karpacz.pl\0spb.ru\0cc.id.us\0" +"slask.pl\0" +"youth.museum\0" +"adv.br\0campidanomedio.it\0!songfest.om\0" +"geelvinck.museum\0\xd8\xa7\xd9\x85\xd8\xa7\xd8\xb1\xd8\xa7\xd8\xaa\0" +"mil.lv\0" +"fie.ee\0mil.mg\0mt.us\0nd.us\0k12.vt.us\0" +"t.bg\0ushuaia.museum\0" +"off.ai\0" +"irkutsk.ru\0" +"stor-elvdal.no\0tourism.tn\0" +"penza.ru\0" +"bj.cn\0\xe4\xb8\xad\xe5\x9b\xbd\0" +"civilwar.museum\0mil.mv\0opole.pl\0" +"nes.akershus.no\0" +"mil.my\0karelia.ru\0" +"como.it\0sande.vestfold.no\0" +"\xe4\xb8\xad\xe5\x9c\x8b\0" +"gob.hn\0lib.la.us\0" +"mil.no\0cc.wv.us\0" +"boleslawiec.pl\0" +"!pref.niigata.jp\0gs.sf.no\0dc.us\0k12.mi.us\0" +"museum\0dep.no\0kv\xc3\xa6nangen.no\0l\xc3\xa1hppi.no\0" +"film.museum\0" +"frei.no\0" +"notodden.no\0risor.no\0" +"messina.it\0" +"eidsberg.no\0" +"krakow.pl\0lib.mt.us\0lib.nd.us\0" +"rauma.no\0" +"mulhouse.museum\0" +"sibenik.museum\0grong.no\0mil.pe\0" +"budejju.no\0k12.nv.us\0" +"stavanger.no\0mil.ph\0" +"forli-cesena.it\0" +"naples.it\0cc.ne.us\0" +"s\xc3\xb8r-aurdal.no\0" +"mil.pl\0" +"vibo-valentia.it\0ski.museum\0siedlce.pl\0" +"bus.museum\0" +"tozsde.hu\0" +"!pref.shizuoka.jp\0santabarbara.museum\0" +"zhitomir.ua\0" +"pro.az\0" +"ne.pw\0" +"pro.br\0orkanger.no\0b\xc3\xb8.telemark.no\0" +"roma.it\0cc.ct.us\0" +"heritage.museum\0giske.no\0" +"!pref.kumamoto.jp\0prof.pr\0" +"*.kochi.jp\0" +"andria-barletta-trani.it\0*.toyama.jp\0sveio.no\0" +"id.us\0" +"bolt.hu\0" +"fetsund.no\0porsgrunn.no\0" +"iglesias-carbonia.it\0" +"sf.no\0" +"mil.ru\0" +"from.hr\0asnes.no\0mil.rw\0" +"alesund.no\0sos.pl\0" +"livorno.it\0" +"crafts.museum\0" +"aquila.it\0" +"vega.no\0" +"jewelry.museum\0" +"sk\xc3\xa1nit.no\0chita.ru\0" +"pro.ec\0" +"fortmissoula.museum\0j\xc3\xb8lster.no\0" +"pro\0mil.st\0" +"busan.kr\0lib.ga.us\0" +"dellogliastra.it\0" +"aosta.it\0chungnam.kr\0gob.mx\0" +"mil.sy\0k12.hi.us\0" +"mil.tj\0" +"ulan-ude.ru\0mil.to\0wv.us\0" +"luster.no\0volgograd.ru\0" +"pa.it\0kommunalforbund.se\0lib.tx.us\0" +"s.se\0" +"qsl.br\0" +"mil.tw\0" +"est.pr\0ens.tn\0" +"lib.id.us\0" +"mil.tz\0" +"uscountryestate.museum\0" +"agents.aero\0" +"\xc3\xb8vre-eiker.no\0ne.ug\0" +"pb.ao\0" +"gob.pa\0ne.tz\0" +"tur.br\0" +"mil.vc\0" +"or.at\0gob.pe\0" +"s\xc3\xb8r-fron.no\0" +"or.bi\0ne.us\0" +"u.bg\0gob.pk\0" +"stavern.no\0" +"brindisi.it\0" +"aknoluokta.no\0" +"!pref.kyoto.jp\0tydal.no\0" +"plc.ly\0muos\xc3\xa1t.no\0" +"or.ci\0hamaroy.no\0priv.pl\0" +"vestre-slidre.no\0gniezno.pl\0" +"\xe7\xae\x87\xe4\xba\xba.hk\0" +"andebu.no\0" +"nieruchomosci.pl\0\xd8\xa7\xd9\x84\xd8\xb3\xd8\xb9\xd9\x88\xd8\xaf\xd9\x8a\xd8\xa9\0" +"or.cr\0pro.ht\0bolzano.it\0" +"ct.us\0k12.md.us\0" +"za.org\0" +"!icnet.uk\0" +"localhistory.museum\0" +"firm.ht\0" +"lel.br\0tr.it\0kvanangen.no\0" +"sondre-land.no\0t\xc3\xb8nsberg.no\0vefsn.no\0" +"nature.museum\0yamal.ru\0" +"rv.ua\0" +"lans.museum\0lib.ne.us\0" +"lur\xc3\xb8y.no\0" +"eu.com\0firm.in\0" +"hjelmeland.no\0" +"gs.tr.no\0" +"casino.hu\0essex.museum\0tourism.pl\0" +"rennesoy.no\0" +"priv.no\0" +"baths.museum\0mytis.ru\0" +"tingvoll.no\0" +"cc.az.us\0" +"sh.cn\0" +"!pref.miyazaki.jp\0s\xc3\xb8rfold.no\0" +"aurskog-holand.no\0malatvuopmi.no\0" +"lib.ct.us\0" +"cc.pa.us\0" +"pa.gov.pl\0" +"firm.co\0cc.de.us\0" +"nrw.museum\0" +"daejeon.kr\0livinghistory.museum\0" +"gildeskal.no\0lund.no\0" +"\xc3\xb8ksnes.no\0stavropol.ru\0" +"b\xc3\xa6rum.no\0r\xc3\xb8yrvik.no\0" +"osoyro.no\0" +"priv.me\0sula.no\0!parliament.uk\0" +"nationalheritage.museum\0" +"jaworzno.pl\0" +"dinosaur.museum\0" +"garden.museum\0trust.museum\0" +"turen.tn\0" +"kautokeino.no\0" +"pro.na\0" +"gorizia.it\0" +"siljan.no\0" +"or.id\0pro.mv\0" +"bieszczady.pl\0www.ro\0" +"lib.ee\0antiques.museum\0brasil.museum\0tr.no\0" +"aejrie.no\0" +"!pref.hokkaido.jp\0" +"schlesisches.museum\0" +"huissier-justice.fr\0or.it\0" +"t.se\0" +"environment.museum\0" +"vindafjord.no\0" +"edu.ac\0or.jp\0" +"tree.museum\0" +"groundhandling.aero\0edu.af\0" +"rochester.museum\0sanfrancisco.museum\0" +"ebiz.tw\0" +"kirovograd.ua\0" +"edu.al\0" +"edu.an\0\xc3\xa1k\xc5\x8boluokta.no\0v\xc3\xa5g\xc3\xa5.no\0" +"v.bg\0" +"edu.ba\0" +"edu.bb\0nesset.no\0" +"hornindal.no\0pro.pr\0" +"or.kr\0" +"az.us\0" +"edu.bh\0volkenkunde.museum\0" +"edu.bi\0" +"edu.az\0" +"b\xc3\xb8mlo.no\0" +"edu.bm\0" +"edu.bo\0tyumen.ru\0" +"edu.br\0" +"edu.bs\0pa.us\0" +"alto-adige.it\0whaling.museum\0" +"*.iwate.jp\0" +"edu.ci\0law.pro\0" +"edu.bz\0de.us\0" +"lib.ak.us\0" +"edu.cn\0" +"edu.co\0" +"laspezia.it\0" +"baidar.no\0" +"ts.it\0" +"or.na\0" +"edu.cu\0hotel.lk\0" +"show.aero\0or.mu\0" +"sandnes.no\0" +"museumcenter.museum\0" +"edu.dm\0kazan.ru\0" +"biz\0caltanissetta.it\0odessa.ua\0k12.oh.us\0" +"crimea.ua\0" +"research.aero\0lom.no\0" +"edu.ec\0florence.it\0clock.museum\0sshn.se\0" +"edu.ee\0game.tw\0" +"!pref.okinawa.jp\0" +"ilawa.pl\0" +"edu.dz\0indiana.museum\0" +"gs.jan-mayen.no\0" +"publ.pt\0" +"nom.ad\0" +"skanit.no\0gdansk.pl\0k12.pa.us\0" +"nom.ag\0edu.es\0" +"if.ua\0" +"pro.tt\0lib.de.us\0" +"environmentalconservation.museum\0cc.or.us\0" +"bern.museum\0nat.tn\0" +"rubtsovsk.ru\0" +"!educ.ar\0masoy.no\0" +"bologna.it\0" +"\xc3\xa5snes.no\0fhv.se\0" +"*.tottori.jp\0radoy.no\0" +"romskog.no\0" +"malbork.pl\0" +"olbiatempio.it\0" +"edu.ge\0" +"edu.gh\0" +"edu.gi\0" +"or.pw\0" +"hob\xc3\xb8l.no\0" +"nom.br\0edu.gn\0virginia.museum\0mbone.pl\0!nls.uk\0" +"seljord.no\0pro.vn\0" +"edu.gp\0" +"edu.gr\0" +"!uba.ar\0!pref.saitama.jp\0" +"greta.fr\0gs.aa.no\0kvinnherad.no\0" +"lib.sc.us\0" +"js.cn\0nom.co\0edu.hk\0" +"lesja.no\0" +"bl.it\0" +"edu.hn\0\xc3\xb8ystre-slidre.no\0mari-el.ru\0" +"hotel.hu\0" +"rindal.no\0" +"edu.ht\0" +"!pref.miyagi.jp\0" +"midtre-gauldal.no\0" +"xj.cn\0australia.museum\0" +"ab.ca\0salvadordali.museum\0olawa.pl\0" +"pc.it\0" +"u.se\0" +"edu.in\0b\xc3\xa1l\xc3\xa1t.no\0" +"ln.cn\0alta.no\0" +"chelyabinsk.ru\0" +"edu.iq\0" +"ontario.museum\0" +"edu.is\0" +"edu.it\0" +"b\xc3\xa5tsfjord.no\0" +"trysil.no\0or.th\0" +"utsira.no\0" +"nom.es\0edu.jo\0fhsk.se\0" +"bale.museum\0" +"w.bg\0" +"lillesand.no\0" +"edu.kg\0" +"amusement.aero\0" +"edu.ki\0" +"fauske.no\0or.ug\0" +"int.az\0askvoll.no\0eidskog.no\0cv.ua\0" +"algard.no\0" +"edu.km\0or.tz\0" +"nom.fr\0edu.kn\0" +"*.ibaraki.jp\0hoylandet.no\0" +"int.bo\0edu.kp\0" +"edu.la\0" +"si.it\0edu.lb\0travel.pl\0" +"edu.lc\0mx.na\0n\xc3\xa1vuotna.no\0ovre-eiker.no\0" +"aa.no\0!siemens.om\0" +"sciences.museum\0or.us\0" +"cat\0" +"edu.ky\0" +"int.ci\0edu.kz\0firm.ro\0cc.wy.us\0" +"edu.lk\0vaapste.no\0" +"!pref.tochigi.jp\0" +"int.co\0podlasie.pl\0" +"edu.lr\0" +"karikatur.museum\0jamal.ru\0" +"gjovik.no\0krager\xc3\xb8.no\0k12.az.us\0" +"edu.me\0" +"ud.it\0edu.lv\0entomology.museum\0" +"edu.mg\0moskenes.no\0" +"\xe6\x94\xbf\xe5\xba\x9c.hk\0edu.ly\0" +"stpetersburg.museum\0" +"edu.mk\0" +"edu.ml\0nordreisa.no\0" +"!pref.fukui.jp\0lib.ms.us\0lib.nc.us\0" +"edu.mn\0\xd9\x81\xd9\x84\xd8\xb3\xd8\xb7\xd9\x8a\xd9\x86\0" +"fot.br\0edu.mo\0" +"iron.museum\0" +"asti.it\0annefrank.museum\0stv.ru\0cc.nh.us\0" +"edu.mv\0" +"lodi.it\0edu.mw\0edu.ng\0" +"gwangju.kr\0edu.mx\0" +"edu.my\0" +"soundandvision.museum\0" +"lenvik.no\0" +"ballooning.aero\0" +"name\0" +"jogasz.hu\0frogn.no\0" +"history.museum\0" +"consultant.aero\0edu.nr\0" +"manchester.museum\0" +"*.hiroshima.jp\0" +"pol.dz\0" +"*.tochigi.jp\0heimatunduhren.museum\0" +"!pref.kanagawa.jp\0" +"firm.nf\0edu.pa\0" +"coop.ht\0pc.pl\0" +"chicago.museum\0" +"vn.ua\0" +"edu.pe\0" +"tana.no\0edu.pf\0" +"edu.ph\0" +"nom.km\0" +"travel.tt\0" +"edu.pk\0" +"experts-comptables.fr\0edu.pl\0bryansk.ru\0" +"edu.pn\0" +"evje-og-hornnes.no\0warszawa.pl\0" +"ac.ae\0" +"edu.pr\0" +"vaksdal.no\0edu.ps\0dni.us\0" +"po.gov.pl\0edu.pt\0" +"nordre-land.no\0vadso.no\0" +"rnrt.tn\0" +"sport.hu\0!pref.gifu.jp\0voss.no\0targi.pl\0" +"flesberg.no\0" +"photography.museum\0" +"modena.it\0tonsberg.no\0" +"ac.at\0" +"ac.be\0coop.br\0" +"services.aero\0" +"nom.mg\0" +"wielun.pl\0" +"jefferson.museum\0wy.us\0" +"pd.it\0ot.it\0neues.museum\0slattum.no\0" +"vdonsk.ru\0" +"ar.com\0edu.sa\0" +"\xc3\xa5l.no\0edu.sb\0" +"edu.rs\0edu.sc\0" +"ac.ci\0int.is\0edu.sd\0!tsk.tr\0" +"br\xc3\xb8nn\xc3\xb8ysund.no\0and\xc3\xb8y.no\0edu.ru\0" +"pol.ht\0" +"edu.rw\0edu.sg\0" +"gyeongnam.kr\0olecko.pl\0" +"ac.cn\0" +"graz.museum\0" +"coldwar.museum\0edu.sl\0" +"ac.cr\0" +"edu.sn\0" +"hamar.no\0" +"histoire.museum\0" +"!city.shizuoka.jp\0" +"edu.st\0" +"oceanographic.museum\0nh.us\0" +"x.bg\0" +"surnadal.no\0" +"fc.it\0costume.museum\0stalowa-wola.pl\0" +"valer.ostfold.no\0edu.sy\0" +"edu.tj\0" +"arq.br\0" +"aeroclub.aero\0odo.br\0pe.ca\0\xe7\xb6\xb2\xe7\xb5\xa1.cn\0bronnoysund.no\0nom.pa\0" +"edu.to\0" +"paleo.museum\0nom.pe\0edu.ua\0" +"int.la\0trustee.museum\0forsand.no\0krasnoyarsk.ru\0" +"!pref.hyogo.jp\0" +"edu.tt\0" +"zarow.pl\0" +"edu.tw\0" +"nom.pl\0" +"community.museum\0kvitsoy.no\0" +"int.lk\0tychy.pl\0" +"k12.me.us\0" +"jondal.no\0edu.vc\0" +"illustration.museum\0" +"clinton.museum\0" +"tas.au\0es.kr\0" +"production.aero\0" +"rodoy.no\0" +"database.museum\0bodo.no\0" +"anthro.museum\0landes.museum\0edu.vn\0" +"nom.re\0" +"altai.ru\0" +"filatelia.museum\0" +"sk.ca\0lezajsk.pl\0" +"rockart.museum\0int.mv\0" +"int.mw\0herad.no\0" +"eti.br\0ac.gn\0" +"fedje.no\0nom.ro\0" +"money.museum\0" +"\xd9\x85\xd8\xb5\xd8\xb1\0" +"horten.no\0" +"gangaviika.no\0mielec.pl\0" +"uw.gov.pl\0" +"moma.museum\0" +"edu.ws\0" +"go.ci\0" +"tv.bo\0technology.museum\0" +"s\xc3\xb8ndre-land.no\0" +"tv.br\0" +"jor.br\0lib.dc.us\0" +"arboretum.museum\0" +"go.cr\0" +"artsandcrafts.museum\0\xd8\xaa\xd9\x88\xd9\x86\xd8\xb3\0" +"psc.br\0ac.id\0!city.chiba.jp\0" +"wa.au\0" +"rome.it\0" +"amli.no\0" +"ac.im\0lo.it\0" +"ac.in\0" +"\xe7\xb6\xb2\xe7\xb5\xa1.hk\0durham.museum\0" +"ac.ir\0" +"torino.museum\0" +"loabat.no\0" +"com\0" +"nalchik.ru\0" +"yakutia.ru\0" +"settlers.museum\0" +"!promocion.ar\0int.pt\0" +"union.aero\0" +"utah.museum\0" +"giehtavuoatna.no\0" +"ac.jp\0" +"air-traffic-control.aero\0" +"silk.museum\0usantiques.museum\0" +"bn.it\0" +"kalisz.pl\0" +"perm.ru\0" +"aoste.it\0bindal.no\0" +"coloradoplateau.museum\0k12.gu.us\0" +"frosinone.it\0forde.no\0" +"epilepsy.museum\0" +"olbia-tempio.it\0" +"journalist.aero\0ac.kr\0*.sch.uk\0" +"nic.im\0sciencesnaturelles.museum\0bedzin.pl\0" +"nic.in\0pe.it\0" +"w.se\0" +"!pref.okayama.jp\0" +"urn.arpa\0" +"cinema.museum\0" +"monza.it\0versailles.museum\0int.ru\0" +"andasuolo.no\0skj\xc3\xa5k.no\0chernovtsy.ua\0" +"nyc.museum\0int.rw\0paroch.k12.ma.us\0" +"ringerike.no\0" +"ac.ma\0" +"org.ac\0civilaviation.aero\0" +"rakkestad.no\0" +"org.ae\0ac.me\0" +"org.af\0" +"org.ag\0" +"org.ai\0stokke.no\0" +"airport.aero\0" +"finnoy.no\0" +"org.al\0" +"org.an\0y.bg\0habmer.no\0" +"stadt.museum\0holtalen.no\0" +"int.tj\0" +"org.ba\0gjerdrum.no\0" +"org.bb\0ascoli-piceno.it\0molde.no\0r\xc3\xb8st.no\0tysfjord.no\0" +"pe.kr\0rybnik.pl\0" +"go.id\0" +"ac.mu\0" +"ac.mw\0ac.ng\0" +"org.bh\0\xc3\xa5mot.no\0rana.no\0" +"org.bi\0" +"org.az\0belgorod.ru\0int.tt\0" +"ae.org\0" +"group.aero\0posts-and-telecommunications.museum\0" +"org.bm\0salerno.it\0" +"etnedal.no\0" +"org.bo\0*.hokkaido.jp\0donetsk.ua\0" +"ostroda.pl\0" +"org.br\0" +"org.bs\0" +"go.it\0h\xc3\xb8ylandet.no\0" +"zgorzelec.pl\0" +"org.bw\0" +"org.ci\0" +"org.bz\0vicenza.it\0resistance.museum\0" +"missile.museum\0" +"org.cn\0" +"org.co\0assassination.museum\0" +"go.jp\0" +"tv.it\0austrheim.no\0ac.pa\0" +"verbania.it\0" +"palace.museum\0" +"tmp.br\0int.vn\0" +"org.cu\0" +"paris.museum\0" +"media.aero\0hokksund.no\0" +"arts.museum\0gemological.museum\0hammerfest.no\0" +"k12.ny.us\0" +"org.dm\0hemsedal.no\0ringsaker.no\0sklep.pl\0" +"h\xc3\xa5.no\0cc.nj.us\0" +"rzeszow.pl\0" +"go.kr\0gjesdal.no\0ac.pr\0" +"org.ec\0" +"org.ee\0" +"media.museum\0" +"terni.it\0touch.museum\0zakopane.pl\0" +"journal.aero\0org.dz\0" +"incheon.kr\0" +"b\xc3\xa1hcavuotna.no\0" +"leksvik.no\0ulvik.no\0" +"plantation.museum\0" +"org.es\0loyalist.museum\0" +"gildesk\xc3\xa5l.no\0bytom.pl\0" +"bo.nordland.no\0" +"ambulance.aero\0iglesiascarbonia.it\0" +"tw.cn\0\xe6\x96\xb0\xe5\x8a\xa0\xe5\x9d\xa1\0" +"chocolate.museum\0" +"pittsburgh.museum\0" +"royrvik.no\0sor-odal.no\0ac.rs\0" +"kaluga.ru\0" +"org.ge\0erotica.hu\0ac.ru\0ac.se\0" +"org.gg\0leangaviika.no\0ac.rw\0" +"org.gh\0v\xc3\xa6r\xc3\xb8y.no\0" +"org.gi\0" +"jevnaker.no\0" +"org.gn\0tv.na\0leikanger.no\0" +"org.gp\0" +"ask\xc3\xb8y.no\0" +"org.gr\0wroc.pl\0" +"ad.jp\0" +"powiat.pl\0" +"tj\xc3\xb8me.no\0" +"coop.tt\0" +"ac.th\0" +"mragowo.pl\0ac.sz\0ac.tj\0" +"org.hk\0bo.it\0" +"philately.museum\0" +"org.hn\0" +"fet.no\0" +"axis.museum\0mansions.museum\0" +"wiki.br\0" +"org.ht\0" +"org.hu\0piacenza.it\0scotland.museum\0cpa.pro\0" +"ac.ug\0" +"coop.mv\0x.se\0" +"coop.mw\0ac.tz\0" +"bmd.br\0" +"org.im\0ralingen.no\0" +"org.in\0" +"cz.it\0lib.ia.us\0" +"org.iq\0" +"org.ir\0" +"org.is\0" +"nl.ca\0" +"org.je\0" +"childrensgarden.museum\0" +"kvits\xc3\xb8y.no\0go.pw\0" +"sokndal.no\0" +"ra.it\0grimstad.no\0" +"denmark.museum\0" +"ac.vn\0" +"ecn.br\0org.jo\0" +"bialystok.pl\0nj.us\0" +"z.bg\0bilbao.museum\0stargard.pl\0nic.tj\0" +"eisenbahn.museum\0" +"fe.it\0bryne.no\0vrn.ru\0" +"cc.wa.us\0" +"sex.hu\0skierva.no\0" +"org.kg\0" +"org.ki\0" +"org.km\0" +"org.kn\0khakassia.ru\0" +"org.kp\0" +"org.la\0" +"org.lb\0" +"org.lc\0" +"francaise.museum\0" +"panama.museum\0" +"rotorcraft.aero\0gateway.museum\0olkusz.pl\0" +"org.ky\0czeladz.pl\0ryazan.ru\0" +"org.kz\0" +"org.lk\0dyr\xc3\xb8y.no\0" +"raisa.no\0" +"dlugoleka.pl\0" +"org.ma\0" +"org.lr\0prochowice.pl\0" +"org.ls\0" +"org.me\0sandoy.no\0s\xc3\xb8r-varanger.no\0" +"org.lv\0" +"org.mg\0" +"tel\0go.th\0" +"org.ly\0" +"steam.museum\0go.tj\0" +"org.mk\0pasadena.museum\0jessheim.no\0lib.mn.us\0" +"org.ml\0" +"software.aero\0" +"org.mn\0" +"org.mo\0" +"*.fukui.jp\0decorativearts.museum\0" +"spy.museum\0org.na\0jorpeland.no\0" +"vads\xc3\xb8.no\0" +"org.mu\0building.museum\0gausdal.no\0" +"org.mv\0nannestad.no\0" +"org.mw\0org.ng\0go.ug\0" +"vr.it\0org.mx\0" +"org.my\0" +"go.tz\0" +"oppdal.no\0" +"uk.net\0" +"coop.km\0" +"*.kyoto.jp\0" +"sarpsborg.no\0org.nr\0" +"chernigov.ua\0" +"ha.cn\0no.com\0" +"space.museum\0" +"org.pa\0" +"*.ar\0" +"usgarden.museum\0" +"*.bd\0org.pe\0" +"*.au\0org.pf\0um.gov.pl\0" +"bio.br\0" +"org.ph\0" +"org.pk\0" +"fr\xc3\xa6na.no\0org.pl\0" +"nord-aurdal.no\0org.pn\0" +"*.bn\0handson.museum\0agrinet.tn\0" +"kviteseid.no\0" +"rel.ht\0virtuel.museum\0atm.pl\0org.pr\0" +"org.ps\0cherkassy.ua\0" +"org.pt\0wa.us\0" +"*.bt\0arendal.no\0magnitka.ru\0" +"depot.museum\0porsangu.no\0" +"laakesvuemie.no\0" +"sor-fron.no\0" +"heroy.more-og-romsdal.no\0" +"*.ck\0" +"!rakpetroleum.om\0" +"kr\xc3\xb8""dsherad.no\0mail.pl\0" +"mod.gi\0" +"gs.nl.no\0" +"mb.ca\0" +"pavia.it\0" +"civilisation.museum\0folldal.no\0" +"suli.hu\0" +"brumunddal.no\0" +"*.cy\0" +"pg.it\0troms\xc3\xb8.no\0" +"sex.pl\0y.se\0" +"org.ro\0" +"*.do\0" +"caserta.it\0org.sa\0" +"za.com\0halloffame.museum\0org.sb\0lviv.ua\0" +"mill.museum\0org.rs\0org.sc\0" +"org.sd\0" +"idv.hk\0!omanmobile.om\0org.ru\0org.se\0" +"langev\xc3\xa5g.no\0r\xc3\xa5holt.no\0starostwo.gov.pl\0" +"trani-andria-barletta.it\0org.sg\0" +"*.eg\0hvaler.no\0" +"*.ehime.jp\0" +"gmina.pl\0" +"bod\xc3\xb8.no\0org.sl\0" +"edu\0org.sn\0" +"org.so\0lib.wi.us\0" +"kommune.no\0" +"nome.pt\0" +"*.er\0namdalseid.no\0k12.wa.us\0" +"nm.cn\0org.st\0" +"*.et\0d\xc3\xb8nna.no\0" +"jewish.museum\0preservation.museum\0" +"slupsk.pl\0org.sy\0" +"art.br\0org.sz\0org.tj\0" +"ntr.br\0*.fj\0ski.no\0" +"*.fk\0rimini.it\0grajewo.pl\0" +"loppa.no\0" +"franziskaner.museum\0notteroy.no\0org.tn\0" +"org.to\0" +"nesoddtangen.no\0" +"org.ua\0" +"discovery.museum\0wloclawek.pl\0" +"lakas.hu\0org.tt\0" +"kurgan.ru\0" +"baltimore.museum\0nkz.ru\0org.tw\0" +"com.ac\0castle.museum\0" +"*.fukuoka.jp\0sandefjord.no\0varggat.no\0" +"com.af\0" +"com.ag\0" +"ato.br\0k12.nj.us\0" +"com.ai\0" +"city.hu\0oryol.ru\0" +"com.al\0nl.no\0mielno.pl\0cc.ma.us\0" +"org.vc\0" +"com.an\0g12.br\0" +"*.gt\0" +"*.gu\0" +"com.ba\0" +"com.bb\0americanart.museum\0" +"org.vi\0" +"kunstsammlung.museum\0" +"com.aw\0" +"flight.aero\0com.bh\0lib.mo.us\0org.vn\0" +"com.bi\0adygeya.ru\0" +"com.az\0" +"art.dz\0" +"com.bm\0" +"dr\xc3\xb8""bak.no\0" +"com.bo\0isla.pr\0" +"com.br\0" +"com.bs\0ustka.pl\0kuban.ru\0" +"press.aero\0" +"vs.it\0" +"meloy.no\0" +"*.il\0ulm.museum\0" +"com.by\0com.ci\0genoa.it\0" +"com.bz\0sn.cn\0" +"lib.or.us\0" +"santafe.museum\0org.ws\0" +}; + +QT_END_NAMESPACE + +#endif // QURLTLD_P_H diff --git a/src/corelib/io/qurltlds_p.h.INFO b/src/corelib/io/qurltlds_p.h.INFO new file mode 100644 index 0000000000..57a8d0e0cc --- /dev/null +++ b/src/corelib/io/qurltlds_p.h.INFO @@ -0,0 +1,17 @@ +The file qnetworkcookiejartlds_p.h is generated from the Public Suffix +List (see [1] and [2]), by the program residing at +util/network/cookiejar-generateTLDs in the Qt source tree. + +That program generates a character array and an index array from the +list to provide fast lookups of elements within C++. + +Those arrays in qnetworkcookiejartlds_p.h are derived from the Public +Suffix List ([2]), which was originally provided by +Jo Hermans . + +The file qnetworkcookiejartlds_p.h was last generated Friday, +November 19th 15:24 2010. + +---- +[1] list: http://mxr.mozilla.org/mozilla-central/source/netwerk/dns/effective_tld_names.dat?raw=1 +[2] homepage: http://publicsuffix.org/ diff --git a/src/network/access/access.pri b/src/network/access/access.pri index 0f901b873d..3d5558d334 100644 --- a/src/network/access/access.pri +++ b/src/network/access/access.pri @@ -21,7 +21,6 @@ HEADERS += \ access/qnetworkcookie_p.h \ access/qnetworkcookiejar.h \ access/qnetworkcookiejar_p.h \ - access/qnetworkcookiejartlds_p.h \ access/qnetworkrequest.h \ access/qnetworkrequest_p.h \ access/qnetworkreply.h \ diff --git a/src/network/access/qnetworkcookiejar.cpp b/src/network/access/qnetworkcookiejar.cpp index 53fab9f0c4..f2b1714002 100644 --- a/src/network/access/qnetworkcookiejar.cpp +++ b/src/network/access/qnetworkcookiejar.cpp @@ -40,12 +40,12 @@ ****************************************************************************/ #include "qnetworkcookiejar.h" -#include "qnetworkcookiejartlds_p.h" #include "qnetworkcookiejar_p.h" #include "QtNetwork/qnetworkcookie.h" #include "QtCore/qurl.h" #include "QtCore/qdatetime.h" +#include "private/qtldurl_p.h" QT_BEGIN_NAMESPACE @@ -216,7 +216,7 @@ bool QNetworkCookieJar::setCookiesFromUrl(const QList &cookieLis // the check for effective TLDs makes the "embedded dot" rule from RFC 2109 section 4.3.2 // redundant; the "leading dot" rule has been relaxed anyway, see above // we remove the leading dot for this check - if (QNetworkCookieJarPrivate::isEffectiveTLD(domain.remove(0, 1))) + if (qIsEffectiveTLD(domain.remove(0, 1))) continue; // not accepted } @@ -304,43 +304,4 @@ QList QNetworkCookieJar::cookiesForUrl(const QUrl &url) const return result; } -bool QNetworkCookieJarPrivate::isEffectiveTLD(const QString &domain) -{ - // for domain 'foo.bar.com': - // 1. return if TLD table contains 'foo.bar.com' - if (containsTLDEntry(domain)) - return true; - - if (domain.contains(QLatin1Char('.'))) { - int count = domain.size() - domain.indexOf(QLatin1Char('.')); - QString wildCardDomain; - wildCardDomain.reserve(count + 1); - wildCardDomain.append(QLatin1Char('*')); - wildCardDomain.append(domain.right(count)); - // 2. if table contains '*.bar.com', - // test if table contains '!foo.bar.com' - if (containsTLDEntry(wildCardDomain)) { - QString exceptionDomain; - exceptionDomain.reserve(domain.size() + 1); - exceptionDomain.append(QLatin1Char('!')); - exceptionDomain.append(domain); - return (! containsTLDEntry(exceptionDomain)); - } - } - return false; -} - -bool QNetworkCookieJarPrivate::containsTLDEntry(const QString &entry) -{ - int index = qHash(entry) % tldCount; - int currentDomainIndex = tldIndices[index]; - while (currentDomainIndex < tldIndices[index+1]) { - QString currentEntry = QString::fromUtf8(tldData + currentDomainIndex); - if (currentEntry == entry) - return true; - currentDomainIndex += qstrlen(tldData + currentDomainIndex) + 1; // +1 for the ending \0 - } - return false; -} - QT_END_NAMESPACE diff --git a/src/network/access/qnetworkcookiejar_p.h b/src/network/access/qnetworkcookiejar_p.h index d6dc45057c..ce5a87a98c 100644 --- a/src/network/access/qnetworkcookiejar_p.h +++ b/src/network/access/qnetworkcookiejar_p.h @@ -63,9 +63,6 @@ class QNetworkCookieJarPrivate: public QObjectPrivate public: QList allCookies; - static bool Q_AUTOTEST_EXPORT isEffectiveTLD(const QString &domain); - static bool containsTLDEntry(const QString &entry); - Q_DECLARE_PUBLIC(QNetworkCookieJar) }; diff --git a/src/network/access/qnetworkcookiejartlds_p.h b/src/network/access/qnetworkcookiejartlds_p.h deleted file mode 100644 index b06d881131..0000000000 --- a/src/network/access/qnetworkcookiejartlds_p.h +++ /dev/null @@ -1,6481 +0,0 @@ -// Version: MPL 1.1/GPL 2.0/LGPL 2.1 -// -// The contents of this file are subject to the Mozilla Public License Version -// 1.1 (the "License"); you may not use this file except in compliance with -// the License. You may obtain a copy of the License at -// http://www.mozilla.org/MPL/ -// -// Software distributed under the License is distributed on an "AS IS" basis, -// WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License -// for the specific language governing rights and limitations under the -// License. -// -// The Original Code is the Public Suffix List. -// -// The Initial Developer of the Original Code is -// Jo Hermans . -// Portions created by the Initial Developer are Copyright (C) 2007 -// the Initial Developer. All Rights Reserved. -// -// Contributor(s): -// Ruben Arakelyan -// Gervase Markham -// Pamela Greene -// David Triendl -// Jothan Frakes -// The kind representatives of many TLD registries -// -// Alternatively, the contents of this file may be used under the terms of -// either the GNU General Public License Version 2 or later (the "GPL"), or -// the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), -// in which case the provisions of the GPL or the LGPL are applicable instead -// of those above. If you wish to allow use of your version of this file only -// under the terms of either the GPL or the LGPL, and not to allow others to -// use your version of this file under the terms of the MPL, indicate your -// decision by deleting the provisions above and replace them with the notice -// and other provisions required by the GPL or the LGPL. If you do not delete -// the provisions above, a recipient may use your version of this file under -// the terms of any one of the MPL, the GPL or the LGPL. -// - -#ifndef QNETWORKCOOKIEJARTLD_P_H -#define QNETWORKCOOKIEJARTLD_P_H - -// -// W A R N I N G -// ------------- -// -// This file is not part of the Qt API. It exists for the convenience -// of the Network Access framework. This header file may change from -// version to version without notice, or even be removed. -// -// We mean it. -// - -QT_BEGIN_NAMESPACE - -// note to maintainer: -// this file should be updated before each release -> -// for instructions see the program at -// util/network/cookiejar-generateTLDs - -static const quint16 tldCount = 3949; -static const quint16 tldIndices[] = { -0, -7, -14, -14, -20, -51, -61, -93, -100, -100, -116, -159, -167, -180, -180, -193, -234, -234, -234, -255, -255, -255, -280, -280, -287, -287, -295, -303, -313, -326, -326, -380, -393, -413, -419, -419, -419, -424, -438, -438, -469, -515, -515, -515, -534, -534, -557, -557, -557, -557, -572, -572, -572, -579, -587, -597, -612, -612, -624, -636, -648, -662, -687, -709, -714, -740, -766, -789, -789, -805, -805, -810, -815, -815, -824, -824, -831, -857, -869, -891, -891, -916, -916, -916, -927, -934, -964, -971, -987, -987, -987, -1008, -1008, -1016, -1016, -1030, -1030, -1052, -1075, -1075, -1082, -1087, -1115, -1135, -1135, -1135, -1172, -1178, -1178, -1178, -1202, -1207, -1220, -1220, -1266, -1266, -1266, -1266, -1272, -1290, -1316, -1316, -1332, -1332, -1339, -1339, -1352, -1352, -1389, -1389, -1408, -1415, -1437, -1444, -1489, -1489, -1502, -1502, -1512, -1518, -1539, -1555, -1562, -1584, -1598, -1607, -1607, -1607, -1632, -1652, -1652, -1658, -1658, -1675, -1682, -1709, -1733, -1748, -1776, -1783, -1783, -1790, -1797, -1826, -1850, -1850, -1856, -1880, -1887, -1901, -1921, -1947, -1961, -1967, -1967, -1967, -1972, -1986, -1986, -1986, -2009, -2029, -2029, -2047, -2061, -2075, -2075, -2075, -2075, -2075, -2075, -2082, -2082, -2124, -2124, -2129, -2162, -2162, -2162, -2236, -2256, -2263, -2276, -2283, -2313, -2313, -2347, -2380, -2387, -2387, -2387, -2431, -2438, -2445, -2452, -2459, -2459, -2469, -2490, -2516, -2527, -2540, -2540, -2586, -2610, -2630, -2630, -2653, -2660, -2669, -2693, -2693, -2710, -2710, -2719, -2719, -2734, -2740, -2740, -2753, -2753, -2763, -2770, -2775, -2782, -2789, -2802, -2820, -2827, -2827, -2841, -2855, -2855, -2865, -2872, -2884, -2884, -2919, -2937, -2955, -2962, -3012, -3042, -3073, -3083, -3083, -3100, -3105, -3112, -3131, -3131, -3166, -3180, -3187, -3194, -3211, -3218, -3223, -3233, -3249, -3259, -3268, -3314, -3314, -3324, -3324, -3336, -3336, -3336, -3336, -3350, -3363, -3376, -3398, -3416, -3445, -3464, -3488, -3488, -3497, -3545, -3552, -3552, -3552, -3566, -3573, -3573, -3573, -3581, -3581, -3603, -3603, -3615, -3621, -3621, -3683, -3683, -3710, -3710, -3716, -3716, -3748, -3770, -3791, -3803, -3810, -3817, -3833, -3846, -3846, -3852, -3876, -3876, -3882, -3903, -3910, -3939, -3939, -3939, -3947, -3962, -3962, -3981, -3994, -4021, -4030, -4042, -4085, -4085, -4096, -4096, -4104, -4123, -4123, -4123, -4143, -4154, -4164, -4194, -4194, -4194, -4205, -4205, -4222, -4238, -4301, -4309, -4322, -4331, -4331, -4331, -4331, -4331, -4347, -4365, -4375, -4375, -4385, -4398, -4412, -4430, -4430, -4437, -4447, -4463, -4472, -4472, -4472, -4484, -4484, -4484, -4484, -4484, -4490, -4490, -4511, -4511, -4522, -4522, -4522, -4522, -4528, -4528, -4534, -4551, -4551, -4551, -4564, -4583, -4583, -4611, -4611, -4611, -4622, -4622, -4649, -4668, -4677, -4692, -4692, -4692, -4705, -4723, -4723, -4723, -4729, -4729, -4743, -4743, -4750, -4750, -4763, -4770, -4776, -4776, -4776, -4793, -4811, -4811, -4811, -4821, -4821, -4841, -4857, -4891, -4897, -4903, -4903, -4903, -4919, -4935, -4942, -4958, -4958, -4975, -4975, -4975, -4985, -4985, -5020, -5032, -5032, -5040, -5053, -5068, -5079, -5079, -5101, -5115, -5115, -5135, -5154, -5161, -5161, -5168, -5168, -5184, -5210, -5210, -5238, -5255, -5278, -5285, -5308, -5318, -5327, -5327, -5333, -5333, -5340, -5348, -5355, -5366, -5377, -5384, -5408, -5415, -5422, -5435, -5442, -5482, -5482, -5482, -5482, -5498, -5527, -5534, -5541, -5572, -5572, -5572, -5579, -5591, -5602, -5602, -5621, -5621, -5646, -5664, -5671, -5671, -5681, -5696, -5707, -5716, -5716, -5723, -5723, -5732, -5742, -5742, -5763, -5770, -5776, -5790, -5790, -5797, -5806, -5816, -5832, -5882, -5882, -5882, -5882, -5893, -5934, -5934, -5965, -5965, -5980, -5980, -5980, -5980, -6007, -6017, -6034, -6051, -6065, -6075, -6075, -6091, -6097, -6097, -6109, -6109, -6109, -6122, -6147, -6168, -6168, -6191, -6191, -6191, -6191, -6191, -6198, -6217, -6224, -6224, -6231, -6245, -6252, -6252, -6270, -6270, -6284, -6305, -6315, -6322, -6322, -6322, -6329, -6329, -6329, -6353, -6361, -6361, -6375, -6391, -6405, -6405, -6415, -6431, -6431, -6431, -6431, -6458, -6475, -6475, -6475, -6482, -6489, -6496, -6496, -6503, -6520, -6520, -6520, -6527, -6527, -6544, -6561, -6573, -6573, -6580, -6580, -6587, -6587, -6592, -6592, -6592, -6592, -6599, -6599, -6612, -6633, -6649, -6649, -6669, -6676, -6683, -6683, -6713, -6720, -6727, -6736, -6736, -6746, -6770, -6807, -6814, -6827, -6846, -6846, -6864, -6864, -6864, -6864, -6881, -6888, -6888, -6888, -6914, -6935, -6935, -6935, -6953, -6959, -6966, -6983, -6983, -6983, -7013, -7023, -7023, -7023, -7023, -7037, -7044, -7058, -7079, -7086, -7123, -7134, -7155, -7168, -7178, -7203, -7227, -7236, -7258, -7265, -7274, -7274, -7303, -7303, -7314, -7314, -7345, -7352, -7367, -7377, -7388, -7388, -7402, -7402, -7409, -7421, -7421, -7467, -7484, -7484, -7484, -7491, -7532, -7532, -7539, -7546, -7546, -7553, -7573, -7573, -7573, -7580, -7587, -7594, -7594, -7594, -7606, -7606, -7637, -7637, -7637, -7664, -7664, -7664, -7677, -7684, -7701, -7723, -7723, -7723, -7723, -7734, -7734, -7734, -7748, -7748, -7748, -7748, -7759, -7759, -7775, -7775, -7782, -7789, -7817, -7824, -7831, -7836, -7865, -7865, -7876, -7901, -7901, -7908, -7918, -7938, -7945, -7945, -7957, -7964, -7979, -7986, -7994, -8007, -8007, -8014, -8021, -8061, -8061, -8071, -8088, -8131, -8138, -8153, -8160, -8160, -8160, -8175, -8183, -8197, -8211, -8211, -8211, -8243, -8243, -8243, -8243, -8259, -8259, -8259, -8259, -8259, -8266, -8275, -8281, -8281, -8281, -8281, -8288, -8288, -8309, -8309, -8309, -8330, -8330, -8330, -8330, -8337, -8343, -8343, -8360, -8370, -8370, -8380, -8380, -8386, -8386, -8397, -8415, -8415, -8428, -8454, -8460, -8475, -8492, -8526, -8554, -8554, -8583, -8583, -8583, -8598, -8607, -8617, -8617, -8642, -8652, -8652, -8652, -8662, -8688, -8688, -8704, -8704, -8747, -8765, -8775, -8783, -8811, -8835, -8835, -8835, -8850, -8859, -8884, -8910, -8919, -8952, -8978, -8978, -8991, -8991, -8991, -8999, -8999, -8999, -9030, -9030, -9030, -9030, -9030, -9041, -9048, -9048, -9054, -9054, -9054, -9086, -9108, -9108, -9119, -9119, -9130, -9144, -9152, -9161, -9174, -9194, -9207, -9207, -9207, -9232, -9242, -9242, -9271, -9290, -9308, -9308, -9308, -9308, -9320, -9333, -9343, -9356, -9379, -9379, -9379, -9395, -9395, -9406, -9419, -9419, -9419, -9419, -9450, -9485, -9485, -9497, -9497, -9505, -9517, -9528, -9528, -9551, -9564, -9586, -9586, -9608, -9608, -9626, -9626, -9626, -9653, -9653, -9681, -9681, -9681, -9698, -9698, -9698, -9714, -9729, -9737, -9737, -9765, -9765, -9765, -9765, -9765, -9825, -9844, -9866, -9880, -9880, -9880, -9880, -9886, -9895, -9895, -9895, -9895, -9895, -9913, -9913, -9924, -9958, -9958, -9967, -9975, -9975, -9975, -9981, -9998, -9998, -9998, -10012, -10036, -10036, -10066, -10079, -10097, -10121, -10133, -10142, -10142, -10142, -10156, -10173, -10173, -10173, -10196, -10205, -10205, -10205, -10205, -10218, -10234, -10240, -10240, -10240, -10264, -10273, -10286, -10286, -10286, -10286, -10299, -10299, -10309, -10309, -10339, -10358, -10358, -10374, -10374, -10390, -10390, -10413, -10413, -10439, -10461, -10467, -10467, -10467, -10492, -10492, -10501, -10528, -10528, -10528, -10539, -10583, -10583, -10583, -10613, -10613, -10619, -10628, -10645, -10645, -10645, -10650, -10671, -10687, -10709, -10709, -10709, -10709, -10709, -10727, -10727, -10727, -10727, -10733, -10733, -10768, -10768, -10773, -10780, -10788, -10788, -10797, -10797, -10835, -10835, -10845, -10852, -10861, -10861, -10861, -10861, -10861, -10861, -10861, -10875, -10888, -10907, -10907, -10907, -10920, -10920, -10932, -10946, -10977, -10977, -10997, -11008, -11037, -11059, -11059, -11059, -11067, -11067, -11067, -11067, -11067, -11077, -11091, -11102, -11102, -11112, -11125, -11129, -11129, -11154, -11154, -11154, -11164, -11164, -11189, -11189, -11189, -11189, -11189, -11196, -11196, -11227, -11238, -11247, -11256, -11265, -11265, -11286, -11307, -11330, -11337, -11378, -11378, -11389, -11413, -11454, -11469, -11475, -11475, -11475, -11475, -11503, -11503, -11503, -11503, -11534, -11534, -11550, -11550, -11557, -11557, -11557, -11557, -11574, -11585, -11585, -11603, -11626, -11643, -11643, -11643, -11643, -11663, -11663, -11682, -11696, -11696, -11696, -11696, -11706, -11706, -11706, -11706, -11723, -11723, -11757, -11757, -11773, -11795, -11813, -11836, -11836, -11883, -11903, -11952, -11965, -11965, -11984, -11997, -12008, -12008, -12008, -12024, -12043, -12065, -12071, -12099, -12129, -12140, -12140, -12146, -12161, -12161, -12161, -12161, -12167, -12167, -12180, -12186, -12208, -12226, -12243, -12243, -12252, -12252, -12274, -12289, -12302, -12302, -12313, -12313, -12313, -12313, -12358, -12358, -12358, -12369, -12375, -12391, -12391, -12391, -12391, -12405, -12410, -12416, -12416, -12436, -12436, -12436, -12443, -12443, -12462, -12477, -12492, -12492, -12503, -12519, -12525, -12531, -12571, -12571, -12591, -12591, -12601, -12641, -12641, -12641, -12657, -12657, -12657, -12699, -12699, -12699, -12712, -12728, -12744, -12761, -12769, -12782, -12793, -12823, -12836, -12851, -12863, -12890, -12900, -12900, -12900, -12910, -12910, -12924, -12924, -12924, -12924, -12924, -12952, -12984, -13003, -13038, -13038, -13056, -13056, -13056, -13056, -13074, -13081, -13093, -13103, -13103, -13112, -13119, -13132, -13132, -13132, -13141, -13151, -13183, -13193, -13206, -13206, -13206, -13236, -13252, -13267, -13267, -13294, -13307, -13307, -13307, -13343, -13349, -13349, -13349, -13375, -13375, -13375, -13384, -13384, -13384, -13393, -13393, -13393, -13402, -13414, -13425, -13445, -13467, -13485, -13499, -13509, -13528, -13528, -13549, -13549, -13559, -13570, -13570, -13570, -13570, -13598, -13637, -13647, -13647, -13661, -13673, -13682, -13687, -13694, -13694, -13720, -13733, -13742, -13748, -13771, -13795, -13795, -13814, -13821, -13821, -13855, -13862, -13862, -13862, -13874, -13874, -13897, -13909, -13909, -13947, -13947, -13952, -13952, -13970, -13979, -13979, -13979, -14008, -14049, -14049, -14049, -14049, -14049, -14049, -14060, -14083, -14083, -14091, -14101, -14101, -14101, -14101, -14118, -14136, -14195, -14195, -14195, -14213, -14213, -14232, -14232, -14253, -14253, -14258, -14275, -14275, -14304, -14311, -14311, -14318, -14318, -14318, -14318, -14318, -14318, -14325, -14325, -14345, -14345, -14379, -14389, -14422, -14422, -14422, -14422, -14435, -14441, -14441, -14460, -14460, -14471, -14471, -14481, -14495, -14495, -14495, -14502, -14502, -14502, -14502, -14524, -14533, -14541, -14552, -14552, -14552, -14552, -14563, -14563, -14568, -14568, -14585, -14595, -14602, -14628, -14628, -14645, -14672, -14678, -14697, -14697, -14734, -14757, -14764, -14771, -14771, -14771, -14796, -14815, -14822, -14845, -14861, -14861, -14861, -14873, -14873, -14873, -14902, -14920, -14920, -14926, -14926, -14926, -14941, -14949, -14949, -14949, -14949, -14949, -14960, -14960, -14971, -14971, -14998, -15003, -15003, -15003, -15013, -15013, -15027, -15027, -15027, -15043, -15053, -15063, -15074, -15083, -15093, -15093, -15121, -15121, -15128, -15128, -15144, -15144, -15144, -15144, -15165, -15170, -15170, -15170, -15170, -15170, -15170, -15170, -15186, -15206, -15206, -15206, -15224, -15236, -15236, -15252, -15258, -15258, -15258, -15258, -15264, -15277, -15288, -15307, -15307, -15318, -15328, -15328, -15334, -15334, -15363, -15399, -15399, -15422, -15438, -15447, -15447, -15456, -15456, -15456, -15495, -15495, -15495, -15495, -15511, -15511, -15530, -15557, -15566, -15582, -15590, -15590, -15604, -15604, -15625, -15635, -15655, -15655, -15655, -15655, -15655, -15665, -15675, -15675, -15675, -15675, -15675, -15682, -15682, -15682, -15694, -15719, -15749, -15749, -15794, -15794, -15837, -15854, -15854, -15861, -15861, -15861, -15861, -15884, -15900, -15911, -15931, -15931, -15931, -15931, -15931, -15963, -15963, -15996, -16006, -16013, -16024, -16034, -16049, -16049, -16049, -16059, -16059, -16059, -16059, -16059, -16059, -16059, -16064, -16075, -16104, -16104, -16117, -16124, -16124, -16124, -16124, -16130, -16145, -16159, -16190, -16193, -16196, -16210, -16224, -16243, -16255, -16261, -16280, -16283, -16292, -16295, -16295, -16301, -16304, -16322, -16325, -16328, -16349, -16355, -16382, -16408, -16414, -16414, -16414, -16458, -16477, -16480, -16485, -16488, -16514, -16520, -16530, -16530, -16546, -16562, -16597, -16603, -16622, -16622, -16646, -16669, -16672, -16715, -16715, -16715, -16718, -16718, -16727, -16733, -16752, -16770, -16787, -16794, -16810, -16827, -16840, -16850, -16876, -16901, -16901, -16901, -16916, -16919, -16926, -16943, -16972, -16978, -16978, -16978, -16981, -17008, -17008, -17016, -17053, -17053, -17053, -17053, -17072, -17086, -17105, -17139, -17153, -17162, -17162, -17177, -17177, -17177, -17177, -17195, -17218, -17221, -17221, -17237, -17276, -17276, -17300, -17319, -17339, -17357, -17370, -17383, -17400, -17407, -17419, -17439, -17439, -17449, -17465, -17475, -17504, -17527, -17527, -17534, -17548, -17564, -17564, -17598, -17598, -17601, -17630, -17649, -17669, -17669, -17679, -17686, -17757, -17776, -17796, -17810, -17840, -17840, -17877, -17884, -17884, -17911, -17936, -17970, -17980, -17995, -17995, -18008, -18011, -18036, -18075, -18097, -18097, -18104, -18115, -18115, -18129, -18134, -18141, -18141, -18157, -18180, -18190, -18217, -18224, -18252, -18284, -18284, -18296, -18299, -18312, -18322, -18338, -18348, -18348, -18363, -18372, -18387, -18387, -18390, -18402, -18445, -18445, -18445, -18466, -18479, -18479, -18498, -18508, -18511, -18511, -18511, -18511, -18511, -18526, -18558, -18586, -18622, -18643, -18670, -18686, -18710, -18720, -18739, -18739, -18742, -18745, -18771, -18774, -18777, -18791, -18813, -18816, -18822, -18839, -18845, -18851, -18854, -18878, -18881, -18896, -18896, -18899, -18926, -18937, -18940, -18953, -18963, -19010, -19010, -19017, -19046, -19060, -19060, -19087, -19095, -19101, -19101, -19128, -19146, -19157, -19157, -19188, -19198, -19205, -19223, -19230, -19255, -19280, -19280, -19283, -19292, -19301, -19320, -19323, -19323, -19341, -19341, -19365, -19378, -19381, -19394, -19423, -19433, -19440, -19466, -19490, -19490, -19490, -19497, -19504, -19511, -19511, -19518, -19545, -19568, -19575, -19575, -19583, -19586, -19592, -19592, -19609, -19622, -19629, -19641, -19641, -19656, -19673, -19700, -19723, -19733, -19746, -19759, -19769, -19782, -19789, -19795, -19831, -19834, -19841, -19851, -19854, -19880, -19895, -19898, -19898, -19911, -19922, -19950, -20020, -20030, -20059, -20062, -20089, -20107, -20151, -20154, -20175, -20205, -20208, -20229, -20229, -20255, -20261, -20261, -20283, -20335, -20362, -20385, -20392, -20392, -20392, -20392, -20418, -20418, -20418, -20418, -20443, -20446, -20446, -20452, -20452, -20467, -20467, -20489, -20489, -20498, -20525, -20554, -20560, -20575, -20589, -20589, -20589, -20614, -20652, -20659, -20659, -20668, -20679, -20679, -20679, -20685, -20685, -20685, -20685, -20685, -20685, -20696, -20733, -20760, -20766, -20769, -20792, -20792, -20792, -20792, -20813, -20813, -20813, -20813, -20826, -20826, -20846, -20862, -20880, -20887, -20901, -20908, -20933, -20938, -20958, -20969, -20978, -20978, -20978, -20985, -20985, -20985, -21000, -21010, -21010, -21014, -21026, -21033, -21041, -21041, -21051, -21051, -21064, -21071, -21113, -21120, -21120, -21127, -21134, -21142, -21164, -21164, -21164, -21188, -21195, -21208, -21215, -21226, -21226, -21226, -21238, -21249, -21255, -21255, -21265, -21279, -21296, -21301, -21315, -21321, -21331, -21331, -21331, -21337, -21343, -21343, -21351, -21351, -21361, -21368, -21383, -21383, -21389, -21413, -21437, -21449, -21462, -21478, -21506, -21534, -21546, -21546, -21557, -21580, -21595, -21595, -21595, -21595, -21626, -21626, -21646, -21670, -21676, -21688, -21688, -21716, -21731, -21762, -21762, -21762, -21762, -21762, -21783, -21789, -21799, -21828, -21828, -21837, -21845, -21868, -21874, -21874, -21880, -21880, -21889, -21901, -21910, -21941, -21941, -21959, -21959, -21959, -21966, -21966, -21972, -21972, -21995, -22011, -22043, -22043, -22051, -22051, -22060, -22060, -22060, -22074, -22086, -22086, -22099, -22099, -22120, -22120, -22134, -22144, -22150, -22158, -22164, -22164, -22171, -22199, -22210, -22210, -22210, -22220, -22228, -22228, -22239, -22261, -22304, -22304, -22312, -22349, -22349, -22349, -22357, -22381, -22381, -22390, -22390, -22390, -22390, -22402, -22413, -22413, -22422, -22422, -22445, -22445, -22445, -22456, -22456, -22469, -22479, -22501, -22512, -22528, -22528, -22528, -22528, -22528, -22528, -22528, -22540, -22540, -22546, -22546, -22546, -22546, -22569, -22591, -22591, -22591, -22591, -22610, -22655, -22655, -22667, -22667, -22677, -22677, -22692, -22692, -22702, -22702, -22702, -22717, -22736, -22750, -22755, -22780, -22785, -22822, -22844, -22859, -22871, -22909, -22949, -22962, -22973, -22979, -22988, -23007, -23027, -23035, -23072, -23082, -23082, -23109, -23116, -23130, -23158, -23166, -23166, -23172, -23177, -23189, -23219, -23219, -23250, -23273, -23281, -23281, -23281, -23281, -23281, -23287, -23287, -23299, -23305, -23315, -23315, -23321, -23328, -23334, -23355, -23355, -23355, -23355, -23355, -23366, -23390, -23396, -23396, -23396, -23396, -23402, -23418, -23424, -23424, -23438, -23446, -23446, -23446, -23500, -23525, -23569, -23592, -23592, -23592, -23605, -23614, -23614, -23614, -23627, -23633, -23657, -23673, -23673, -23673, -23689, -23689, -23701, -23701, -23701, -23713, -23713, -23713, -23738, -23758, -23775, -23775, -23794, -23794, -23803, -23803, -23803, -23803, -23813, -23826, -23845, -23845, -23845, -23845, -23872, -23872, -23872, -23888, -23888, -23900, -23900, -23906, -23906, -23906, -23906, -23906, -23924, -23924, -23924, -23930, -23930, -23939, -23949, -23971, -23971, -23971, -24000, -24012, -24042, -24042, -24042, -24042, -24042, -24070, -24076, -24094, -24094, -24094, -24123, -24123, -24123, -24134, -24150, -24150, -24150, -24150, -24150, -24150, -24155, -24179, -24179, -24189, -24189, -24189, -24198, -24198, -24218, -24218, -24218, -24234, -24251, -24257, -24276, -24305, -24321, -24321, -24321, -24334, -24334, -24334, -24349, -24356, -24361, -24372, -24372, -24372, -24388, -24396, -24396, -24402, -24410, -24410, -24428, -24428, -24450, -24450, -24467, -24485, -24495, -24495, -24495, -24507, -24507, -24514, -24531, -24531, -24531, -24531, -24531, -24537, -24537, -24558, -24572, -24584, -24584, -24601, -24601, -24607, -24615, -24615, -24632, -24632, -24632, -24632, -24661, -24676, -24676, -24724, -24751, -24751, -24774, -24774, -24783, -24793, -24793, -24793, -24813, -24819, -24819, -24826, -24826, -24842, -24858, -24872, -24872, -24890, -24890, -24890, -24890, -24890, -24890, -24890, -24890, -24890, -24906, -24906, -24917, -24928, -24947, -24947, -24947, -24947, -24947, -24947, -24947, -24947, -24947, -24963, -24983, -24991, -24991, -24991, -24991, -24991, -24991, -24991, -24991, -25007, -25007, -25007, -25007, -25007, -25007, -25007, -25030, -25040, -25040, -25040, -25040, -25040, -25059, -25097, -25132, -25149, -25159, -25169, -25169, -25169, -25192, -25192, -25192, -25192, -25205, -25205, -25216, -25221, -25221, -25233, -25233, -25240, -25250, -25256, -25273, -25273, -25303, -25321, -25321, -25321, -25333, -25333, -25333, -25333, -25370, -25370, -25402, -25418, -25418, -25439, -25439, -25454, -25454, -25454, -25463, -25477, -25526, -25526, -25526, -25526, -25545, -25562, -25572, -25572, -25582, -25582, -25582, -25597, -25610, -25634, -25641, -25641, -25641, -25668, -25668, -25675, -25707, -25727, -25727, -25741, -25756, -25756, -25779, -25811, -25811, -25811, -25817, -25817, -25817, -25827, -25827, -25827, -25827, -25827, -25836, -25836, -25836, -25836, -25850, -25850, -25860, -25884, -25901, -25922, -25936, -25946, -25969, -25969, -25969, -25969, -25975, -25975, -25987, -25987, -26065, -26065, -26065, -26084, -26084, -26103, -26128, -26141, -26151, -26169, -26169, -26169, -26180, -26191, -26191, -26191, -26197, -26197, -26205, -26211, -26235, -26235, -26235, -26235, -26235, -26235, -26245, -26245, -26259, -26259, -26259, -26259, -26284, -26284, -26325, -26325, -26355, -26364, -26364, -26402, -26418, -26418, -26425, -26432, -26432, -26454, -26504, -26513, -26525, -26525, -26525, -26525, -26525, -26545, -26545, -26571, -26590, -26597, -26597, -26597, -26597, -26597, -26639, -26648, -26659, -26666, -26672, -26672, -26672, -26672, -26672, -26694, -26701, -26701, -26701, -26724, -26724, -26746, -26753, -26774, -26774, -26774, -26774, -26806, -26824, -26824, -26830, -26852, -26882, -26882, -26889, -26889, -26889, -26889, -26889, -26889, -26903, -26911, -26918, -26918, -26928, -26948, -26948, -26970, -26970, -26985, -26996, -27045, -27045, -27058, -27058, -27068, -27068, -27104, -27155, -27155, -27155, -27155, -27155, -27172, -27172, -27172, -27172, -27189, -27195, -27195, -27223, -27223, -27223, -27223, -27244, -27290, -27322, -27332, -27364, -27371, -27371, -27371, -27401, -27401, -27417, -27417, -27431, -27470, -27470, -27470, -27470, -27484, -27484, -27484, -27484, -27484, -27496, -27496, -27515, -27515, -27543, -27560, -27576, -27604, -27622, -27631, -27631, -27638, -27649, -27672, -27682, -27682, -27682, -27707, -27717, -27724, -27732, -27755, -27755, -27755, -27768, -27768, -27783, -27789, -27799, -27799, -27799, -27818, -27826, -27838, -27848, -27848, -27848, -27855, -27862, -27862, -27896, -27921, -27921, -27943, -27954, -27954, -27976, -27976, -27976, -27985, -28002, -28012, -28019, -28034, -28034, -28046, -28068, -28097, -28122, -28122, -28131, -28137, -28151, -28151, -28172, -28190, -28196, -28211, -28211, -28264, -28273, -28286, -28324, -28324, -28324, -28354, -28354, -28361, -28397, -28417, -28417, -28424, -28435, -28461, -28461, -28470, -28483, -28483, -28483, -28483, -28483, -28483, -28483, -28515, -28531, -28531, -28549, -28575, -28575, -28575, -28582, -28599, -28615, -28630, -28630, -28672, -28711, -28723, -28723, -28731, -28752, -28752, -28752, -28763, -28763, -28775, -28775, -28775, -28775, -28775, -28775, -28805, -28814, -28830, -28861, -28882, -28882, -28902, -28918, -28937, -28952, -28959, -28998, -29009, -29009, -29009, -29009, -29019, -29019, -29019, -29019, -29019, -29057, -29069, -29076, -29076, -29076, -29076, -29076, -29082, -29082, -29082, -29117, -29117, -29117, -29117, -29134, -29134, -29159, -29159, -29185, -29185, -29196, -29196, -29242, -29248, -29256, -29280, -29301, -29307, -29307, -29307, -29314, -29314, -29338, -29356, -29367, -29367, -29381, -29391, -29399, -29399, -29414, -29434, -29434, -29441, -29473, -29484, -29503, -29520, -29520, -29548, -29565, -29572, -29572, -29572, -29572, -29572, -29597, -29597, -29620, -29655, -29660, -29660, -29660, -29667, -29674, -29688, -29698, -29705, -29728, -29740, -29740, -29761, -29761, -29767, -29780, -29787, -29794, -29794, -29807, -29820, -29820, -29820, -29820, -29832, -29844, -29855, -29855, -29855, -29867, -29867, -29867, -29867, -29881, -29881, -29905, -29905, -29905, -29923, -29923, -29948, -29948, -29948, -29976, -29986, -29996, -29996, -30030, -30030, -30054, -30054, -30070, -30070, -30070, -30077, -30077, -30087, -30107, -30107, -30115, -30141, -30178, -30178, -30201, -30201, -30201, -30207, -30229, -30239, -30254, -30268, -30277, -30311, -30323, -30323, -30331, -30331, -30331, -30331, -30331, -30353, -30365, -30374, -30374, -30374, -30380, -30380, -30380, -30380, -30410, -30410, -30410, -30443, -30443, -30453, -30462, -30472, -30472, -30472, -30472, -30472, -30472, -30489, -30500, -30500, -30500, -30532, -30532, -30553, -30577, -30599, -30599, -30609, -30640, -30640, -30640, -30664, -30676, -30676, -30676, -30692, -30719, -30728, -30728, -30742, -30742, -30749, -30749, -30760, -30770, -30770, -30783, -30783, -30783, -30804, -30847, -30847, -30847, -30847, -30857, -30857, -30857, -30857, -30875, -30875, -30895, -30895, -30921, -30926, -30926, -30926, -30945, -30945, -30945, -30945, -30959, -30959, -30959, -30959, -30972, -30972, -30984, -31011, -31011, -31048, -31056, -31056, -31070, -31077, -31077, -31110, -31110, -31115, -31122, -31139, -31159, -31159, -31165, -31171, -31171, -31197, -31204, -31211, -31211, -31221, -31228, -31228, -31245, -31245, -31245, -31252, -31265, -31265, -31265, -31265, -31294, -31305, -31320, -31333, -31333, -31333, -31343, -31350, -31357, -31369, -31369, -31379, -31385, -31391, -31407, -31407, -31407, -31423, -31423, -31423, -31434, -31454, -31470, -31511, -31521, -31521, -31521, -31542, -31582, -31582, -31597, -31597, -31597, -31614, -31623, -31645, -31645, -31661, -31661, -31669, -31669, -31676, -31676, -31706, -31720, -31726, -31743, -31785, -31804, -31817, -31817, -31835, -31846, -31863, -31885, -31885, -31896, -31907, -31907, -31907, -31922, -31922, -31929, -31929, -31929, -31936, -31943, -31949, -31949, -31949, -31959, -32006, -32024, -32031, -32031, -32038, -32063, -32095, -32095, -32105, -32105, -32105, -32105, -32105, -32125, -32134, -32140, -32176, -32185, -32195, -32195, -32195, -32195, -32202, -32202, -32218, -32236, -32259, -32294, -32300, -32305, -32305, -32305, -32323, -32337, -32352, -32359, -32374, -32381, -32388, -32388, -32388, -32402, -32402, -32402, -32402, -32418, -32428, -32428, -32428, -32450, -32450, -32450, -32462, -32467, -32480, -32480, -32480, -32487, -32502, -32509, -32525, -32560, -32570, -32583, -32597, -32623, -32637, -32644, -32667, -32707, -32725, -32725, -32747, -32747, -32751, -32758, -32789, -32807, -32824, -32824, -32824, -32824, -32843, -32843, -32850, -32876, -32908, -32915, -32946, -32965, -32965, -32982, -33002, -33009, -33029, -33064, -33084, -33098, -33098, -33098, -33098, -33110, -33110, -33151, -33158, -33180, -33198, -33205, -33227, -33227, -33237, -33237, -33253, -33258, -33277, -33292, -33315, -33315, -33333, -33348, -33348, -33348, -33348, -33348, -33348, -33348, -33355, -33355, -33355, -33390, -33408, -33423, -33437, -33452, -33458, -33465, -33480, -33480, -33487, -33494, -33504, -33511, -33551, -33551, -33558, -33589, -33595, -33595, -33602, -33627, -33644, -33668, -33668, -33668, -33676, -33676, -33716, -33728, -33747, -33747, -33769, -33775, -33789, -33803, -33803, -33810, -33810, -33810, -33820, -33820, -33820, -33820, -33843, -33843, -33843, -33879, -33889, -33889, -33889, -33903, -33917, -33931, -33959, -33993, -34000, -34014, -34037, -34043, -34055, -34055, -34077, -34083, -34090, -34099, -34099, -34115, -34115, -34133, -34140, -34167, -34172, -34184, -34221, -34245, -34252, -34252, -34259, -34318, -34318, -34325, -34325, -34352, -34400, -34415, -34422, -34422, -34431, -34438, -34445, -34445, -34473, -34473, -34489, -34489, -34489, -34489, -34499, -34499, -34499, -34516, -34536, -34551, -34564, -34580, -34580, -34580, -34589, -34589, -34589, -34613, -34648, -34648, -34648, -34655, -34664, -34681, -34681, -34698, -34698, -34720, -34736, -34749, -34749, -34765, -34778, -34785, -34795, -34819, -34819, -34829, -34841, -34848, -34854, -34854, -34854, -34878, -34894, -34894, -34900, -34917, -34934, -34940, -34970, -34998, -34998, -35004, -35004, -35012, -35012, -35012, -35020, -35020, -35032, -35038, -35062, -35062, -35062, -35068, -35068, -35082, -35092, -35096, -35107, -35118, -35134, -35155, -35155, -35166, -35178, -35178, -35195, -35201, -35201, -35201, -35226, -35226, -35226, -35226, -35256, -35262, -35272, -35280, -35299, -35332, -35354, -35354, -35354, -35370, -35386, -35417, -35417, -35460, -35473, -35478, -35495, -35504, -35504, -35518, -35552, -35589, -35624, -35624, -35637, -35637, -35643, -35643, -35669, -35682, -35695, -35702, -35709, -35709, -35726, -35739, -35749, -35756, -35756, -35778, -35803, -35810, -35829, -35883, -35899, -35905, -35911, -35911, -35923, -35947, -35954, -35980, -35987, -36034, -36052, -36063, -36095, -36106, -36106, -36113, -36120, -36140, -36140, -36153, -36160, -36160, -36167, -36203, -36203, -36218, -36218, -36225, -36253, -36259, -36284, -36296, -36310, -36324, -36331, -36344, -36367, -36367, -36367, -36412, -36412, -36422, -36463, -36463, -36463, -36479, -36490, -36513, -36520, -36520, -36527, -36527, -36527, -36540, -36574, -36594, -36594, -36605, -36621, -36621, -36641, -36641, -36641, -36659, -36682, -36682, -36682, -36682, -36705, -36705, -36705, -36720, -36720, -36755, -36755, -36771, -36771, -36771, -36788, -36806, -36835, -36845, -36875, -36875, -36903, -36921, -36928, -36928, -36940, -36940, -36940, -36966, -36966, -36973, -36983, -36998, -37004, -37014, -37024, -37024, -37032, -37038, -37038, -37061, -37074, -37074, -37091, -37098, -37105, -37105, -37133, -37141, -37141, -37148, -37191, -37191, -37197, -37197, -37210, -37224, -37224, -37231, -37250, -37257, -37273, -37273, -37280, -37287, -37294, -37300, -37307, -37330, -37348, -37348, -37359, -37359, -37359, -37377, -37392, -37398, -37412, -37431, -37469, -37486, -37508, -37517, -37535, -37535, -37542, -37542, -37549, -37549, -37549, -37549, -37556, -37576, -37576, -37583, -37590, -37597, -37604, -37604, -37621, -37635, -37676, -37676, -37704, -37711, -37728, -37728, -37737, -37737, -37737, -37750, -37757, -37778, -37785, -37785, -37819, -37826, -37833, -37843, -37850, -37869, -37914, -37921, -37935, -37942, -37949, -37982, -38013, -38013, -38013, -38023, -38057, -38077, -38097, -38110, -38117, -38123, -38133, -38133, -38133, -38140, -38140, -38148, -38159, -38179, -38192, -38205, -38218, -38218, -38218, -38218, -38218, -38218, -38218, -38218, -38218, -38218, -38218, -38218, -38225, -38225, -38230, -38246, -38258, -38280, -38287, -38294, -38294, -38294, -38301, -38318, -38318, -38340, -38371, -38371, -38384, -38420, -38440, -38453, -38481, -38506, -38522, -38534, -38559, -38559, -38559, -38564, -38564, -38581, -38604, -38604, -38611, -38620, -38626, -38635, -38635, -38635, -38666, -38674, -38688, -38693, -38710, -38722, -38722, -38722, -38729, -38734, -38752, -38792, -38818, -38825, -38861, -38902, -38934, -38949, -38949, -38960, -38969, -38985, -38985, -38996, -39013, -39024, -39024, -39032, -39061, -39074, -39089, -39123, -39123, -39123, -39140, -39161, -39180, -39206, -39215, -39254, -39261, -39277, -39284, -39314, -39314, -39330, -39340, -39340, -39371, -39371, -39392, -39430, -39430, -39437, -39444, -39461, -39468, -39468, -39485, -39517, -39524, -39538, -39543, -39548, -39555, -39581, -39588, -39588, -39609, -39609, -39616, -39652, -39670, -39677, -39677, -39684, -39691, -39702, -39717, -39717, -39717, -39724, -39749, -39760, -39766, -39775, -39791, -39791, -39814, -39827, -39827, -39837, -39859}; - -static const char tldData[] = { -"com.cn\0" -"com.co\0" -"hb.cn\0" -"med.br\0conf.lv\0wallonie.museum\0" -"namsos.no\0" -"\xe7\xb6\xb2\xe7\xbb\x9c.hk\0farmers.museum\0rel.pl\0" -"com.cu\0" -"military.museum\0" -"*.jm\0convent.museum\0cymru.museum\0malvik.no\0" -"univ.sn\0" -"gliding.aero\0" -"wodzislaw.pl\0" -"com.dm\0!pref.iwate.jp\0tran\xc3\xb8y.no\0pila.pl\0" -"mb.it\0*.ke\0lib.ri.us\0" -"com.ec\0*.kh\0tr\xc3\xb8gstad.no\0" -"com.ee\0" -"mobi.gp\0" -"gran.no\0" -"wa.gov.au\0" -"com.dz\0kg.kr\0" -"zoological.museum\0gjerstad.no\0haugesund.no\0kharkov.ua\0" -"walbrzych.pl\0" -"civilization.museum\0" -"ha.no\0" -"*.kw\0" -"med.ec\0com.es\0" -"med.ee\0otago.museum\0svelvik.no\0" -"art.ht\0amber.museum\0elvendrell.museum\0rost.no\0" -"jx.cn\0gratangen.no\0" -"association.aero\0ca.it\0" -"zaporizhzhe.ua\0" -"com.fr\0" -"szex.hu\0" -"e-burg.ru\0" -"com.ge\0bokn.no\0" -"mordovia.ru\0" -"com.gh\0*.mm\0" -"com.gi\0z.se\0" -"cahcesuolo.no\0" -"hurdal.no\0joshkar-ola.ru\0" -"cadaques.museum\0ma.us\0" -"a.bg\0" -"com.gn\0bozen.it\0tambov.ru\0" -"*.gifu.jp\0*.tokyo.jp\0*.mt\0" -"com.gp\0travel\0cc.tx.us\0" -"com.gr\0hemne.no\0" -"*.ni\0" -"*.mz\0" -"cc.il.us\0" -"com.gy\0" -"zj.cn\0oksnes.no\0museum.tt\0" -"com.hk\0*.np\0" -"rc.it\0baseball.museum\0" -"com.hn\0exhibition.museum\0" -"h\xc3\xa1""bmer.no\0" -"com.hr\0" -"fg.it\0stathelle.no\0defense.tn\0" -"com.ht\0" -"qld.gov.au\0*.nz\0" -"davvenj\xc3\xa1rga.no\0*.om\0" -"vang.no\0" -"*.kumamoto.jp\0" -"vercelli.it\0usenet.pl\0" -"com.io\0stalbans.museum\0" -"com.iq\0" -"*.pg\0" -"com.is\0klabu.no\0skiptvet.no\0" -"med.ht\0field.museum\0" -"gr.it\0gj\xc3\xb8vik.no\0tromsa.no\0lib.mi.us\0" -"ca.na\0" -"hagebostad.no\0k12.ma.us\0" -"*.qa\0" -"*.niigata.jp\0" -"monzaebrianza.it\0com.jo\0comunica\xc3\xa7\xc3\xb5""es.museum\0" -"gr.jp\0" -"ballangen.no\0*.py\0" -"scienceandindustry.museum\0" -"nuoro.it\0com.kg\0" -"com.ki\0" -"im.it\0idv.tw\0" -"*.akita.jp\0com.km\0r\xc3\xb8ros.no\0sopot.pl\0" -"!pref.yamanashi.jp\0" -"com.kp\0" -"!pref.kochi.jp\0com.la\0" -"com.lb\0" -"com.lc\0stjordalshalsen.no\0sigdal.no\0cc.nm.us\0" -"samnanger.no\0" -"drobak.no\0" -"vt.it\0" -"catering.aero\0com.ky\0" -"com.kz\0cc.ca.us\0" -"com.lk\0" -"grosseto.it\0mosvik.no\0" -"namsskogan.no\0" -"loten.no\0" -"chirurgiens-dentistes.fr\0" -"com.lr\0bremanger.no\0" -"gs.cn\0" -"com.lv\0lib.co.us\0" -"com.mg\0" -"passenger-association.aero\0" -"com.ly\0yekaterinburg.ru\0" -"vladivostok.ru\0" -"com.mk\0beeldengeluid.museum\0" -"com.ml\0" -"art.pl\0" -"com.mo\0" -"britishcolumbia.museum\0tx.us\0" -"com.na\0sakhalin.ru\0*.sv\0" -"mc.it\0" -"amsterdam.museum\0udm.ru\0" -"com.mu\0" -"com.mv\0com.nf\0" -"com.mw\0com.ng\0il.us\0" -"geometre-expert.fr\0com.mx\0" -"med.ly\0com.my\0" -"ag.it\0" -"*.tr\0" -"!pref.oita.jp\0" -"hoyanger.no\0skedsmo.no\0" -"com.nr\0turystyka.pl\0" -"koebenhavn.museum\0" -"quebec.museum\0" -"stord.no\0*.uk\0" -"act.au\0" -"br.it\0cb.it\0gyeonggi.kr\0jobs.tt\0lib.hi.us\0" -"*.ve\0" -"*.saga.jp\0wildlife.museum\0com.pa\0" -"monzabrianza.it\0sciencehistory.museum\0stange.no\0oskol.ru\0principe.st\0*.uy\0" -"plaza.museum\0com.pe\0" -"com.pf\0" -"eigersund.no\0" -"com.ph\0" -"manx.museum\0marylhurst.museum\0" -"md.ci\0pi.it\0schweiz.museum\0com.pk\0" -"grp.lk\0fr\xc3\xb8ya.no\0com.pl\0press.se\0" -"us.com\0" -"b.bg\0cremona.it\0communication.museum\0art.sn\0" -"med.pa\0" -"com.pr\0" -"com.ps\0" -"com.pt\0" -"k12.in.us\0" -"ah.cn\0bahcavuotna.no\0" -"sondrio.it\0arkhangelsk.ru\0" -"cargo.aero\0" -"council.aero\0" -"museum.mv\0hattfjelldal.no\0spydeberg.no\0med.pl\0" -"niepce.museum\0museum.mw\0" -"anthropology.museum\0" -"pharmacien.fr\0smola.no\0" -"fin.ec\0" -"selbu.no\0" -"workinggroup.aero\0nm.us\0" -"museum.no\0com.re\0" -"cc.vt.us\0" -"village.museum\0" -"ca.us\0" -"*.sapporo.jp\0" -"teramo.it\0" -"com.ro\0" -"*.ye\0" -"com.sa\0" -"com.sb\0" -"so.it\0com.sc\0" -"jolster.no\0com.sd\0" -"com.ru\0" -"com.rw\0com.sg\0" -"sydney.museum\0" -"sa.edu.au\0" -"tom.ru\0" -"com.sl\0*.za\0" -"\xe7\xbd\x91\xe7\xb5\xa1.hk\0naturbruksgymn.se\0com.sn\0" -"assedic.fr\0com.so\0" -"!pref.mie.jp\0*.yu\0" -"med.sa\0" -"newspaper.museum\0holmestrand.no\0dnepropetrovsk.ua\0" -"christiansburg.museum\0roan.no\0" -"pesaro-urbino.it\0med.sd\0com.st\0" -"s\xc3\xb8gne.no\0" -"nuernberg.museum\0" -"*.zm\0" -"com.sy\0" -"*.nagano.jp\0com.tj\0" -"nt.gov.au\0news.hu\0paderborn.museum\0" -"boston.museum\0" -"com.tn\0" -"com.to\0" -"broadcast.museum\0" -"com.ua\0" -"*.zw\0" -"baikal.ru\0" -"bykle.no\0com.tt\0" -"verdal.no\0" -"roros.no\0" -"fi.cr\0carboniaiglesias.it\0chuvashia.ru\0com.tw\0" -"k12.ca.us\0" -"eidsvoll.no\0" -"*.ishikawa.jp\0" -"dolls.museum\0" -"naval.museum\0" -"karasjok.no\0tysvar.no\0" -"bielawa.pl\0com.vc\0" -"svalbard.no\0deatnu.no\0rnd.ru\0" -"grandrapids.museum\0" -"bauern.museum\0k12.pr.us\0" -"press.ma\0" -"*.kagawa.jp\0fribourg.museum\0przeworsk.pl\0com.vi\0" -"com.uz\0" -"babia-gora.pl\0" -"com.vn\0" -"med.pro\0" -"suedtirol.it\0kursk.ru\0" -"bonn.museum\0" -"lt.it\0" -"design.aero\0microlight.aero\0americanantiques.museum\0meland.no\0" -"insurance.aero\0aarborte.no\0" -"kh.ua\0" -"macerata.it\0architecture.museum\0" -"rovigo.it\0rawa-maz.pl\0" -"store.nf\0levanger.no\0" -"b\xc3\xa1jddar.no\0" -"not.br\0" -"com.ws\0" -"!pref.kagawa.jp\0" -"!omanpost.om\0" -"vt.us\0" -"gs.ah.no\0vladikavkaz.ru\0" -"no.it\0" -"in.na\0szkola.pl\0a.se\0" -"aid.pl\0" -"workshop.museum\0vegarshei.no\0" -"sund.no\0" -"bs.it\0flora.no\0" -"agriculture.museum\0" -"koeln.museum\0" -"minnesota.museum\0k12.il.us\0" -"froya.no\0" -"aeroport.fr\0" -"davvenjarga.no\0zgora.pl\0ivano-frankivsk.ua\0" -"*.gunma.jp\0" -"amot.no\0" -"mus.br\0chungbuk.kr\0" -"ggf.br\0lorenskog.no\0" -"jeonbuk.kr\0" -"k12.vi.us\0" -"c.bg\0sande.more-og-romsdal.no\0" -"perugia.it\0" -"massa-carrara.it\0" -"michigan.museum\0" -"archaeology.museum\0mosj\xc3\xb8""en.no\0czest.pl\0koenig.ru\0\xe0\xb6\xbd\xe0\xb6\x82\xe0\xb6\x9a\xe0\xb7\x8f\0" -"mobi.tt\0" -"kraanghke.no\0" -"cc.in.us\0" -"re.it\0lib.vt.us\0" -"dell-ogliastra.it\0" -"s\xc3\xb8mna.no\0" -"k12.wv.us\0" -"gok.pk\0fh.se\0" -"luzern.museum\0" -"fi.it\0swidnica.pl\0" -"cbg.ru\0" -"latina.it\0" -"vibovalentia.it\0" -"modum.no\0" -"safety.aero\0" -"sp.it\0" -"science.museum\0ah.no\0" -"norddal.no\0" -"cc.na\0" -"re.kr\0" -"dielddanuorri.no\0" -"force.museum\0" -"torino.it\0cc.md.us\0" -"artanddesign.museum\0pisz.pl\0" -"olsztyn.pl\0" -"unsa.ba\0rade.no\0vinnica.ua\0" -"in.rs\0astrakhan.ru\0" -"sogne.no\0" -"homebuilt.aero\0" -"polkowice.pl\0" -"hole.no\0health.vn\0" -"fj.cn\0" -"davvesiida.no\0" -"vic.au\0" -"kongsberg.no\0" -"pub.sa\0" -"vv.it\0" -"!pref.tottori.jp\0" -"*.sendai.jp\0in.th\0" -"lib.pa.us\0" -"chiropractic.museum\0" -"mobi.na\0aca.pro\0" -"konyvelo.hu\0sciencecenters.museum\0" -"he.cn\0" -"in.ua\0" -"!city.nagoya.jp\0" -"muenchen.museum\0" -"psi.br\0" -"maryland.museum\0" -"!statecouncil.om\0" -"tr\xc3\xa6na.no\0" -"!pref.yamagata.jp\0jewishart.museum\0" -"lu.it\0me.it\0" -"chel.ru\0" -"tatarstan.ru\0" -"adult.ht\0in.us\0" -"kafjord.no\0" -"\xd7\x99\xd7\xa8\xd7\x95\xd7\xa9\xd7\x9c\xd7\x99\xd7\x9d.museum\0" -"net.ac\0k12.ec\0" -"net.ae\0bashkiria.ru\0" -"net.af\0!omantel.om\0" -"net.ag\0" -"net.ai\0" -"!pref.toyama.jp\0" -"net.al\0timekeeping.museum\0" -"net.an\0design.museum\0fin.tn\0" -"ethnology.museum\0" -"perso.ht\0asker.no\0b.se\0" -"net.ba\0" -"net.bb\0flanders.museum\0" -"mincom.tn\0" -"frana.no\0" -"bt.it\0" -"net.bh\0" -"auto.pl\0" -"net.az\0" -"treviso.it\0" -"war.museum\0" -"net.bm\0" -"langevag.no\0m\xc3\xa5lselv.no\0" -"net.bo\0" -"gol.no\0" -"folkebibl.no\0" -"net.br\0" -"net.bs\0troandin.no\0saotome.st\0lib.tn.us\0" -"md.us\0k12.ut.us\0" -"d.bg\0cambridge.museum\0\xc3\xa5s.no\0" -"net.ci\0" -"net.bz\0" -"sch.ae\0undersea.museum\0odda.no\0" -"net.cn\0" -"net.co\0c.la\0" -"gliwice.pl\0" -"aurskog-h\xc3\xb8land.no\0" -"andria-trani-barletta.it\0" -"net.cu\0loab\xc3\xa1t.no\0" -"rep.kp\0" -"\xe7\xbb\x84\xe7\xb9\x94.hk\0" -"gallery.museum\0" -"\xc3\xb8rland.no\0" -"store.ro\0" -"net.dm\0" -"somna.no\0" -"hemnes.no\0" -"ringebu.no\0k12.ky.us\0" -"net.ec\0" -"dn.ua\0" -"tarnobrzeg.pl\0" -"soc.lk\0" -"romsa.no\0" -"bamble.no\0" -"net.dz\0lutsk.ua\0" -"barlettatraniandria.it\0ta.it\0countryestate.museum\0" -"kaszuby.pl\0" -"*.yamaguchi.jp\0cranbrook.museum\0store.st\0" -"southcarolina.museum\0lib.md.us\0" -"textile.museum\0" -"cheltenham.museum\0hurum.no\0" -"*.oita.jp\0" -"shop.ht\0cc.me.us\0" -"shop.hu\0turin.it\0" -"louvre.museum\0" -"k12.ar.us\0" -"consulting.aero\0" -"gv.ao\0" -"sauherad.no\0" -"gv.at\0net.ge\0" -"ostre-toten.no\0lib.ok.us\0" -"net.gg\0pilots.museum\0" -"2000.hu\0geology.museum\0" -"net.gn\0" -"mazowsze.pl\0bir.ru\0" -"net.gp\0" -"net.gr\0" -"oxford.museum\0" -"per.la\0" -"eastafrica.museum\0" -"meeres.museum\0" -"net.gy\0*.shizuoka.jp\0" -"\xe5\x95\x86\xe6\xa5\xad.tw\0" -"net.hk\0" -"net.hn\0" -"philadelphiaarea.museum\0" -"osen.no\0" -"net.ht\0net.id\0" -"fundacio.museum\0" -"j\xc3\xb8rpeland.no\0" -"\xe6\x95\x99\xe8\x82\xb2.hk\0" -"divtasvuodna.no\0" -"student.aero\0sch.gg\0net.im\0" -"\xe7\xbd\x91\xe7\xbb\x9c.cn\0net.in\0" -"net.iq\0" -"net.ir\0" -"net.is\0" -"net.je\0" -"kepno.pl\0lapy.pl\0" -"per.nf\0" -"gov\0*.shimane.jp\0" -"artcenter.museum\0" -"k\xc3\xa5""fjord.no\0" -"net.jo\0" -"eu.int\0" -"c.se\0" -"net.kg\0" -"ce.it\0net.ki\0" -"sch.id\0os.hedmark.no\0" -"columbus.museum\0" -"arteducation.museum\0" -"net.kn\0" -"kr.com\0" -"net.la\0bushey.museum\0cc.gu.us\0" -"net.lb\0" -"net.lc\0" -"gs.bu.no\0" -"e164.arpa\0" -"chieti.it\0labour.museum\0" -"sch.ir\0creation.museum\0krodsherad.no\0" -"net.ky\0" -"net.kz\0me.us\0" -"e.bg\0sch.je\0net.lk\0" -"zlg.br\0suwalki.pl\0" -"\xe5\x80\x8b\xe4\xba\xba.hk\0net.ma\0" -"net.lr\0" -"sch.jo\0notaires.km\0net.me\0" -"net.lv\0karate.museum\0" -"net.ly\0karm\xc3\xb8y.no\0" -"rg.it\0" -"net.mk\0" -"net.ml\0evenes.no\0" -"ngo.lk\0net.mo\0egyptian.museum\0" -"marine.ru\0" -"realestate.pl\0" -"net.mu\0" -"net.mv\0net.nf\0" -"net.mw\0net.ng\0gda.pl\0" -"net.mx\0" -"freemasonry.museum\0net.my\0enebakk.no\0" -"karlsoy.no\0" -"\xe7\xbd\x91\xe7\xbb\x9c.hk\0\xc3\xb8rskog.no\0" -"randaberg.no\0" -"club.aero\0" -"certification.aero\0sr.it\0" -"center.museum\0so.gov.pl\0" -"caa.aero\0" -"sch.lk\0tvedestrand.no\0" -"net.nr\0" -"luroy.no\0" -"aukra.no\0s\xc3\xa1lat.no\0lib.me.us\0" -"ddr.museum\0" -"york.museum\0stryn.no\0k12.nm.us\0" -"per.sg\0" -"judaica.museum\0" -"verona.it\0" -"agdenes.no\0" -"cng.br\0sch.ly\0" -"net.pa\0" -"author.aero\0" -"naturalhistory.museum\0steiermark.museum\0bu.no\0" -"sn\xc3\xa5sa.no\0net.pe\0" -"net.ph\0" -"savannahga.museum\0batsfjord.no\0lib.oh.us\0" -"net.pk\0" -"net.pl\0" -"net.pn\0" -"washingtondc.museum\0" -"net.pr\0" -"net.ps\0" -"net.pt\0" -"nordkapp.no\0" -"emergency.aero\0krokstadelva.no\0" -"satx.museum\0ngo.ph\0omsk.ru\0" -"texas.museum\0" -"ngo.pl\0" -"mantova.it\0gu.us\0" -"!pref.shiga.jp\0isa.us\0" -"usa.museum\0" -"gb.net\0k12.vi\0" -"iveland.no\0" -"tempio-olbia.it\0" -"net.sa\0" -"net.sb\0" -"works.aero\0net.sc\0komvux.se\0" -"net.sd\0" -"net.ru\0" -"0.bg\0" -"forlicesena.it\0net.rw\0net.sg\0" -"klodzko.pl\0" -"detroit.museum\0wegrow.pl\0" -"net.sl\0" -"glogow.pl\0" -"store.bb\0air.museum\0" -"net.so\0" -"katowice.pl\0" -"nsk.ru\0" -"pisa.it\0eid.no\0" -"net.st\0" -"film.hu\0" -"tuva.ru\0d.se\0" -"net.th\0" -"net.sy\0" -"viterbo.it\0tsaritsyn.ru\0perso.sn\0net.tj\0" -"lib.gu.us\0" -"plc.co.im\0sec.ps\0" -"r\xc3\xa1hkker\xc3\xa1vju.no\0kazimierz-dolny.pl\0net.tn\0" -"net.to\0" -"veterinaire.km\0" -"net.ua\0" -"info.ht\0net.tt\0" -"info.hu\0" -"exchange.aero\0" -"sch.sa\0net.tw\0" -"andriatranibarletta.it\0perso.tn\0" -"f.bg\0malselv.no\0" -"net.vc\0" -"trana.no\0" -"ns.ca\0" -"net.vi\0" -"lucca.it\0oristano.it\0" -"usarts.museum\0net.vn\0" -"gon.pk\0" -"pl.ua\0" -"eastcoast.museum\0" -"novara.it\0" -"k12.ks.us\0" -"dp.ua\0" -"nesseby.no\0" -"!pref.wakayama.jp\0" -"repbody.aero\0" -"jamison.museum\0lugansk.ua\0" -"ss.it\0" -"alessandria.it\0" -"hadsel.no\0net.ws\0" -"\xe0\xae\x9a\xe0\xae\xbf\xe0\xae\x99\xe0\xaf\x8d\xe0\xae\x95\xe0\xae\xaa\xe0\xaf\x8d\xe0\xae\xaa\xe0\xaf\x82\xe0\xae\xb0\xe0\xaf\x8d\0" -"veterinaire.fr\0leirfjord.no\0" -"massacarrara.it\0north.museum\0" -"project.museum\0" -"other.nf\0" -"k12.nh.us\0" -"mat.br\0artgallery.museum\0" -"sr.gov.pl\0" -"gamvik.no\0" -"info.ec\0lancashire.museum\0" -"fm.br\0ltd.co.im\0" -"americana.museum\0southwest.museum\0cc.ak.us\0" -"enna.it\0lunner.no\0" -"v\xc3\xa5gan.no\0" -"mari.ru\0" -"accident-investigation.aero\0" -"sor-aurdal.no\0lib.ny.us\0" -"novosibirsk.ru\0" -"bjugn.no\0" -"n\xc3\xa6r\xc3\xb8y.no\0ostrowwlkp.pl\0" -"info.bb\0foundation.museum\0" -"brand.se\0" -"info.at\0!pref.akita.jp\0l\xc3\xb8ten.no\0" -"coal.museum\0miners.museum\0" -"glass.museum\0" -"info.az\0" -"frog.museum\0szczytno.pl\0nov.ru\0" -"sunndal.no\0" -"gen.in\0" -"gx.cn\0" -"web.co\0*.mie.jp\0hobol.no\0\xe5\x8f\xb0\xe6\xb9\xbe\0" -"logistics.aero\0plo.ps\0" -"erotika.hu\0" -"torsken.no\0" -"exeter.museum\0" -"info.co\0" -"selje.no\0" -"storfjord.no\0" -"barum.no\0lind\xc3\xa5s.no\0" -"leasing.aero\0" -"championship.aero\0fst.br\0" -"lierne.no\0" -"!gobiernoelectronico.ar\0""1.bg\0" -"corporation.museum\0" -"al.it\0*.miyagi.jp\0" -"*.aomori.jp\0" -"\xd8\xa7\xd9\x84\xd8\xa7\xd8\xb1\xd8\xaf\xd9\x86\0" -"amursk.ru\0" -"vestvagoy.no\0" -"\xd8\xa7\xdb\x8c\xd8\xb1\xd8\xa7\xd9\x86.ir\0cc.fl.us\0" -"os.hordaland.no\0" -"pistoia.it\0" -"tver.ru\0e.se\0" -"res.in\0*.yamagata.jp\0syzran.ru\0" -"capebreton.museum\0sandnessj\xc3\xb8""en.no\0" -"ternopil.ua\0" -"shop.pl\0" -"tank.museum\0" -"m\xc3\xa5s\xc3\xb8y.no\0" -"potenza.it\0time.museum\0" -"mjondalen.no\0" -"eng.br\0nedre-eiker.no\0" -"air-surveillance.aero\0" -"nt.au\0am.br\0pn.it\0" -"oystre-slidre.no\0ug.gov.pl\0" -"g.bg\0nesodden.no\0vologda.ru\0" -"parma.it\0tula.ru\0" -"*.nara.jp\0ak.us\0" -"nt.ca\0konin.pl\0" -"kiev.ua\0" -"skierv\xc3\xa1.no\0vestre-toten.no\0" -"ri.it\0botanical.museum\0farsund.no\0veg\xc3\xa5rshei.no\0dagestan.ru\0" -"ind.br\0k-uralsk.ru\0" -"rahkkeravju.no\0cmw.ru\0" -"canada.museum\0" -"fm.it\0" -"cc.wi.us\0" -"web.id\0aver\xc3\xb8y.no\0" -"dudinka.ru\0" -"baghdad.museum\0fitjar.no\0grane.no\0" -"gs.fm.no\0" -"sumy.ua\0" -"al.no\0" -"westfalen.museum\0" -"oregon.museum\0" -"bruxelles.museum\0elk.pl\0" -"planetarium.museum\0sn\xc3\xa5""ase.no\0" -"s\xc3\xb8rreisa.no\0" -"gs.st.no\0skien.no\0" -"bible.museum\0ivanovo.ru\0" -"avellino.it\0" -"tgory.pl\0" -"family.museum\0" -"ppg.br\0k12.as.us\0" -"trader.aero\0gorlice.pl\0" -"cc.al.us\0" -"ogliastra.it\0" -"is.it\0lib.nv.us\0" -"dr.na\0" -"media.hu\0nesna.no\0fl.us\0" -"uri.arpa\0" -"bjerkreim.no\0" -"charter.aero\0" -"genova.it\0" -"it.ao\0botany.museum\0hapmir.no\0" -"educational.museum\0" -"helsinki.museum\0" -"memorial.museum\0" -"web.lk\0pharmacy.museum\0" -"aircraft.aero\0appspot.com\0" -"ferrara.it\0beskidy.pl\0" -"hi.cn\0" -"taxi.aero\0flekkefjord.no\0" -"varoy.no\0" -"ragusa.it\0ambulance.museum\0" -"can.museum\0" -"*.osaka.jp\0isleofman.museum\0fm.no\0warmia.pl\0" -"educator.aero\0asmatart.museum\0" -"mi.it\0" -"kutno.pl\0" -"skedsmokorset.no\0" -"2.bg\0" -"*.kagoshima.jp\0km.ua\0" -"!city.sendai.jp\0" -"web.nf\0st.no\0cc.ri.us\0" -"reggiocalabria.it\0" -"wi.us\0" -"ancona.it\0newjersey.museum\0nnov.ru\0" -"f.se\0" -"ind.in\0" -"info.vn\0" -"andoy.no\0" -"ch.it\0fredrikstad.no\0guovdageaidnu.no\0" -"fjaler.no\0" -"sa.com\0" -"gs.nt.no\0" -"masfjorden.no\0" -"pordenone.it\0" -"po.it\0basel.museum\0" -"chambagri.fr\0" -"h.bg\0web.pk\0" -"london.museum\0" -"sciencecenter.museum\0\xe0\xb9\x84\xe0\xb8\x97\xe0\xb8\xa2\0" -"unbi.ba\0augustow.pl\0" -"wolomin.pl\0" -"notaires.fr\0tcm.museum\0al.us\0" -"nu.ca\0!pref.nagano.jp\0" -"info.tn\0" -"lib.wa.us\0" -"ed.ao\0info.tt\0" -"barreau.bj\0" -"k12.wy.us\0" -"pp.az\0gop.pk\0" -"int\0" -"l\xc3\xb8renskog.no\0podhale.pl\0" -"voagat.no\0" -"telekommunikation.museum\0" -"qld.au\0" -"te.it\0freiburg.museum\0snasa.no\0" -"gjemnes.no\0" -"sejny.pl\0" -"media.pl\0" -"skjak.no\0" -"watchandclock.museum\0" -"ed.ci\0pacific.museum\0" -"theater.museum\0info.ro\0" -"uk.com\0" -"campobasso.it\0aquarium.museum\0tysv\xc3\xa6r.no\0" -"kragero.no\0" -"windmill.museum\0info.sd\0" -"sologne.museum\0sande.m\xc3\xb8re-og-romsdal.no\0" -"nt.no\0cc.mi.us\0" -"ed.cr\0" -"academy.museum\0zachpomor.pl\0" -"tananger.no\0v\xc3\xa1rgg\xc3\xa1t.no\0ri.us\0" -"federation.aero\0" -"web.tj\0" -"matta-varjjat.no\0" -"steigen.no\0" -"local\0akrehamn.no\0" -"!pref.chiba.jp\0info.pk\0" -"info.pl\0""6bone.pl\0" -"klepp.no\0kherson.ua\0" -"ketrzyn.pl\0info.pr\0" -"sweden.museum\0" -"lardal.no\0" -"!retina.ar\0gz.cn\0" -"barletta-trani-andria.it\0vikna.no\0" -"bearalv\xc3\xa1hki.no\0" -"broker.aero\0gov.nc.tr\0" -"info.na\0k12.fl.us\0" -"hembygdsforbund.museum\0" -"entertainment.aero\0jerusalem.museum\0l\xc3\xa6rdal.no\0" -"hitra.no\0sogndal.no\0" -"farmequipment.museum\0info.mv\0info.nf\0\xc3\xa5lg\xc3\xa5rd.no\0" -"la-spezia.it\0" -"skanland.no\0fam.pk\0" -"skole.museum\0" -"art.museum\0" -"presidio.museum\0" -"3.bg\0public.museum\0" -"h\xc3\xb8yanger.no\0zagan.pl\0" -"an.it\0" -"philadelphia.museum\0info.nr\0" -"pesarourbino.it\0g\xc3\xa1ivuotna.no\0" -"poltava.ua\0" -"nt.ro\0" -"station.museum\0" -"mi.th\0" -"altoadige.it\0" -"nu.it\0" -"usculture.museum\0g.se\0" -"h\xc3\xa1mm\xc3\xa1rfeasta.no\0" -"daegu.kr\0info.la\0" -"dovre.no\0" -"ci.it\0horology.museum\0" -"bergbau.museum\0" -"press.museum\0" -"gangwon.kr\0" -"!city.kitakyushu.jp\0sor-varanger.no\0cc.hi.us\0" -"fuossko.no\0" -"zp.ua\0" -"american.museum\0" -"fl\xc3\xa5.no\0mi.us\0" -"i.bg\0" -"od.ua\0" -"encyclopedic.museum\0" -"ind.tn\0" -"midatlantic.museum\0" -"newyork.museum\0" -"castres.museum\0" -"act.edu.au\0" -"topology.museum\0" -"ed.jp\0" -"of.by\0" -"iris.arpa\0inf.br\0askim.no\0pyatigorsk.ru\0" -"nord-fron.no\0nsn.us\0" -"beardu.no\0" -"agrar.hu\0corvette.museum\0chtr.k12.ma.us\0" -"figueres.museum\0" -"!pref.gunma.jp\0medizinhistorisches.museum\0" -"tjeldsund.no\0" -"nebraska.museum\0" -"bellevue.museum\0" -"abo.pa\0k12.al.us\0" -"info.ki\0" -"inf.cu\0sv.it\0" -"jfk.museum\0" -"!city.osaka.jp\0swinoujscie.pl\0" -"bydgoszcz.pl\0" -"!city.kyoto.jp\0" -"uvic.museum\0" -"madrid.museum\0steinkjer.no\0" -"lib.ma.us\0" -"sirdal.no\0" -"n\xc3\xb8tter\xc3\xb8y.no\0" -"taranto.it\0starnberg.museum\0" -"vic.gov.au\0pvt.ge\0pors\xc3\xa1\xc5\x8bgu.no\0" -"naroy.no\0ris\xc3\xb8r.no\0" -"va.it\0salem.museum\0starachowice.pl\0" -"!nawrastelecom.om\0" -"town.museum\0te.ua\0" -"se.net\0" -"kemerovo.ru\0" -"lerdal.no\0" -"gs.va.no\0" -"kms.ru\0" -"consulado.st\0" -"haram.no\0" -"tysnes.no\0" -"!pref.ibaraki.jp\0hamburg.museum\0" -"\xc3\xa5rdal.no\0" -"airline.aero\0" -"crew.aero\0newhampshire.museum\0" -"muenster.museum\0" -"aerodrome.aero\0" -"heroy.nordland.no\0belau.pw\0" -"kamchatka.ru\0" -"b\xc3\xa5""d\xc3\xa5""ddj\xc3\xa5.no\0lillehammer.no\0hi.us\0" -"hk.cn\0" -"!city.kobe.jp\0berlevag.no\0" -"ardal.no\0" -"askoy.no\0" -"vardo.no\0" -"fyresdal.no\0" -"sassari.it\0" -"video.hu\0drammen.no\0" -"lyngen.no\0nakhodka.ru\0" -"ip6.arpa\0games.hu\0" -"online.museum\0" -"k12.sd.us\0" -"4.bg\0sebastopol.ua\0" -"ao.it\0atlanta.museum\0" -"lebork.pl\0" -"ravenna.it\0" -"railway.museum\0songdalen.no\0" -"!pref.shimane.jp\0delaware.museum\0ed.pw\0" -"f\xc3\xb8rde.no\0" -"living.museum\0" -"juif.museum\0" -"lomza.pl\0" -"h.se\0" -"!bl.uk\0" -"portland.museum\0\xe7\xb5\x84\xe7\xb9\x94.tw\0" -"stj\xc3\xb8rdal.no\0" -"lecce.it\0" -"bz.it\0" -"farmstead.museum\0va.no\0" -"express.aero\0!nacion.ar\0" -"presse.km\0gs.of.no\0" -"\xe5\x8f\xb0\xe7\x81\xa3\0" -"og.ao\0gyeongbuk.kr\0vestv\xc3\xa5g\xc3\xb8y.no\0" -"prd.fr\0" -"pp.ru\0pp.se\0" -"forum.hu\0!pref.saga.jp\0" -"kvalsund.no\0" -"!city.kawasaki.jp\0n\xc3\xa5\xc3\xa5mesjevuemie.no\0" -"j.bg\0" -"vlaanderen.museum\0" -"cc.va.us\0" -"\xd8\xa7\xd9\x8a\xd8\xb1\xd8\xa7\xd9\x86.ir\0alabama.museum\0" -"school.museum\0her\xc3\xb8y.m\xc3\xb8re-og-romsdal.no\0" -"\xc3\xa5seral.no\0" -"traniandriabarletta.it\0" -"flog.br\0" -"presse.ml\0" -"k\xc3\xa1r\xc3\xa1\xc5\xa1johka.no\0" -"historisch.museum\0" -"farm.museum\0palmsprings.museum\0oslo.no\0dyroy.no\0stranda.no\0" -"gs.rl.no\0r\xc3\xa5""de.no\0" -"bomlo.no\0s\xc3\xb8rum.no\0" -"jan-mayen.no\0ivgu.no\0" -"coop\0" -"agr.br\0k12.ak.us\0" -"!nic.ar\0catanzaro.it\0fusa.no\0" -"hu.com\0" -"inf.mk\0" -"vet.br\0" -"k12.mt.us\0k12.nd.us\0" -"vlog.br\0\xe5\x85\xac\xe5\x8f\xb8.cn\0sandnessjoen.no\0" -"lib.az.us\0" -"nsw.edu.au\0of.no\0\xc3\xb8stre-toten.no\0" -"*.okinawa.jp\0" -"vb.it\0" -"asso.fr\0firenze.it\0" -"trieste.it\0" -"\xe5\x85\xac\xe5\x8f\xb8.hk\0" -"museet.museum\0" -"prd.km\0" -"navuotna.no\0lib.ca.us\0" -"cc.nv.us\0" -"asso.gp\0" -"meraker.no\0" -"h\xc3\xa1pmir.no\0" -"i.ph\0" -"sx.cn\0jeonnam.kr\0" -"halden.no\0" -"fed.us\0" -"medio-campidano.it\0tsk.ru\0" -"barcelona.museum\0" -"giessen.museum\0roma.museum\0" -"hl.cn\0" -"\xe0\xae\x87\xe0\xae\xb2\xe0\xae\x99\xe0\xaf\x8d\xe0\xae\x95\xe0\xaf\x88\0" -"biz.bb\0benevento.it\0rl.no\0bygland.no\0" -"port.fr\0asso.ht\0prd.mg\0" -"biz.at\0" -"tra.kp\0" -"*.aichi.jp\0khabarovsk.ru\0" -"campidano-medio.it\0" -"biz.az\0" -"newmexico.museum\0va.us\0" -"finearts.museum\0" -"murmansk.ru\0" -"\xc3\xb8rsta.no\0radom.pl\0k12.sc.us\0" -"5.bg\0kvinesdal.no\0" -"ap.it\0" -"*.fukushima.jp\0" -"asso.bj\0" -"mad.museum\0" -"lebesby.no\0" -"og.it\0glas.museum\0sauda.no\0" -"i.se\0" -"k12.tx.us\0" -"asso.ci\0mk.ua\0" -"cesena-forli.it\0" -"lowicz.pl\0" -"k12.id.us\0" -"tas.gov.au\0" -"lukow.pl\0" -"utazas.hu\0" -"maritimo.museum\0bjark\xc3\xb8y.no\0" -"adm.br\0" -"pr.it\0lib.vi.us\0" -"bergamo.it\0k12.va.us\0" -"k.bg\0" -"railroad.museum\0" -"!british-library.uk\0" -"cincinnati.museum\0" -"sorreisa.no\0" -"asso.dz\0!nel.uk\0" -"rm.it\0" -"nv.us\0" -"nx.cn\0gos.pk\0" -"vic.edu.au\0" -"biella.it\0tjome.no\0" -"r\xc3\xb8yken.no\0" -"beiarn.no\0" -"qc.ca\0" -"georgia.museum\0square.museum\0" -"labor.museum\0omasvuotna.no\0cc.la.us\0" -"br.com\0reggioemilia.it\0" -"kristiansund.no\0" -"sorum.no\0" -"orsta.no\0" -"furniture.museum\0surrey.museum\0eng.pro\0" -"asn.lv\0balat.no\0" -"lavangen.no\0sld.pa\0" -"fla.no\0k12.ms.us\0k12.nc.us\0" -"bardu.no\0" -"donostia.museum\0" -"club.tw\0" -"elburg.museum\0" -"gs.hl.no\0lodingen.no\0" -"samara.ru\0" -"vc.it\0*.nagasaki.jp\0" -"fosnes.no\0" -"fuel.aero\0" -"qc.com\0" -"skjervoy.no\0" -"bill.museum\0kv\xc3\xa6""fjord.no\0" -"skydiving.aero\0*.tokushima.jp\0" -"!congresodelalengua3.ar\0laquila.it\0k12.ct.us\0" -"gorge.museum\0linz.museum\0sherbrooke.museum\0" -"tranoy.no\0ing.pa\0" -"ptz.ru\0" -"kr.it\0prato.it\0stat.no\0" -"\xd0\xb8\xd0\xba\xd0\xbe\xd0\xbc.museum\0" -"cosenza.it\0" -"stj\xc3\xb8rdalshalsen.no\0" -"finland.museum\0leka.no\0cc.pr.us\0" -"historichouses.museum\0s\xc3\xa1l\xc3\xa1t.no\0" -"venice.it\0" -"biz.ki\0" -"g\xc3\xa1ls\xc3\xa1.no\0" -"\xe7\xbb\x84\xe7\xbb\x87.hk\0" -"*.yamanashi.jp\0" -"rad\xc3\xb8y.no\0" -"6.bg\0" -"fareast.ru\0" -"paragliding.aero\0ba.it\0aq.it\0" -"sk\xc3\xa5nland.no\0" -"its.me\0" -"us.na\0" -"hl.no\0cc.ga.us\0" -"ac\0granvin.no\0" -"ad\0qld.edu.au\0!city.sapporo.jp\0" -"ae\0" -"af\0" -"ag\0crotone.it\0" -"dallas.museum\0" -"ai\0brussels.museum\0" -"dali.museum\0" -"la.us\0" -"al\0salzburg.museum\0" -"am\0" -"an\0cl.it\0" -"ao\0" -"aq\0ba\0" -"bb\0" -"as\0lajolla.museum\0" -"at\0" -"be\0" -"bf\0inderoy.no\0snz.ru\0" -"aw\0bg\0" -"ax\0bh\0cim.br\0ltd.gi\0biz.mv\0" -"bi\0xz.cn\0\xe7\xb5\x84\xe7\xb9\x94.hk\0biz.mw\0" -"az\0bj\0" -"bm\0tranibarlettaandria.it\0naamesjevuemie.no\0" -"chattanooga.museum\0" -"bo\0" -"l.bg\0" -"ca\0" -"br\0stateofdelaware.museum\0" -"bs\0cc\0" -"cd\0biz.nr\0" -"cf\0berlev\xc3\xa5g.no\0" -"bw\0cg\0snaase.no\0" -"ch\0harvestcelebration.museum\0ck.ua\0" -"by\0ci\0" -"bz\0bahccavuotna.no\0" -"cl\0yuzhno-sakhalinsk.ru\0" -"cm\0halsa.no\0lyngdal.no\0" -"cn\0" -"co\0rn.it\0childrens.museum\0frankfurt.museum\0" -"cr\0" -"pskov.ru\0" -"cu\0de\0" -"cv\0fr.it\0lib.ky.us\0" -"aseral.no\0kvam.no\0" -"cx\0hellas.museum\0" -"hof.no\0" -"cz\0dj\0k12.la.us\0" -"dk\0moscow.museum\0" -"sosnowiec.pl\0" -"dm\0biz.pk\0" -"schokoladen.museum\0biz.pl\0" -"far.br\0arna.no\0tynset.no\0" -"even\xc3\xa1\xc5\xa1\xc5\xa1i.no\0" -"ec\0" -"biz.pr\0" -"ee\0celtic.museum\0" -"scientist.aero\0modern.museum\0" -"pr.us\0" -"dz\0" -"mj\xc3\xb8ndalen.no\0s\xc3\xb8r-odal.no\0" -"!nic.tr\0" -"conference.aero\0vestnes.no\0k12.mn.us\0" -"!pref.hiroshima.jp\0" -"es\0trapani.it\0" -"fermo.it\0vard\xc3\xb8.no\0" -"eu\0gs.hm.no\0r\xc3\xb8""d\xc3\xb8y.no\0stordal.no\0" -"gc.ca\0!nhs.uk\0" -"jgora.pl\0" -"fi\0stjordal.no\0" -"fm\0!mediaphone.om\0" -"kirov.ru\0pvt.k12.ma.us\0" -"fo\0" -"ga\0hyllestad.no\0" -"gov.ac\0fr\0andriabarlettatrani.it\0ga.us\0" -"gov.ae\0gd\0estate.museum\0" -"gov.af\0ge\0tolga.no\0" -"gf\0asso.re\0cc.oh.us\0" -"gg\0florida.museum\0" -"presse.ci\0gh\0" -"gi\0k12.dc.us\0" -"ltd.lk\0orland.no\0" -"gov.al\0" -"gl\0tokke.no\0" -"hanggliding.aero\0gm\0" -"hareid.no\0" -"gov.ba\0tj.cn\0gp\0" -"gov.bb\0gq\0" -"gov.as\0gr\0agrigento.it\0lc.it\0" -"gs\0kalmykia.ru\0aero.tt\0" -"gov.bf\0" -"county.museum\0" -"gov.bh\0hn.cn\0gw\0" -"gov.az\0gy\0assn.lk\0guernsey.museum\0" -"hk\0" -"gov.bm\0h\xc3\xa6gebostad.no\0biz.tj\0" -"hm\0computer.museum\0" -"gov.bo\0hn\0kl\xc3\xa6""bu.no\0" -"pulawy.pl\0" -"gov.br\0" -"trd.br\0gov.bs\0hr\0reggio-calabria.it\0historyofscience.museum\0lipetsk.ru\0" -"gov.cd\0*.nagoya.jp\0" -"ht\0id\0spjelkavik.no\0" -"hu\0ie\0aero.mv\0" -"marketplace.aero\0mn.it\0biz.tt\0" -"gov.by\0saintlouis.museum\0mer\xc3\xa5ker.no\0" -"gov.bz\0" -"7.bg\0gov.cl\0virtual.museum\0" -"gov.cm\0vennesla.no\0kr.ua\0" -"gov.cn\0im\0ar.it\0galsa.no\0rovno.ua\0" -"gov.co\0in\0" -"io\0limanowa.pl\0" -"iq\0k12.ga.us\0" -"ir\0" -"riik.ee\0is\0\xc3\xa1laheadju.no\0" -"gov.cu\0it\0hawaii.museum\0seaport.museum\0" -"je\0pubol.museum\0hm.no\0" -"gov.cx\0" -"*.chiba.jp\0" -"*.kawasaki.jp\0" -"k.se\0" -"gov.dm\0" -"aland.fi\0vik.no\0" -"yk.ca\0jo\0kobierzyce.pl\0" -"jp\0biz.vn\0" -"presse.fr\0lib.il.us\0\xe9\xa6\x99\xe6\xb8\xaf\0" -"gov.ec\0" -"transport.museum\0bronnoy.no\0" -"slg.br\0gov.ee\0asso.nc\0bievat.no\0" -"nyny.museum\0" -"kg\0" -"mo-i-rana.no\0" -"gov.dz\0ki\0" -"monmouth.museum\0" -"suldal.no\0" -"bc.ca\0km\0zt.ua\0" -"pt.it\0kn\0" -"fineart.museum\0" -"la\0" -"kr\0gulen.no\0" -"m.bg\0mo.cn\0lc\0alaheadju.no\0g\xc3\xa1\xc5\x8bgaviika.no\0" -"nowaruda.pl\0cc.ut.us\0" -"br\xc3\xb8nn\xc3\xb8y.no\0" -"ky\0li\0overhalla.no\0" -"kz\0khv.ru\0" -"lk\0" -"artdeco.museum\0" -"ma\0fortworth.museum\0kostroma.ru\0" -"ro.it\0kirkenes.no\0vestby.no\0" -"urbino-pesaro.it\0ls\0mc\0alstahaug.no\0" -"blog.br\0gov.ge\0lt\0md\0" -"lu\0me\0botanicgarden.museum\0" -"gov.gg\0lv\0oh.us\0" -"gov.gh\0mg\0valley.museum\0" -"gov.gi\0mh\0" -"ly\0sandiego.museum\0" -"mk\0" -"ml\0" -"gov.gn\0rollag.no\0naklo.pl\0" -"mn\0" -"mo\0" -"mp\0leirvik.no\0" -"gov.gr\0mq\0na\0cc.ks.us\0" -"mr\0" -"ms\0nc\0" -"valer.hedmark.no\0" -"mu\0ne\0" -"mv\0nf\0" -"mw\0" -"mx\0nord-odal.no\0jur.pro\0" -"my\0" -"gov.hk\0name.hr\0" -"nl\0" -"astronomy.museum\0lib.nm.us\0" -"catania.it\0" -"no\0" -"skjerv\xc3\xb8y.no\0" -"k12.ne.us\0" -"monza-e-della-brianza.it\0!pref.fukushima.jp\0nr\0" -"gov.ie\0" -"stuttgart.museum\0nu\0cc.mn.us\0" -"karasjohka.no\0" -"engine.aero\0bearalvahki.no\0" -"oyer.no\0" -"ve.it\0" -"gov.im\0froland.no\0cc.ar.us\0" -"gov.in\0magadan.ru\0" -"pescara.it\0" -"gov.iq\0usdecorativearts.museum\0" -"gov.ir\0pa\0" -"gov.is\0" -"gov.it\0lavagis.no\0" -"gov.je\0" -"naustdal.no\0pe\0k12.or.us\0" -"gd.cn\0carraramassa.it\0pf\0" -"ph\0" -"cc.ny.us\0" -"rissa.no\0" -"info\0pk\0pomorze.pl\0" -"pl\0" -"gov.jo\0asso.km\0pn\0" -"*.okayama.jp\0cieszyn.pl\0" -"freight.aero\0" -"pr\0" -"narvik.no\0ps\0" -"!pref.aichi.jp\0elverum.no\0pt\0" -"edunet.tn\0" -"gov.kg\0" -"flatanger.no\0marker.no\0pw\0" -"gov.ki\0nuremberg.museum\0" -"aip.ee\0" -"gov.km\0" -"gov.kn\0" -"gov.kp\0" -"rieti.it\0gov.la\0bajddar.no\0" -"gov.lb\0aviation.museum\0" -"gov.lc\0" -"asso.mc\0" -"re\0" -"ut.us\0" -"sa.gov.au\0gov.ky\0" -"mo.it\0gov.kz\0" -"gov.lk\0" -"iraq.museum\0" -"badajoz.museum\0" -"8.bg\0inder\xc3\xb8y.no\0" -"monticello.museum\0ro\0ks.ua\0" -"gov.ma\0svizzera.museum\0" -"gov.lr\0sa\0" -"matera.it\0sb\0" -"gov.lt\0rs\0sc\0" -"gov.me\0sd\0" -"gov.lv\0ru\0se\0" -"gov.mg\0" -"rw\0sg\0" -"gov.ly\0assisi.museum\0kids.museum\0sh\0" -"si\0" -"gov.mk\0" -"gov.ml\0sk\0" -"sl\0" -"gov.mn\0airguard.museum\0sm\0" -"gov.mo\0l.se\0sn\0" -"so\0" -"gov.mr\0ks.us\0" -"name.az\0sr\0" -"naturhistorisches.museum\0tc\0" -"trainer.aero\0cn.it\0urbinopesaro.it\0gov.mu\0nativeamerican.museum\0st\0td\0" -"gov.mv\0su\0" -"trentino.it\0gov.mw\0gov.ng\0tf\0" -"tg\0" -"co.ae\0venezia.it\0gov.my\0th\0" -"!pref.ehime.jp\0sy\0" -"co.ag\0lewismiller.museum\0ostrowiec.pl\0sz\0tj\0" -"tk\0" -"motorcycle.museum\0tl\0" -"birdart.museum\0trogstad.no\0tm\0" -"tn\0" -"humanities.museum\0to\0" -"pu.it\0gov.nr\0ua\0lib.ut.us\0" -"co.ao\0" -"co.ba\0trondheim.no\0tt\0" -"in-addr.arpa\0tempioolbia.it\0!city.yokohama.jp\0mn.us\0" -"n.bg\0schoenbrunn.museum\0tv\0" -"co.at\0aremark.no\0tw\0ug\0" -"jus.br\0" -"co.bi\0bialowieza.pl\0ar.us\0" -"audnedaln.no\0kustanai.ru\0" -"va\0" -"us\0vc\0" -"newport.museum\0" -"kopervik.no\0gov.ph\0vg\0" -"ny.us\0vi\0" -"co.bw\0finn\xc3\xb8y.no\0gov.pk\0uz\0" -"honefoss.no\0gov.pl\0lanbib.se\0" -"co.ci\0" -"gov.pn\0intl.tn\0" -"act.gov.au\0vn\0" -"television.museum\0gov.pr\0" -"sykkylven.no\0v\xc3\xa5ler.hedmark.no\0gov.ps\0" -"gov.pt\0" -"co.cr\0vu\0" -"legnica.pl\0" -"sa.au\0" -"bjarkoy.no\0" -"openair.museum\0birkenes.no\0lib.nj.us\0" -"fylkesbibl.no\0holt\xc3\xa5len.no\0" -"iz.hr\0" -"ws\0" -"oceanographique.museum\0" -"b\xc3\xa1id\xc3\xa1r.no\0cc.mo.us\0" -"\xc3\xb8ygarden.no\0" -"contemporary.museum\0" -"gb.com\0cc.as.us\0" -"belluno.it\0gov.sa\0" -"gov.sb\0" -"gov.rs\0gov.sc\0" -"gov.sd\0" -"!pref.nagasaki.jp\0gov.ru\0" -"asia\0" -"sa.cr\0gov.rw\0gov.sg\0" -"kuzbass.ru\0" -"gs.vf.no\0" -"gov.sl\0" -"norfolk.museum\0" -"k12.de.us\0" -"mil\0" -"rendalen.no\0" -"gov.st\0" -"agro.pl\0" -"orkdal.no\0" -"le.it\0gov.sy\0" -"gov.tj\0" -"co.gg\0nore-og-uvdal.no\0v\xc3\xa5ler.\xc3\xb8stfold.no\0" -"gov.tl\0" -"gov.tn\0" -"gov.to\0" -"kids.us\0" -"equipment.aero\0gov.ua\0" -"!city.niigata.jp\0gov.tt\0" -"sel.no\0" -"l\xc3\xa4ns.museum\0" -"gov.tw\0" -"rennebu.no\0" -"egersund.no\0" -"medecin.km\0" -"co.gy\0" -"!mecon.ar\0" -"berlin.museum\0" -"carrara-massa.it\0" -"9.bg\0" -"pri.ee\0gov.vc\0" -"at.it\0" -"muosat.no\0" -"co.id\0" -"co.hu\0" -"etne.no\0" -"\xc3\xa1lt\xc3\xa1.no\0" -"gov.vn\0" -"modelling.aero\0" -"co.im\0" -"co.in\0\xc3\xa5krehamn.no\0m.se\0" -"gouv.fr\0*.kitakyushu.jp\0" -"narviika.no\0" -"rennes\xc3\xb8y.no\0" -"co.ir\0afjord.no\0" -"lea\xc5\x8bgaviika.no\0buryatia.ru\0" -"co.it\0coastaldefence.museum\0" -"co.je\0vf.no\0" -"osteroy.no\0" -"uslivinghistory.museum\0" -"aerobatic.aero\0" -"mesaverde.museum\0mining.museum\0" -"a\xc3\xa9roport.ci\0gov.ws\0" -"co.jp\0copenhagen.museum\0" -"pv.it\0" -"r\xc3\xb8mskog.no\0" -"vossevangen.no\0porsanger.no\0" -"salat.no\0mo.us\0" -"o.bg\0imperia.it\0carrier.museum\0" -"carbonia-iglesias.it\0" -"as.us\0" -"alvdal.no\0" -"state.museum\0mandal.no\0cn.ua\0" -"cuneo.it\0" -"gouv.ht\0" -"!city.okayama.jp\0co.kr\0" -"co.lc\0" -"sa.it\0" -"donna.no\0" -"sortland.no\0" -"tomsk.ru\0" -"birthplace.museum\0l\xc3\xb8""dingen.no\0" -"ge.it\0orenburg.ru\0" -"cn.com\0" -"co.ma\0" -"co.ls\0skaun.no\0name.vn\0" -"navigation.aero\0" -"cagliari.it\0co.me\0portal.museum\0" -"gouv.bj\0" -"udine.it\0" -"engineer.aero\0" -"szczecin.pl\0" -"wales.museum\0" -"co.na\0bo.telemark.no\0" -"austin.museum\0" -"k12.mo.us\0" -"co.mu\0" -"gouv.ci\0" -"co.mw\0" -"esp.br\0" -"naturalhistorymuseum.museum\0" -"mosjoen.no\0" -"solund.no\0" -"name.tj\0" -"sand\xc3\xb8y.no\0" -"kunstunddesign.museum\0" -"cartoonart.museum\0collection.museum\0gsm.pl\0" -"aure.no\0" -"!pref.yamaguchi.jp\0historical.museum\0" -"name.tt\0" -"england.museum\0valle.no\0" -"cc.ok.us\0" -"salangen.no\0" -"gloppen.no\0" -"cc.co.us\0" -"contemporaryart.museum\0" -"tas.edu.au\0" -"trading.aero\0" -"mazury.pl\0" -"!pref.aomori.jp\0co.pl\0" -"opoczno.pl\0" -"*.kobe.jp\0co.pn\0" -"oppegard.no\0" -"co.pw\0" -"saltdal.no\0smolensk.ru\0" -"na.it\0\xc4\x8d\xc3\xa1hcesuolo.no\0" -"vgs.no\0evenassi.no\0" -"parachuting.aero\0jl.cn\0maritime.museum\0bd.se\0" -"badaddja.no\0" -"bergen.no\0" -"brussel.museum\0" -"avoues.fr\0" -"cesenaforli.it\0" -"oregontrail.museum\0" -"ullensaker.no\0" -"jobs\0" -"accident-prevention.aero\0" -"n.se\0" -"association.museum\0california.museum\0" -"cultural.museum\0co.rs\0" -"zoology.museum\0" -"pruszkow.pl\0" -"control.aero\0nt.edu.au\0net\0komforb.se\0" -"lincoln.museum\0aurland.no\0name.pr\0co.rw\0" -"ostroleka.pl\0" -"isernia.it\0" -"tm.fr\0" -"gs.ol.no\0" -"nb.ca\0marnardal.no\0" -"williamsburg.museum\0" -"!jet.uk\0" -"suisse.museum\0\xc3\xa5""fjord.no\0flakstad.no\0" -"karmoy.no\0" -"yn.cn\0chesapeakebay.museum\0" -"nsw.au\0" -"amur.ru\0co.st\0" -"imb.br\0siellak.no\0\xe7\xb6\xb2\xe8\xb7\xaf.tw\0" -"name.na\0" -"co.th\0" -"p.bg\0" -"co.sz\0co.tj\0" -"name.mv\0\xc3\xa5lesund.no\0lib.in.us\0" -"lucerne.museum\0naumburg.museum\0" -"society.museum\0name.my\0" -"tinn.no\0" -"co.tt\0" -"unj\xc3\xa1rga.no\0" -"co.ug\0" -"lib.wy.us\0" -"co.tz\0" -"ass.km\0" -"ok.us\0" -"tm.hu\0kongsvinger.no\0" -"ibestad.no\0" -"juedisches.museum\0co.us\0" -"cq.cn\0" -"rs.ba\0" -"wa.edu.au\0co.vi\0" -"co.uz\0" -"health.museum\0" -"grue.no\0" -"automotive.museum\0journalism.museum\0settlement.museum\0" -"qh.cn\0interactive.museum\0" -"snillfjord.no\0!national-library-scotland.uk\0" -"balsfjord.no\0lib.nh.us\0" -"kolobrzeg.pl\0" -"gs.tm.no\0" -"h\xc3\xb8nefoss.no\0" -"ol.no\0" -"music.museum\0moareke.no\0" -"b\xc3\xb8.nordland.no\0" -"name.mk\0lier.no\0" -"eidfjord.no\0" -"sc.cn\0tm.km\0" -"jelenia-gora.pl\0sanok.pl\0" -"intelligence.museum\0" -"srv.br\0elblag.pl\0" -"judygarland.museum\0" -"padua.it\0" -"k12.co.us\0" -"lindesnes.no\0" -"name.jo\0izhevsk.ru\0" -"yorkshire.museum\0mel\xc3\xb8y.no\0" -"tm.mc\0lib.pr.us\0" -"hjartdal.no\0" -"tm.mg\0" -"bari.it\0milano.it\0" -"lg.jp\0" -"zgrad.ru\0" -"sm\xc3\xb8la.no\0" -"communications.museum\0" -"arts.co\0seoul.kr\0engerdal.no\0" -"oster\xc3\xb8y.no\0" -"\xe6\x95\x8e\xe8\x82\xb2.hk\0foggia.it\0verran.no\0" -"orskog.no\0voronezh.ru\0kv.ua\0" -"av.it\0" -"tm.no\0nissedal.no\0" -"historisches.museum\0gs.mr.no\0" -"medecin.fr\0" -"montreal.museum\0" -"o.se\0" -"!metro.tokyo.jp\0sola.no\0" -"k12.tn.us\0" -"floro.no\0" -"milan.it\0*.shiga.jp\0" -"berkeley.museum\0" -"maintenance.aero\0" -"ws.na\0" -"lindas.no\0cc.ia.us\0" -"brescia.it\0embroidery.museum\0" -"arezzo.it\0tm.pl\0" -"r\xc3\xa6lingen.no\0" -"burghof.museum\0" -"rec.br\0" -"q.bg\0" -"!nawras.om\0" -"hammarfeasta.no\0" -"moss.no\0" -"on.ca\0" -"gouv.rw\0" -"luxembourg.museum\0" -"rec.co\0british.museum\0" -"reggio-emilia.it\0" -"gouv.sn\0lib.wv.us\0" -"avocat.fr\0" -"simbirsk.ru\0" -"jar.ru\0" -"monza-brianza.it\0" -"tm.ro\0" -"imageandsound.museum\0" -"jpn.com\0mr.no\0" -"siracusa.it\0" -"norilsk.ru\0tm.se\0" -"tn.it\0" -"jeju.kr\0" -"!pref.fukuoka.jp\0" -"*.hyogo.jp\0portlligat.museum\0" -"!pref.osaka.jp\0" -"siena.it\0sc.kr\0omaha.museum\0saskatchewan.museum\0" -"phoenix.museum\0vanylven.no\0" -"botanicalgarden.museum\0" -"turek.pl\0" -"vagsoy.no\0" -"riodejaneiro.museum\0" -"vi.it\0" -"uy.com\0" -"kristiansand.no\0" -"sd.cn\0trento.it\0" -"muncie.museum\0" -"berg.no\0meldal.no\0" -"nes.buskerud.no\0" -"saratov.ru\0" -"gs.oslo.no\0" -"harstad.no\0vaga.no\0" -"research.museum\0" -"brunel.museum\0ia.us\0" -"test.tj\0" -"columbia.museum\0" -"ms.it\0stockholm.museum\0" -"reklam.hu\0" -"pomorskie.pl\0lg.ua\0" -"bg.it\0historicalsociety.museum\0rns.tn\0" -"mallorca.museum\0surgut.ru\0cc.sc.us\0" -"ushistory.museum\0" -"palana.ru\0" -"snoasa.no\0" -"naturalsciences.museum\0" -"yaroslavl.ru\0" -"unjarga.no\0" -"p.se\0" -"ingatlan.hu\0" -"irc.pl\0" -"savona.it\0" -"cr.it\0" -"test.ru\0cc.tn.us\0" -"ms.kr\0museumvereniging.museum\0" -"time.no\0k12.ia.us\0" -"vladimir.ru\0" -"correios-e-telecomunica\xc3\xa7\xc3\xb5""es.museum\0" -"gouv.km\0nationalfirearms.museum\0" -"m\xc3\xa1latvuopmi.no\0" -"aero\0yosemite.museum\0" -"r.bg\0school.na\0" -"cc.vi.us\0" -"*.wakayama.jp\0" -"beauxarts.museum\0averoy.no\0ullensvang.no\0bar.pro\0" -"!city.hiroshima.jp\0" -"b\xc3\xa1hccavuotna.no\0" -"frosta.no\0" -"gdynia.pl\0" -"medical.museum\0" -"embaixada.st\0" -"balsan.it\0vantaa.museum\0" -"za.net\0" -"!city.saitama.jp\0lib.ks.us\0" -"fnd.br\0" -"ru.com\0se.com\0hol.no\0modalen.no\0" -"gouv.ml\0chukotka.ru\0" -"malopolska.pl\0" -"mansion.museum\0" -"iki.fi\0children.museum\0" -"cyber.museum\0rec.nf\0mo\xc3\xa5reke.no\0" -"to.it\0" -"hasvik.no\0" -"\xc3\xb8yer.no\0" -"arts.ro\0sc.ug\0" -"lib.ar.us\0" -"sc.tz\0cc.ms.us\0cc.nc.us\0" -"etc.br\0poznan.pl\0" -"cnt.br\0viking.museum\0" -"*.miyazaki.jp\0" -"melhus.no\0" -"skodje.no\0vevelstad.no\0" -"sc.us\0" -"upow.gov.pl\0" -"!city.fukuoka.jp\0brandywinevalley.museum\0natuurwetenschappen.museum\0tranby.no\0" -"bahn.museum\0msk.ru\0" -"delmenhorst.museum\0" -"russia.museum\0fuoisku.no\0" -"shell.museum\0" -"r\xc3\xa1isa.no\0" -"hs.kr\0udmurtia.ru\0" -"palermo.it\0" -"pilot.aero\0" -"tn.us\0" -"priv.hu\0" -"li.it\0" -"kr\xc3\xa5""anghke.no\0mosreg.ru\0" -"lib.fl.us\0" -"plants.museum\0" -"ulsan.kr\0national.museum\0" -"mil.ac\0!pref.nara.jp\0surgeonshall.museum\0" -"mil.ae\0santacruz.museum\0vi.us\0" -"wlocl.pl\0" -"mt.it\0napoli.it\0alaska.museum\0arts.nf\0" -"missoula.museum\0" -"rec.ro\0" -"mil.al\0" -"marburg.museum\0waw.pl\0" -"pharmaciens.km\0indianapolis.museum\0larsson.museum\0" -"cc.sd.us\0" -"mil.ba\0mobi\0" -"indianmarket.museum\0" -"recreation.aero\0padova.it\0" -"varese.it\0parti.se\0" -"mil.az\0" -"mil.bo\0!pref.kagoshima.jp\0khmelnitskiy.ua\0" -"rygge.no\0" -"os\xc3\xb8yro.no\0" -"mil.br\0" -"cs.it\0" -"austevoll.no\0fjell.no\0" -"mil.by\0" -"!pref.tokushima.jp\0org\0" -"mil.cn\0gs.svalbard.no\0" -"mil.co\0" -"pz.it\0lib.va.us\0\xd1\x80\xd1\x84\0" -"\xe4\xb8\xaa\xe4\xba\xba.hk\0ms.us\0nc.us\0k12.wi.us\0" -"s.bg\0drangedal.no\0" -"en.it\0" -"culturalcenter.museum\0" -"house.museum\0divttasvuotna.no\0" -"fhs.no\0" -"circus.museum\0" -"priv.at\0" -"mil.ec\0" -"ruovat.no\0" -"midsund.no\0vagan.no\0" -"casadelamoneda.museum\0" -"bristol.museum\0" -"and.museum\0" -"ascolipiceno.it\0computerhistory.museum\0vyatka.ru\0" -"uhren.museum\0" -"lahppi.no\0" -"*.yokohama.jp\0cody.museum\0lib.al.us\0" -"colonialwilliamsburg.museum\0indian.museum\0cc.ky.us\0" -"tp.it\0biev\xc3\xa1t.no\0" -"can.br\0royken.no\0" -"id.ir\0" -"mediocampidano.it\0tromso.no\0" -"kartuzy.pl\0k12.ok.us\0" -"*.saitama.jp\0stjohn.museum\0m\xc3\xa1tta-v\xc3\xa1rjjat.no\0" -"mil.ge\0trani-barletta-andria.it\0" -"lib.as.us\0" -"swiebodzin.pl\0cc.mt.us\0cc.nd.us\0" -"mil.gh\0" -"science-fiction.museum\0\xd9\x82\xd8\xb7\xd8\xb1\0" -"airtraffic.aero\0" -"konskowola.pl\0" -"scienceandhistory.museum\0nysa.pl\0sd.us\0" -"balestrand.no\0" -"oygarden.no\0" -"her\xc3\xb8y.nordland.no\0" -"!pref.ishikawa.jp\0strand.no\0" -"\xe7\xb5\x84\xe7\xbb\x87.hk\0mil.hn\0" -"gob.bo\0volda.no\0" -"losangeles.museum\0larvik.no\0" -"university.museum\0" -"cc.dc.us\0" -"mil.id\0" -"sorfold.no\0" -"watch-and-clock.museum\0" -"flor\xc3\xb8.no\0" -"nittedal.no\0oppeg\xc3\xa5rd.no\0" -"k12.ri.us\0" -"gob.cl\0" -"komi.ru\0" -"government.aero\0mil.in\0" -"mil.iq\0id.lv\0" -"culture.museum\0" -"id.ly\0" -"raholt.no\0" -"lubin.pl\0grozny.ru\0" -"kchr.ru\0" -"nikolaev.ua\0" -"lib.sd.us\0" -"de.com\0" -"mil.jo\0" -"*.kanagawa.jp\0gaular.no\0miasta.pl\0" -"bi.it\0rnu.tn\0uzhgorod.ua\0" -"idrett.no\0v\xc3\xa5gs\xc3\xb8y.no\0" -"wroclaw.pl\0" -"res.aero\0ne.jp\0mil.kg\0" -"\xc3\xa5mli.no\0" -"education.museum\0" -"dgca.aero\0" -"mil.km\0" -"trolley.museum\0" -"cci.fr\0r.se\0" -"archaeological.museum\0" -"monzaedellabrianza.it\0mil.kr\0" -"gob.es\0kvafjord.no\0ky.us\0" -"lecco.it\0" -"ct.it\0" -"magazine.aero\0" -"operaunite.com\0ne.kr\0" -"mil.kz\0skoczow.pl\0" -"nf.ca\0" -"western.museum\0" -"kunst.museum\0gaivuotna.no\0karpacz.pl\0spb.ru\0cc.id.us\0" -"slask.pl\0" -"youth.museum\0" -"adv.br\0campidanomedio.it\0!songfest.om\0" -"geelvinck.museum\0\xd8\xa7\xd9\x85\xd8\xa7\xd8\xb1\xd8\xa7\xd8\xaa\0" -"mil.lv\0" -"fie.ee\0mil.mg\0mt.us\0nd.us\0k12.vt.us\0" -"t.bg\0ushuaia.museum\0" -"off.ai\0" -"irkutsk.ru\0" -"stor-elvdal.no\0tourism.tn\0" -"penza.ru\0" -"bj.cn\0\xe4\xb8\xad\xe5\x9b\xbd\0" -"civilwar.museum\0mil.mv\0opole.pl\0" -"nes.akershus.no\0" -"mil.my\0karelia.ru\0" -"como.it\0sande.vestfold.no\0" -"\xe4\xb8\xad\xe5\x9c\x8b\0" -"gob.hn\0lib.la.us\0" -"mil.no\0cc.wv.us\0" -"boleslawiec.pl\0" -"!pref.niigata.jp\0gs.sf.no\0dc.us\0k12.mi.us\0" -"museum\0dep.no\0kv\xc3\xa6nangen.no\0l\xc3\xa1hppi.no\0" -"film.museum\0" -"frei.no\0" -"notodden.no\0risor.no\0" -"messina.it\0" -"eidsberg.no\0" -"krakow.pl\0lib.mt.us\0lib.nd.us\0" -"rauma.no\0" -"mulhouse.museum\0" -"sibenik.museum\0grong.no\0mil.pe\0" -"budejju.no\0k12.nv.us\0" -"stavanger.no\0mil.ph\0" -"forli-cesena.it\0" -"naples.it\0cc.ne.us\0" -"s\xc3\xb8r-aurdal.no\0" -"mil.pl\0" -"vibo-valentia.it\0ski.museum\0siedlce.pl\0" -"bus.museum\0" -"tozsde.hu\0" -"!pref.shizuoka.jp\0santabarbara.museum\0" -"zhitomir.ua\0" -"pro.az\0" -"ne.pw\0" -"pro.br\0orkanger.no\0b\xc3\xb8.telemark.no\0" -"roma.it\0cc.ct.us\0" -"heritage.museum\0giske.no\0" -"!pref.kumamoto.jp\0prof.pr\0" -"*.kochi.jp\0" -"andria-barletta-trani.it\0*.toyama.jp\0sveio.no\0" -"id.us\0" -"bolt.hu\0" -"fetsund.no\0porsgrunn.no\0" -"iglesias-carbonia.it\0" -"sf.no\0" -"mil.ru\0" -"from.hr\0asnes.no\0mil.rw\0" -"alesund.no\0sos.pl\0" -"livorno.it\0" -"crafts.museum\0" -"aquila.it\0" -"vega.no\0" -"jewelry.museum\0" -"sk\xc3\xa1nit.no\0chita.ru\0" -"pro.ec\0" -"fortmissoula.museum\0j\xc3\xb8lster.no\0" -"pro\0mil.st\0" -"busan.kr\0lib.ga.us\0" -"dellogliastra.it\0" -"aosta.it\0chungnam.kr\0gob.mx\0" -"mil.sy\0k12.hi.us\0" -"mil.tj\0" -"ulan-ude.ru\0mil.to\0wv.us\0" -"luster.no\0volgograd.ru\0" -"pa.it\0kommunalforbund.se\0lib.tx.us\0" -"s.se\0" -"qsl.br\0" -"mil.tw\0" -"est.pr\0ens.tn\0" -"lib.id.us\0" -"mil.tz\0" -"uscountryestate.museum\0" -"agents.aero\0" -"\xc3\xb8vre-eiker.no\0ne.ug\0" -"pb.ao\0" -"gob.pa\0ne.tz\0" -"tur.br\0" -"mil.vc\0" -"or.at\0gob.pe\0" -"s\xc3\xb8r-fron.no\0" -"or.bi\0ne.us\0" -"u.bg\0gob.pk\0" -"stavern.no\0" -"brindisi.it\0" -"aknoluokta.no\0" -"!pref.kyoto.jp\0tydal.no\0" -"plc.ly\0muos\xc3\xa1t.no\0" -"or.ci\0hamaroy.no\0priv.pl\0" -"vestre-slidre.no\0gniezno.pl\0" -"\xe7\xae\x87\xe4\xba\xba.hk\0" -"andebu.no\0" -"nieruchomosci.pl\0\xd8\xa7\xd9\x84\xd8\xb3\xd8\xb9\xd9\x88\xd8\xaf\xd9\x8a\xd8\xa9\0" -"or.cr\0pro.ht\0bolzano.it\0" -"ct.us\0k12.md.us\0" -"za.org\0" -"!icnet.uk\0" -"localhistory.museum\0" -"firm.ht\0" -"lel.br\0tr.it\0kvanangen.no\0" -"sondre-land.no\0t\xc3\xb8nsberg.no\0vefsn.no\0" -"nature.museum\0yamal.ru\0" -"rv.ua\0" -"lans.museum\0lib.ne.us\0" -"lur\xc3\xb8y.no\0" -"eu.com\0firm.in\0" -"hjelmeland.no\0" -"gs.tr.no\0" -"casino.hu\0essex.museum\0tourism.pl\0" -"rennesoy.no\0" -"priv.no\0" -"baths.museum\0mytis.ru\0" -"tingvoll.no\0" -"cc.az.us\0" -"sh.cn\0" -"!pref.miyazaki.jp\0s\xc3\xb8rfold.no\0" -"aurskog-holand.no\0malatvuopmi.no\0" -"lib.ct.us\0" -"cc.pa.us\0" -"pa.gov.pl\0" -"firm.co\0cc.de.us\0" -"nrw.museum\0" -"daejeon.kr\0livinghistory.museum\0" -"gildeskal.no\0lund.no\0" -"\xc3\xb8ksnes.no\0stavropol.ru\0" -"b\xc3\xa6rum.no\0r\xc3\xb8yrvik.no\0" -"osoyro.no\0" -"priv.me\0sula.no\0!parliament.uk\0" -"nationalheritage.museum\0" -"jaworzno.pl\0" -"dinosaur.museum\0" -"garden.museum\0trust.museum\0" -"turen.tn\0" -"kautokeino.no\0" -"pro.na\0" -"gorizia.it\0" -"siljan.no\0" -"or.id\0pro.mv\0" -"bieszczady.pl\0www.ro\0" -"lib.ee\0antiques.museum\0brasil.museum\0tr.no\0" -"aejrie.no\0" -"!pref.hokkaido.jp\0" -"schlesisches.museum\0" -"huissier-justice.fr\0or.it\0" -"t.se\0" -"environment.museum\0" -"vindafjord.no\0" -"edu.ac\0or.jp\0" -"tree.museum\0" -"groundhandling.aero\0edu.af\0" -"rochester.museum\0sanfrancisco.museum\0" -"ebiz.tw\0" -"kirovograd.ua\0" -"edu.al\0" -"edu.an\0\xc3\xa1k\xc5\x8boluokta.no\0v\xc3\xa5g\xc3\xa5.no\0" -"v.bg\0" -"edu.ba\0" -"edu.bb\0nesset.no\0" -"hornindal.no\0pro.pr\0" -"or.kr\0" -"az.us\0" -"edu.bh\0volkenkunde.museum\0" -"edu.bi\0" -"edu.az\0" -"b\xc3\xb8mlo.no\0" -"edu.bm\0" -"edu.bo\0tyumen.ru\0" -"edu.br\0" -"edu.bs\0pa.us\0" -"alto-adige.it\0whaling.museum\0" -"*.iwate.jp\0" -"edu.ci\0law.pro\0" -"edu.bz\0de.us\0" -"lib.ak.us\0" -"edu.cn\0" -"edu.co\0" -"laspezia.it\0" -"baidar.no\0" -"ts.it\0" -"or.na\0" -"edu.cu\0hotel.lk\0" -"show.aero\0or.mu\0" -"sandnes.no\0" -"museumcenter.museum\0" -"edu.dm\0kazan.ru\0" -"biz\0caltanissetta.it\0odessa.ua\0k12.oh.us\0" -"crimea.ua\0" -"research.aero\0lom.no\0" -"edu.ec\0florence.it\0clock.museum\0sshn.se\0" -"edu.ee\0game.tw\0" -"!pref.okinawa.jp\0" -"ilawa.pl\0" -"edu.dz\0indiana.museum\0" -"gs.jan-mayen.no\0" -"publ.pt\0" -"nom.ad\0" -"skanit.no\0gdansk.pl\0k12.pa.us\0" -"nom.ag\0edu.es\0" -"if.ua\0" -"pro.tt\0lib.de.us\0" -"environmentalconservation.museum\0cc.or.us\0" -"bern.museum\0nat.tn\0" -"rubtsovsk.ru\0" -"!educ.ar\0masoy.no\0" -"bologna.it\0" -"\xc3\xa5snes.no\0fhv.se\0" -"*.tottori.jp\0radoy.no\0" -"romskog.no\0" -"malbork.pl\0" -"olbiatempio.it\0" -"edu.ge\0" -"edu.gh\0" -"edu.gi\0" -"or.pw\0" -"hob\xc3\xb8l.no\0" -"nom.br\0edu.gn\0virginia.museum\0mbone.pl\0!nls.uk\0" -"seljord.no\0pro.vn\0" -"edu.gp\0" -"edu.gr\0" -"!uba.ar\0!pref.saitama.jp\0" -"greta.fr\0gs.aa.no\0kvinnherad.no\0" -"lib.sc.us\0" -"js.cn\0nom.co\0edu.hk\0" -"lesja.no\0" -"bl.it\0" -"edu.hn\0\xc3\xb8ystre-slidre.no\0mari-el.ru\0" -"hotel.hu\0" -"rindal.no\0" -"edu.ht\0" -"!pref.miyagi.jp\0" -"midtre-gauldal.no\0" -"xj.cn\0australia.museum\0" -"ab.ca\0salvadordali.museum\0olawa.pl\0" -"pc.it\0" -"u.se\0" -"edu.in\0b\xc3\xa1l\xc3\xa1t.no\0" -"ln.cn\0alta.no\0" -"chelyabinsk.ru\0" -"edu.iq\0" -"ontario.museum\0" -"edu.is\0" -"edu.it\0" -"b\xc3\xa5tsfjord.no\0" -"trysil.no\0or.th\0" -"utsira.no\0" -"nom.es\0edu.jo\0fhsk.se\0" -"bale.museum\0" -"w.bg\0" -"lillesand.no\0" -"edu.kg\0" -"amusement.aero\0" -"edu.ki\0" -"fauske.no\0or.ug\0" -"int.az\0askvoll.no\0eidskog.no\0cv.ua\0" -"algard.no\0" -"edu.km\0or.tz\0" -"nom.fr\0edu.kn\0" -"*.ibaraki.jp\0hoylandet.no\0" -"int.bo\0edu.kp\0" -"edu.la\0" -"si.it\0edu.lb\0travel.pl\0" -"edu.lc\0mx.na\0n\xc3\xa1vuotna.no\0ovre-eiker.no\0" -"aa.no\0!siemens.om\0" -"sciences.museum\0or.us\0" -"cat\0" -"edu.ky\0" -"int.ci\0edu.kz\0firm.ro\0cc.wy.us\0" -"edu.lk\0vaapste.no\0" -"!pref.tochigi.jp\0" -"int.co\0podlasie.pl\0" -"edu.lr\0" -"karikatur.museum\0jamal.ru\0" -"gjovik.no\0krager\xc3\xb8.no\0k12.az.us\0" -"edu.me\0" -"ud.it\0edu.lv\0entomology.museum\0" -"edu.mg\0moskenes.no\0" -"\xe6\x94\xbf\xe5\xba\x9c.hk\0edu.ly\0" -"stpetersburg.museum\0" -"edu.mk\0" -"edu.ml\0nordreisa.no\0" -"!pref.fukui.jp\0lib.ms.us\0lib.nc.us\0" -"edu.mn\0\xd9\x81\xd9\x84\xd8\xb3\xd8\xb7\xd9\x8a\xd9\x86\0" -"fot.br\0edu.mo\0" -"iron.museum\0" -"asti.it\0annefrank.museum\0stv.ru\0cc.nh.us\0" -"edu.mv\0" -"lodi.it\0edu.mw\0edu.ng\0" -"gwangju.kr\0edu.mx\0" -"edu.my\0" -"soundandvision.museum\0" -"lenvik.no\0" -"ballooning.aero\0" -"name\0" -"jogasz.hu\0frogn.no\0" -"history.museum\0" -"consultant.aero\0edu.nr\0" -"manchester.museum\0" -"*.hiroshima.jp\0" -"pol.dz\0" -"*.tochigi.jp\0heimatunduhren.museum\0" -"!pref.kanagawa.jp\0" -"firm.nf\0edu.pa\0" -"coop.ht\0pc.pl\0" -"chicago.museum\0" -"vn.ua\0" -"edu.pe\0" -"tana.no\0edu.pf\0" -"edu.ph\0" -"nom.km\0" -"travel.tt\0" -"edu.pk\0" -"experts-comptables.fr\0edu.pl\0bryansk.ru\0" -"edu.pn\0" -"evje-og-hornnes.no\0warszawa.pl\0" -"ac.ae\0" -"edu.pr\0" -"vaksdal.no\0edu.ps\0dni.us\0" -"po.gov.pl\0edu.pt\0" -"nordre-land.no\0vadso.no\0" -"rnrt.tn\0" -"sport.hu\0!pref.gifu.jp\0voss.no\0targi.pl\0" -"flesberg.no\0" -"photography.museum\0" -"modena.it\0tonsberg.no\0" -"ac.at\0" -"ac.be\0coop.br\0" -"services.aero\0" -"nom.mg\0" -"wielun.pl\0" -"jefferson.museum\0wy.us\0" -"pd.it\0ot.it\0neues.museum\0slattum.no\0" -"vdonsk.ru\0" -"ar.com\0edu.sa\0" -"\xc3\xa5l.no\0edu.sb\0" -"edu.rs\0edu.sc\0" -"ac.ci\0int.is\0edu.sd\0!tsk.tr\0" -"br\xc3\xb8nn\xc3\xb8ysund.no\0and\xc3\xb8y.no\0edu.ru\0" -"pol.ht\0" -"edu.rw\0edu.sg\0" -"gyeongnam.kr\0olecko.pl\0" -"ac.cn\0" -"graz.museum\0" -"coldwar.museum\0edu.sl\0" -"ac.cr\0" -"edu.sn\0" -"hamar.no\0" -"histoire.museum\0" -"!city.shizuoka.jp\0" -"edu.st\0" -"oceanographic.museum\0nh.us\0" -"x.bg\0" -"surnadal.no\0" -"fc.it\0costume.museum\0stalowa-wola.pl\0" -"valer.ostfold.no\0edu.sy\0" -"edu.tj\0" -"arq.br\0" -"aeroclub.aero\0odo.br\0pe.ca\0\xe7\xb6\xb2\xe7\xb5\xa1.cn\0bronnoysund.no\0nom.pa\0" -"edu.to\0" -"paleo.museum\0nom.pe\0edu.ua\0" -"int.la\0trustee.museum\0forsand.no\0krasnoyarsk.ru\0" -"!pref.hyogo.jp\0" -"edu.tt\0" -"zarow.pl\0" -"edu.tw\0" -"nom.pl\0" -"community.museum\0kvitsoy.no\0" -"int.lk\0tychy.pl\0" -"k12.me.us\0" -"jondal.no\0edu.vc\0" -"illustration.museum\0" -"clinton.museum\0" -"tas.au\0es.kr\0" -"production.aero\0" -"rodoy.no\0" -"database.museum\0bodo.no\0" -"anthro.museum\0landes.museum\0edu.vn\0" -"nom.re\0" -"altai.ru\0" -"filatelia.museum\0" -"sk.ca\0lezajsk.pl\0" -"rockart.museum\0int.mv\0" -"int.mw\0herad.no\0" -"eti.br\0ac.gn\0" -"fedje.no\0nom.ro\0" -"money.museum\0" -"\xd9\x85\xd8\xb5\xd8\xb1\0" -"horten.no\0" -"gangaviika.no\0mielec.pl\0" -"uw.gov.pl\0" -"moma.museum\0" -"edu.ws\0" -"go.ci\0" -"tv.bo\0technology.museum\0" -"s\xc3\xb8ndre-land.no\0" -"tv.br\0" -"jor.br\0lib.dc.us\0" -"arboretum.museum\0" -"go.cr\0" -"artsandcrafts.museum\0\xd8\xaa\xd9\x88\xd9\x86\xd8\xb3\0" -"psc.br\0ac.id\0!city.chiba.jp\0" -"wa.au\0" -"rome.it\0" -"amli.no\0" -"ac.im\0lo.it\0" -"ac.in\0" -"\xe7\xb6\xb2\xe7\xb5\xa1.hk\0durham.museum\0" -"ac.ir\0" -"torino.museum\0" -"loabat.no\0" -"com\0" -"nalchik.ru\0" -"yakutia.ru\0" -"settlers.museum\0" -"!promocion.ar\0int.pt\0" -"union.aero\0" -"utah.museum\0" -"giehtavuoatna.no\0" -"ac.jp\0" -"air-traffic-control.aero\0" -"silk.museum\0usantiques.museum\0" -"bn.it\0" -"kalisz.pl\0" -"perm.ru\0" -"aoste.it\0bindal.no\0" -"coloradoplateau.museum\0k12.gu.us\0" -"frosinone.it\0forde.no\0" -"epilepsy.museum\0" -"olbia-tempio.it\0" -"journalist.aero\0ac.kr\0*.sch.uk\0" -"nic.im\0sciencesnaturelles.museum\0bedzin.pl\0" -"nic.in\0pe.it\0" -"w.se\0" -"!pref.okayama.jp\0" -"urn.arpa\0" -"cinema.museum\0" -"monza.it\0versailles.museum\0int.ru\0" -"andasuolo.no\0skj\xc3\xa5k.no\0chernovtsy.ua\0" -"nyc.museum\0int.rw\0paroch.k12.ma.us\0" -"ringerike.no\0" -"ac.ma\0" -"org.ac\0civilaviation.aero\0" -"rakkestad.no\0" -"org.ae\0ac.me\0" -"org.af\0" -"org.ag\0" -"org.ai\0stokke.no\0" -"airport.aero\0" -"finnoy.no\0" -"org.al\0" -"org.an\0y.bg\0habmer.no\0" -"stadt.museum\0holtalen.no\0" -"int.tj\0" -"org.ba\0gjerdrum.no\0" -"org.bb\0ascoli-piceno.it\0molde.no\0r\xc3\xb8st.no\0tysfjord.no\0" -"pe.kr\0rybnik.pl\0" -"go.id\0" -"ac.mu\0" -"ac.mw\0ac.ng\0" -"org.bh\0\xc3\xa5mot.no\0rana.no\0" -"org.bi\0" -"org.az\0belgorod.ru\0int.tt\0" -"ae.org\0" -"group.aero\0posts-and-telecommunications.museum\0" -"org.bm\0salerno.it\0" -"etnedal.no\0" -"org.bo\0*.hokkaido.jp\0donetsk.ua\0" -"ostroda.pl\0" -"org.br\0" -"org.bs\0" -"go.it\0h\xc3\xb8ylandet.no\0" -"zgorzelec.pl\0" -"org.bw\0" -"org.ci\0" -"org.bz\0vicenza.it\0resistance.museum\0" -"missile.museum\0" -"org.cn\0" -"org.co\0assassination.museum\0" -"go.jp\0" -"tv.it\0austrheim.no\0ac.pa\0" -"verbania.it\0" -"palace.museum\0" -"tmp.br\0int.vn\0" -"org.cu\0" -"paris.museum\0" -"media.aero\0hokksund.no\0" -"arts.museum\0gemological.museum\0hammerfest.no\0" -"k12.ny.us\0" -"org.dm\0hemsedal.no\0ringsaker.no\0sklep.pl\0" -"h\xc3\xa5.no\0cc.nj.us\0" -"rzeszow.pl\0" -"go.kr\0gjesdal.no\0ac.pr\0" -"org.ec\0" -"org.ee\0" -"media.museum\0" -"terni.it\0touch.museum\0zakopane.pl\0" -"journal.aero\0org.dz\0" -"incheon.kr\0" -"b\xc3\xa1hcavuotna.no\0" -"leksvik.no\0ulvik.no\0" -"plantation.museum\0" -"org.es\0loyalist.museum\0" -"gildesk\xc3\xa5l.no\0bytom.pl\0" -"bo.nordland.no\0" -"ambulance.aero\0iglesiascarbonia.it\0" -"tw.cn\0\xe6\x96\xb0\xe5\x8a\xa0\xe5\x9d\xa1\0" -"chocolate.museum\0" -"pittsburgh.museum\0" -"royrvik.no\0sor-odal.no\0ac.rs\0" -"kaluga.ru\0" -"org.ge\0erotica.hu\0ac.ru\0ac.se\0" -"org.gg\0leangaviika.no\0ac.rw\0" -"org.gh\0v\xc3\xa6r\xc3\xb8y.no\0" -"org.gi\0" -"jevnaker.no\0" -"org.gn\0tv.na\0leikanger.no\0" -"org.gp\0" -"ask\xc3\xb8y.no\0" -"org.gr\0wroc.pl\0" -"ad.jp\0" -"powiat.pl\0" -"tj\xc3\xb8me.no\0" -"coop.tt\0" -"ac.th\0" -"mragowo.pl\0ac.sz\0ac.tj\0" -"org.hk\0bo.it\0" -"philately.museum\0" -"org.hn\0" -"fet.no\0" -"axis.museum\0mansions.museum\0" -"wiki.br\0" -"org.ht\0" -"org.hu\0piacenza.it\0scotland.museum\0cpa.pro\0" -"ac.ug\0" -"coop.mv\0x.se\0" -"coop.mw\0ac.tz\0" -"bmd.br\0" -"org.im\0ralingen.no\0" -"org.in\0" -"cz.it\0lib.ia.us\0" -"org.iq\0" -"org.ir\0" -"org.is\0" -"nl.ca\0" -"org.je\0" -"childrensgarden.museum\0" -"kvits\xc3\xb8y.no\0go.pw\0" -"sokndal.no\0" -"ra.it\0grimstad.no\0" -"denmark.museum\0" -"ac.vn\0" -"ecn.br\0org.jo\0" -"bialystok.pl\0nj.us\0" -"z.bg\0bilbao.museum\0stargard.pl\0nic.tj\0" -"eisenbahn.museum\0" -"fe.it\0bryne.no\0vrn.ru\0" -"cc.wa.us\0" -"sex.hu\0skierva.no\0" -"org.kg\0" -"org.ki\0" -"org.km\0" -"org.kn\0khakassia.ru\0" -"org.kp\0" -"org.la\0" -"org.lb\0" -"org.lc\0" -"francaise.museum\0" -"panama.museum\0" -"rotorcraft.aero\0gateway.museum\0olkusz.pl\0" -"org.ky\0czeladz.pl\0ryazan.ru\0" -"org.kz\0" -"org.lk\0dyr\xc3\xb8y.no\0" -"raisa.no\0" -"dlugoleka.pl\0" -"org.ma\0" -"org.lr\0prochowice.pl\0" -"org.ls\0" -"org.me\0sandoy.no\0s\xc3\xb8r-varanger.no\0" -"org.lv\0" -"org.mg\0" -"tel\0go.th\0" -"org.ly\0" -"steam.museum\0go.tj\0" -"org.mk\0pasadena.museum\0jessheim.no\0lib.mn.us\0" -"org.ml\0" -"software.aero\0" -"org.mn\0" -"org.mo\0" -"*.fukui.jp\0decorativearts.museum\0" -"spy.museum\0org.na\0jorpeland.no\0" -"vads\xc3\xb8.no\0" -"org.mu\0building.museum\0gausdal.no\0" -"org.mv\0nannestad.no\0" -"org.mw\0org.ng\0go.ug\0" -"vr.it\0org.mx\0" -"org.my\0" -"go.tz\0" -"oppdal.no\0" -"uk.net\0" -"coop.km\0" -"*.kyoto.jp\0" -"sarpsborg.no\0org.nr\0" -"chernigov.ua\0" -"ha.cn\0no.com\0" -"space.museum\0" -"org.pa\0" -"*.ar\0" -"usgarden.museum\0" -"*.bd\0org.pe\0" -"*.au\0org.pf\0um.gov.pl\0" -"bio.br\0" -"org.ph\0" -"org.pk\0" -"fr\xc3\xa6na.no\0org.pl\0" -"nord-aurdal.no\0org.pn\0" -"*.bn\0handson.museum\0agrinet.tn\0" -"kviteseid.no\0" -"rel.ht\0virtuel.museum\0atm.pl\0org.pr\0" -"org.ps\0cherkassy.ua\0" -"org.pt\0wa.us\0" -"*.bt\0arendal.no\0magnitka.ru\0" -"depot.museum\0porsangu.no\0" -"laakesvuemie.no\0" -"sor-fron.no\0" -"heroy.more-og-romsdal.no\0" -"*.ck\0" -"!rakpetroleum.om\0" -"kr\xc3\xb8""dsherad.no\0mail.pl\0" -"mod.gi\0" -"gs.nl.no\0" -"mb.ca\0" -"pavia.it\0" -"civilisation.museum\0folldal.no\0" -"suli.hu\0" -"brumunddal.no\0" -"*.cy\0" -"pg.it\0troms\xc3\xb8.no\0" -"sex.pl\0y.se\0" -"org.ro\0" -"*.do\0" -"caserta.it\0org.sa\0" -"za.com\0halloffame.museum\0org.sb\0lviv.ua\0" -"mill.museum\0org.rs\0org.sc\0" -"org.sd\0" -"idv.hk\0!omanmobile.om\0org.ru\0org.se\0" -"langev\xc3\xa5g.no\0r\xc3\xa5holt.no\0starostwo.gov.pl\0" -"trani-andria-barletta.it\0org.sg\0" -"*.eg\0hvaler.no\0" -"*.ehime.jp\0" -"gmina.pl\0" -"bod\xc3\xb8.no\0org.sl\0" -"edu\0org.sn\0" -"org.so\0lib.wi.us\0" -"kommune.no\0" -"nome.pt\0" -"*.er\0namdalseid.no\0k12.wa.us\0" -"nm.cn\0org.st\0" -"*.et\0d\xc3\xb8nna.no\0" -"jewish.museum\0preservation.museum\0" -"slupsk.pl\0org.sy\0" -"art.br\0org.sz\0org.tj\0" -"ntr.br\0*.fj\0ski.no\0" -"*.fk\0rimini.it\0grajewo.pl\0" -"loppa.no\0" -"franziskaner.museum\0notteroy.no\0org.tn\0" -"org.to\0" -"nesoddtangen.no\0" -"org.ua\0" -"discovery.museum\0wloclawek.pl\0" -"lakas.hu\0org.tt\0" -"kurgan.ru\0" -"baltimore.museum\0nkz.ru\0org.tw\0" -"com.ac\0castle.museum\0" -"*.fukuoka.jp\0sandefjord.no\0varggat.no\0" -"com.af\0" -"com.ag\0" -"ato.br\0k12.nj.us\0" -"com.ai\0" -"city.hu\0oryol.ru\0" -"com.al\0nl.no\0mielno.pl\0cc.ma.us\0" -"org.vc\0" -"com.an\0g12.br\0" -"*.gt\0" -"*.gu\0" -"com.ba\0" -"com.bb\0americanart.museum\0" -"org.vi\0" -"kunstsammlung.museum\0" -"com.aw\0" -"flight.aero\0com.bh\0lib.mo.us\0org.vn\0" -"com.bi\0adygeya.ru\0" -"com.az\0" -"art.dz\0" -"com.bm\0" -"dr\xc3\xb8""bak.no\0" -"com.bo\0isla.pr\0" -"com.br\0" -"com.bs\0ustka.pl\0kuban.ru\0" -"press.aero\0" -"vs.it\0" -"meloy.no\0" -"*.il\0ulm.museum\0" -"com.by\0com.ci\0genoa.it\0" -"com.bz\0sn.cn\0" -"lib.or.us\0" -"santafe.museum\0org.ws\0" -}; - -QT_END_NAMESPACE - -#endif // QNETWORKCOOKIEJARTLD_P_H diff --git a/src/network/access/qnetworkcookiejartlds_p.h.INFO b/src/network/access/qnetworkcookiejartlds_p.h.INFO deleted file mode 100644 index 57a8d0e0cc..0000000000 --- a/src/network/access/qnetworkcookiejartlds_p.h.INFO +++ /dev/null @@ -1,17 +0,0 @@ -The file qnetworkcookiejartlds_p.h is generated from the Public Suffix -List (see [1] and [2]), by the program residing at -util/network/cookiejar-generateTLDs in the Qt source tree. - -That program generates a character array and an index array from the -list to provide fast lookups of elements within C++. - -Those arrays in qnetworkcookiejartlds_p.h are derived from the Public -Suffix List ([2]), which was originally provided by -Jo Hermans . - -The file qnetworkcookiejartlds_p.h was last generated Friday, -November 19th 15:24 2010. - ----- -[1] list: http://mxr.mozilla.org/mozilla-central/source/netwerk/dns/effective_tld_names.dat?raw=1 -[2] homepage: http://publicsuffix.org/ -- cgit v1.2.3 From e63026dcbd8499ea80739be3c3ae6c0c91429b9e Mon Sep 17 00:00:00 2001 From: Peter Hartmann Date: Tue, 24 May 2011 12:05:10 +0200 Subject: QUrl TLD: fix documentation file for "Add QUrl::topLevelDomain() ..." see previous commit Task-number: QTBUG-13601 (cherry picked from commit 9face4b88de2db6f552149d2f96257620e971a59) --- src/corelib/io/qurltlds_p.h.INFO | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) (limited to 'src') diff --git a/src/corelib/io/qurltlds_p.h.INFO b/src/corelib/io/qurltlds_p.h.INFO index 57a8d0e0cc..5781c2c678 100644 --- a/src/corelib/io/qurltlds_p.h.INFO +++ b/src/corelib/io/qurltlds_p.h.INFO @@ -1,15 +1,15 @@ -The file qnetworkcookiejartlds_p.h is generated from the Public Suffix +The file qurltlds_p.h is generated from the Public Suffix List (see [1] and [2]), by the program residing at -util/network/cookiejar-generateTLDs in the Qt source tree. +util/corelib/qurl-generateTLDs in the Qt source tree. That program generates a character array and an index array from the list to provide fast lookups of elements within C++. -Those arrays in qnetworkcookiejartlds_p.h are derived from the Public +Those arrays in qurltlds_p.h are derived from the Public Suffix List ([2]), which was originally provided by Jo Hermans . -The file qnetworkcookiejartlds_p.h was last generated Friday, +The file qurltlds_p.h was last generated Friday, November 19th 15:24 2010. ---- -- cgit v1.2.3 From 1be4b50bacda6301f64f62e796562a91f03bc199 Mon Sep 17 00:00:00 2001 From: Morten Sorvig Date: Wed, 25 May 2011 09:08:09 +0200 Subject: Compile. Change 0748751c brought in an extra copy of this function. --- src/gui/kernel/qcocoasharedwindowmethods_mac_p.h | 13 ------------- 1 file changed, 13 deletions(-) (limited to 'src') diff --git a/src/gui/kernel/qcocoasharedwindowmethods_mac_p.h b/src/gui/kernel/qcocoasharedwindowmethods_mac_p.h index e2539aaaf1..f5a93d98d2 100644 --- a/src/gui/kernel/qcocoasharedwindowmethods_mac_p.h +++ b/src/gui/kernel/qcocoasharedwindowmethods_mac_p.h @@ -199,19 +199,6 @@ QT_END_NAMESPACE [super setInitialFirstResponder:view]; } -- (void)setInitialFirstResponder:(NSView *)view -{ - // This method is called the first time the window is placed on screen and - // is the earliest point in time we can connect OpenGL contexts to NSViews. - QWidget *qwidget = [[QT_MANGLE_NAMESPACE(QCocoaWindowDelegate) sharedDelegate] qt_qwidgetForWindow:self]; - if (qwidget) { - qt_event_request_window_change(qwidget); - qt_mac_send_posted_gl_updates(qwidget); - } - - [super setInitialFirstResponder:view]; -} - - (BOOL)makeFirstResponder:(NSResponder *)responder { // For some reason Cocoa wants to flip the first responder -- cgit v1.2.3 From ef913833245f8401b9652a4f58bbb26735526180 Mon Sep 17 00:00:00 2001 From: Sergio Ahumada Date: Wed, 25 May 2011 14:29:28 +0200 Subject: Doc: Fixing typo Change-Id: Icd73646a9562af5fd6ae56e36ca268719d32471c Reviewed-on: http://codereview.qt.nokia.com/112 Reviewed-by: Sergio Ahumada --- src/corelib/global/qnamespace.qdoc | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'src') diff --git a/src/corelib/global/qnamespace.qdoc b/src/corelib/global/qnamespace.qdoc index 9f59c6e8e9..09611e67f4 100644 --- a/src/corelib/global/qnamespace.qdoc +++ b/src/corelib/global/qnamespace.qdoc @@ -1121,7 +1121,7 @@ \value WA_X11NetWmWindowTypeToolBar Adds _NET_WM_WINDOW_TYPE_TOOLBAR to the window's _NET_WM_WINDOW_TYPE X11 window property. See http://standards.freedesktop.org/wm-spec/ for more details. This attribute - has no effect on non-X11 platforms. \note Qt automaticaly sets this + has no effect on non-X11 platforms. \note Qt automatically sets this attribute for QToolBar. \value WA_X11NetWmWindowTypeMenu Adds _NET_WM_WINDOW_TYPE_MENU to the @@ -2593,7 +2593,7 @@ \value ImhFormattedNumbersOnly Only number input is allowed. This includes decimal point and minus sign. \value ImhUppercaseOnly Only upper case letter input is allowed. \value ImhLowercaseOnly Only lower case letter input is allowed. - \value ImhDialableCharactersOnly Only characters suitable for phone dialling are allowed. + \value ImhDialableCharactersOnly Only characters suitable for phone dialing are allowed. \value ImhEmailCharactersOnly Only characters suitable for email addresses are allowed. \value ImhUrlCharactersOnly Only characters suitable for URLs are allowed. -- cgit v1.2.3 From 6fe12b0e80b95775b1daa201ea601e537c600286 Mon Sep 17 00:00:00 2001 From: Jiang Jiang Date: Wed, 25 May 2011 11:21:53 +0200 Subject: Fix QFontEngineX11FT compilation xglyph_format is only available when XRender is present. Reviewed-by: Fabien Freling (cherry picked from commit a6642e4659b3d45ffa94f9a3c6413124d49f2b91) Change-Id: Ibd767c5055c8fb4a7d28ace141f6713f4367d1ba Reviewed-on: http://codereview.qt.nokia.com/113 Reviewed-by: Paul Olav Tvete --- src/gui/text/qfontengine_x11.cpp | 2 ++ 1 file changed, 2 insertions(+) (limited to 'src') diff --git a/src/gui/text/qfontengine_x11.cpp b/src/gui/text/qfontengine_x11.cpp index 099704894c..e3bfa5df46 100644 --- a/src/gui/text/qfontengine_x11.cpp +++ b/src/gui/text/qfontengine_x11.cpp @@ -1205,7 +1205,9 @@ QFontEngine *QFontEngineX11FT::cloneWithSize(qreal pixelSize) const delete fe; return 0; } else { +#ifndef QT_NO_XRENDER fe->xglyph_format = xglyph_format; +#endif return fe; } } -- cgit v1.2.3 From 1909e038823f8dff9d18882b64e637b15234f837 Mon Sep 17 00:00:00 2001 From: Lasse Holmstedt Date: Wed, 25 May 2011 11:24:37 +0200 Subject: Add authentication token support for wayland windows MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit For compositors that support it, the wayland clients can associate themselves with an auth token, specified by WL_AUTHENTICATION_TOKEN env var, or by directly specifying it in the wayland client plugin. Change-Id: I74a50a27c7c61c2b2cf1e09868618f36edc94cb1 Reviewed-by: Samuel Rødal Reviewed-on: http://codereview.qt.nokia.com/116 Reviewed-by: Paul Olav Tvete --- src/plugins/platforms/wayland/qwaylanddisplay.cpp | 9 ++--- src/plugins/platforms/wayland/qwaylandwindow.cpp | 1 + .../qwaylandwindowmanager-client-protocol.h | 40 ++++++++++++++++++---- .../qwaylandwindowmanagerintegration.cpp | 13 +++++-- .../qwaylandwindowmanagerintegration.h | 1 + .../wayland-windowmanager-protocol.c | 3 +- 6 files changed, 53 insertions(+), 14 deletions(-) (limited to 'src') diff --git a/src/plugins/platforms/wayland/qwaylanddisplay.cpp b/src/plugins/platforms/wayland/qwaylanddisplay.cpp index 13ee87f796..83516e9b4e 100644 --- a/src/plugins/platforms/wayland/qwaylanddisplay.cpp +++ b/src/plugins/platforms/wayland/qwaylanddisplay.cpp @@ -140,6 +140,11 @@ QWaylandDisplay::QWaylandDisplay(void) #ifdef QT_WAYLAND_GL_SUPPORT mEglIntegration = QWaylandGLIntegration::createGLIntegration(this); #endif + +#ifdef QT_WAYLAND_WINDOWMANAGER_SUPPORT + mWindowManagerIntegration = QWaylandWindowManagerIntegration::createIntegration(this); +#endif + blockingReadEvents(); qRegisterMetaType("uint32_t"); @@ -148,10 +153,6 @@ QWaylandDisplay::QWaylandDisplay(void) mEglIntegration->initialize(); #endif -#ifdef QT_WAYLAND_WINDOWMANAGER_SUPPORT - mWindowManagerIntegration = QWaylandWindowManagerIntegration::createIntegration(this); -#endif - connect(QAbstractEventDispatcher::instance(), SIGNAL(aboutToBlock()), this, SLOT(flushRequests())); mFd = wl_display_get_fd(mDisplay, sourceUpdate, this); diff --git a/src/plugins/platforms/wayland/qwaylandwindow.cpp b/src/plugins/platforms/wayland/qwaylandwindow.cpp index 3169b361ff..333a953b29 100644 --- a/src/plugins/platforms/wayland/qwaylandwindow.cpp +++ b/src/plugins/platforms/wayland/qwaylandwindow.cpp @@ -67,6 +67,7 @@ QWaylandWindow::QWaylandWindow(QWidget *window) #ifdef QT_WAYLAND_WINDOWMANAGER_SUPPORT mDisplay->windowManagerIntegration()->mapClientToProcess(qApp->applicationPid()); + mDisplay->windowManagerIntegration()->authenticateWithToken(); #endif mSurface = mDisplay->createSurface(this); diff --git a/src/plugins/platforms/wayland/windowmanager_integration/qwaylandwindowmanager-client-protocol.h b/src/plugins/platforms/wayland/windowmanager_integration/qwaylandwindowmanager-client-protocol.h index ec776c5f87..73673aef6f 100644 --- a/src/plugins/platforms/wayland/windowmanager_integration/qwaylandwindowmanager-client-protocol.h +++ b/src/plugins/platforms/wayland/windowmanager_integration/qwaylandwindowmanager-client-protocol.h @@ -36,16 +36,37 @@ struct wl_client; struct wl_windowmanager; +struct wl_proxy; + +extern void +wl_proxy_marshal(struct wl_proxy *p, uint32_t opcode, ...); +extern struct wl_proxy * +wl_proxy_create(struct wl_proxy *factory, + const struct wl_interface *interface); +extern struct wl_proxy * +wl_proxy_create_for_id(struct wl_display *display, + const struct wl_interface *interface, uint32_t id); +extern void +wl_proxy_destroy(struct wl_proxy *proxy); + +extern int +wl_proxy_add_listener(struct wl_proxy *proxy, + void (**implementation)(void), void *data); + +extern void +wl_proxy_set_user_data(struct wl_proxy *proxy, void *user_data); + +extern void * +wl_proxy_get_user_data(struct wl_proxy *proxy); + extern const struct wl_interface wl_windowmanager_interface; -#define WL_WINDOWMANAGER_MAP_CLIENT_TO_PROCESS 0 +#define wl_WINDOWMANAGER_MAP_CLIENT_TO_PROCESS 0 +#define wl_WINDOWMANAGER_AUTHENTICATE_WITH_TOKEN 1 static inline struct wl_windowmanager * -wl_windowmanager_create(struct wl_display *display, uint32_t id, uint32_t /*version*/) +wl_windowmanager_create(struct wl_display *display, uint32_t id) { - // ### does not run without latest wayland. must be enabled later - //wl_display_bind(display, id, "wl_windowmanager", version); - return (struct wl_windowmanager *) wl_proxy_create_for_id(display, &wl_windowmanager_interface, id); } @@ -72,7 +93,14 @@ static inline void wl_windowmanager_map_client_to_process(struct wl_windowmanager *wl_windowmanager, uint32_t processid) { wl_proxy_marshal((struct wl_proxy *) wl_windowmanager, - WL_WINDOWMANAGER_MAP_CLIENT_TO_PROCESS, processid); + wl_WINDOWMANAGER_MAP_CLIENT_TO_PROCESS, processid); +} + +static inline void +wl_windowmanager_authenticate_with_token(struct wl_windowmanager *wl_windowmanager, const char *wl_authentication_token) +{ + wl_proxy_marshal((struct wl_proxy *) wl_windowmanager, + wl_WINDOWMANAGER_AUTHENTICATE_WITH_TOKEN, wl_authentication_token); } #ifdef __cplusplus diff --git a/src/plugins/platforms/wayland/windowmanager_integration/qwaylandwindowmanagerintegration.cpp b/src/plugins/platforms/wayland/windowmanager_integration/qwaylandwindowmanagerintegration.cpp index bf8342308e..4236f395cb 100644 --- a/src/plugins/platforms/wayland/windowmanager_integration/qwaylandwindowmanagerintegration.cpp +++ b/src/plugins/platforms/wayland/windowmanager_integration/qwaylandwindowmanagerintegration.cpp @@ -68,12 +68,11 @@ struct wl_windowmanager *QWaylandWindowManagerIntegration::windowManager() const return mWaylandWindowManager; } -void QWaylandWindowManagerIntegration::wlHandleListenerGlobal(wl_display *display, uint32_t id, const char *interface, - uint32_t version, void *data) +void QWaylandWindowManagerIntegration::wlHandleListenerGlobal(wl_display *display, uint32_t id, const char *interface, uint32_t version, void *data) { if (strcmp(interface, "wl_windowmanager") == 0) { QWaylandWindowManagerIntegration *integration = static_cast(data); - integration->mWaylandWindowManager = wl_windowmanager_create(display,id, version); + integration->mWaylandWindowManager = wl_windowmanager_create(display, id); } } @@ -83,3 +82,11 @@ void QWaylandWindowManagerIntegration::mapClientToProcess(long long processId) wl_windowmanager_map_client_to_process(mWaylandWindowManager, (uint32_t) processId); } +void QWaylandWindowManagerIntegration::authenticateWithToken(const QByteArray &token) +{ + QByteArray authToken = token; + if (authToken.isEmpty()) + authToken = qgetenv("WL_AUTHENTICATION_TOKEN"); + if (mWaylandWindowManager) + wl_windowmanager_authenticate_with_token(mWaylandWindowManager, authToken.constData()); +} diff --git a/src/plugins/platforms/wayland/windowmanager_integration/qwaylandwindowmanagerintegration.h b/src/plugins/platforms/wayland/windowmanager_integration/qwaylandwindowmanagerintegration.h index 01b814f22a..0e3781dbe2 100644 --- a/src/plugins/platforms/wayland/windowmanager_integration/qwaylandwindowmanagerintegration.h +++ b/src/plugins/platforms/wayland/windowmanager_integration/qwaylandwindowmanagerintegration.h @@ -56,6 +56,7 @@ public: void mapSurfaceToProcess(struct wl_surface *surface, long long processId); void mapClientToProcess(long long processId); + void authenticateWithToken(const QByteArray &token = QByteArray()); private: static void wlHandleListenerGlobal(wl_display *display, uint32_t id, diff --git a/src/plugins/platforms/wayland/windowmanager_integration/wayland-windowmanager-protocol.c b/src/plugins/platforms/wayland/windowmanager_integration/wayland-windowmanager-protocol.c index 48049d8571..0250801b1f 100644 --- a/src/plugins/platforms/wayland/windowmanager_integration/wayland-windowmanager-protocol.c +++ b/src/plugins/platforms/wayland/windowmanager_integration/wayland-windowmanager-protocol.c @@ -26,7 +26,8 @@ #include "wayland-util.h" static const struct wl_message wl_windowmanager_requests[] = { - { "map_client_to_process", "u", NULL }, + { "map_client_to_process", "u" }, + { "authenticate_with_token", "s" }, }; WL_EXPORT const struct wl_interface wl_windowmanager_interface = { -- cgit v1.2.3 From ffc19505914e774e067217f5d7149af032312bb7 Mon Sep 17 00:00:00 2001 From: Jiang Jiang Date: Mon, 16 May 2011 10:20:54 +0200 Subject: Workaround a bug in Core Text to select Light fonts Currently in Core Text there is not proper way to select fonts with Light weight, for example: QFont font("Helvetica"); font.setWeight(QFont::Light); will give you Helvetica-Light, as with: QFont font("Helvetica"); font.setWeight(QFont::Normal); because of a bug in Core Text, applying 0 symbolic traits with CTFontCreateCopyWithSymbolicTraits will always return the Light variant of that font family. Thus, we should only do this unless symbolicTraits is not 0 or font.weight is not Normal (Light is not a symbolic trait, but CT doesn't support selecting Light weight numerically). Reviewed-by: Eskil (cherry picked from commit 4d5b8f66d82e9087d9d58a4e76e6b46ce7bb53cc) Change-Id: I37a970aba5019a13b9f3bc43b7fb594b74a1aa37 Reviewed-on: http://codereview.qt.nokia.com/124 Reviewed-by: Jiang Jiang --- src/gui/text/qfontengine_coretext.mm | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) (limited to 'src') diff --git a/src/gui/text/qfontengine_coretext.mm b/src/gui/text/qfontengine_coretext.mm index 24bd750e80..737edc3a8c 100644 --- a/src/gui/text/qfontengine_coretext.mm +++ b/src/gui/text/qfontengine_coretext.mm @@ -100,7 +100,12 @@ QCoreTextFontEngineMulti::QCoreTextFontEngineMulti(const QCFString &name, const QCFType descriptor = CTFontDescriptorCreateWithNameAndSize(name, fontDef.pixelSize); QCFType baseFont = CTFontCreateWithFontDescriptor(descriptor, fontDef.pixelSize, &transform); - ctfont = CTFontCreateCopyWithSymbolicTraits(baseFont, fontDef.pixelSize, &transform, symbolicTraits, symbolicTraits); + ctfont = NULL; + // There is a side effect in Core Text: if we apply 0 as symbolic traits to a font in normal weight, + // we will get the light version of that font (while the way supposed to work doesn't: + // setting kCTFontWeightTrait to some value between -1.0 to 0.0 has no effect on font selection) + if (fontDef.weight != QFont::Normal || symbolicTraits) + ctfont = CTFontCreateCopyWithSymbolicTraits(baseFont, fontDef.pixelSize, &transform, symbolicTraits, symbolicTraits); // CTFontCreateCopyWithSymbolicTraits returns NULL if we ask for a trait that does // not exist for the given font. (for example italic) -- cgit v1.2.3 From 635af8d700087b24bd8c212b14cf644e0f71a6fc Mon Sep 17 00:00:00 2001 From: Jiang Jiang Date: Wed, 11 May 2011 16:56:24 +0200 Subject: Fix QGLWidget::renderPixmap for raster engine on Mac The QPixmap buffer is backed by QRasterPixmapData instead of QMacPixmapData for the raster engine, thus we have to update qt_mac_pixmap_get_base() and qt_mac_pixmap_get_bytes_per_line(), so that QGLWidget can locate the offscreen buffer from a QPixmap. Reviewed-by: Fabien Freling (cherry picked from commit c5846314dfd80e7f7f32ba737f1884dcccbbd80d) Change-Id: I2414222f8a59e02c778177d52ad9a6e0ff68668d Reviewed-on: http://codereview.qt.nokia.com/123 Reviewed-by: Jiang Jiang --- src/gui/image/qpixmap_mac.cpp | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) (limited to 'src') diff --git a/src/gui/image/qpixmap_mac.cpp b/src/gui/image/qpixmap_mac.cpp index 7e31f5b80b..cb3016177d 100644 --- a/src/gui/image/qpixmap_mac.cpp +++ b/src/gui/image/qpixmap_mac.cpp @@ -54,6 +54,7 @@ #include #include #include +#include #include #include @@ -73,12 +74,18 @@ static int qt_pixmap_serial = 0; Q_GUI_EXPORT quint32 *qt_mac_pixmap_get_base(const QPixmap *pix) { - return static_cast(pix->data.data())->pixels; + if (QApplicationPrivate::graphics_system_name == QLatin1String("raster")) + return reinterpret_cast(static_cast(pix->data.data())->buffer()->bits()); + else + return static_cast(pix->data.data())->pixels; } Q_GUI_EXPORT int qt_mac_pixmap_get_bytes_per_line(const QPixmap *pix) { - return static_cast(pix->data.data())->bytesPerRow; + if (QApplicationPrivate::graphics_system_name == QLatin1String("raster")) + return static_cast(pix->data.data())->buffer()->bytesPerLine(); + else + return static_cast(pix->data.data())->bytesPerRow; } void qt_mac_cgimage_data_free(void *info, const void *memoryToFree, size_t) -- cgit v1.2.3 From 0ed16a1c5570014abefcc24a8caace3b0967a9b3 Mon Sep 17 00:00:00 2001 From: Jason McDonald Date: Mon, 23 May 2011 17:08:04 +1000 Subject: Remove the redundant QTEST_ACCESSIBILITY define. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit QTEST_ACCESSIBILITY was always defined and only used in one autotest. Code that uses accessibility features should be excluded if Qt was built without accessibility rather than based on a define in the test framework. Change-Id: I3a517a579a51f536a0983b43bd99e86292026552 Reviewed-by: pending Reviewed-on: http://codereview.qt.nokia.com/129 Reviewed-by: Morten Johan Sørvig Reviewed-by: Rohan McGovern --- src/testlib/qtestaccessible.h | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) (limited to 'src') diff --git a/src/testlib/qtestaccessible.h b/src/testlib/qtestaccessible.h index d304a6fc39..9cec1a6bbe 100644 --- a/src/testlib/qtestaccessible.h +++ b/src/testlib/qtestaccessible.h @@ -49,8 +49,6 @@ #ifndef QT_NO_ACCESSIBILITY -#define QTEST_ACCESSIBILITY - #define QVERIFY_EVENT(object, child, event) \ QVERIFY(QTestAccessibility::verifyEvent(object, child, (int)event)) @@ -131,9 +129,9 @@ private: if (object) { QApplication* app = qobject_cast(object); if ( !app ) - qWarning("QTEST_ACCESSIBILITY: root Object is not a QApplication!"); + qWarning("%s: root Object is not a QApplication!", Q_FUNC_INFO); } else { - qWarning("QTEST_ACCESSIBILITY: root Object called with 0 pointer"); + qWarning("%s: root Object called with 0 pointer", Q_FUNC_INFO); } } -- cgit v1.2.3 From 8c9deffcb38eb0a75b876c37613d02eb14c2c0f6 Mon Sep 17 00:00:00 2001 From: Jason Barron Date: Thu, 26 May 2011 11:52:31 +0200 Subject: Add private header support to the EGLFS platform plugin. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Several of the QPA headers include private headers in the Core, Gui and OpenGL modules and with the new modularized Qt, we need to opt-in for these. Change-Id: Ib7a81f7843ef89e3c5c5218f790287bb6c00e4cb Reviewed-on: http://codereview.qt.nokia.com/133 Reviewed-by: Samuel Rødal --- src/plugins/platforms/eglfs/eglfs.pro | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src') diff --git a/src/plugins/platforms/eglfs/eglfs.pro b/src/plugins/platforms/eglfs/eglfs.pro index 3692e38e1b..471cf63dd8 100644 --- a/src/plugins/platforms/eglfs/eglfs.pro +++ b/src/plugins/platforms/eglfs/eglfs.pro @@ -2,7 +2,7 @@ TARGET = qeglfs TEMPLATE = lib CONFIG += plugin -QT += opengl +QT += opengl core-private gui-private opengl-private DESTDIR = $$QT.gui.plugins/platforms -- cgit v1.2.3 From a78e1848118b16cbf517d14926663d175e3fb927 Mon Sep 17 00:00:00 2001 From: shiroki Date: Wed, 25 May 2011 11:11:51 +0200 Subject: fix "Host" header of ipv6 URLs in QNAM Change-Id: I6bf3320e5ab285e3d1f4d72bd1ef0a0e42813e5b Reviewed-on: http://codereview.qt.nokia.com/115 Reviewed-by: Markus Goetz --- src/network/access/qhttpnetworkconnection.cpp | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) (limited to 'src') diff --git a/src/network/access/qhttpnetworkconnection.cpp b/src/network/access/qhttpnetworkconnection.cpp index 33124fdd67..d950af4ee2 100644 --- a/src/network/access/qhttpnetworkconnection.cpp +++ b/src/network/access/qhttpnetworkconnection.cpp @@ -261,7 +261,17 @@ void QHttpNetworkConnectionPrivate::prepareRequest(HttpMessagePair &messagePair) // set the host value = request.headerField("host"); if (value.isEmpty()) { - QByteArray host = QUrl::toAce(hostName); + QHostAddress add; + QByteArray host; + if (add.setAddress(hostName)) { + if (add.protocol() == QAbstractSocket::IPv6Protocol) + host = "[" + hostName.toAscii() + "]";//format the ipv6 in the standard way + else + host = hostName.toAscii(); + + } else { + host = QUrl::toAce(hostName); + } int port = request.url().port(); if (port != -1) { -- cgit v1.2.3 From 785905a1f4b46f7278653e2e50604f23d359a848 Mon Sep 17 00:00:00 2001 From: Shane Kearns Date: Fri, 13 May 2011 16:19:18 +0100 Subject: Fix thread safety regression of QNetworkConfigurationManager Changes in 4.8 led to a timer being created in the wrong thread. I have restored the invokeMethod used to call startPolling() to solve this problem. Reviewed-By: mread (cherry picked from commit e9e95f75e7c1e8325c2acce0087ff8677d773779) Change-Id: I8b89fa89766679beb2d469f9bbd1f5e2233f061b Reviewed-on: http://codereview.qt.nokia.com/138 Reviewed-by: Markus Goetz --- src/network/bearer/qnetworkconfigmanager_p.cpp | 2 +- src/network/bearer/qnetworkconfigmanager_p.h | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) (limited to 'src') diff --git a/src/network/bearer/qnetworkconfigmanager_p.cpp b/src/network/bearer/qnetworkconfigmanager_p.cpp index 338cf59c02..54cd898c67 100644 --- a/src/network/bearer/qnetworkconfigmanager_p.cpp +++ b/src/network/bearer/qnetworkconfigmanager_p.cpp @@ -488,7 +488,7 @@ void QNetworkConfigurationManagerPrivate::enablePolling() ++forcedPolling; if (forcedPolling == 1) - startPolling(); + QMetaObject::invokeMethod(this, "startPolling"); } void QNetworkConfigurationManagerPrivate::disablePolling() diff --git a/src/network/bearer/qnetworkconfigmanager_p.h b/src/network/bearer/qnetworkconfigmanager_p.h index 02e00b9a95..04cce202c5 100644 --- a/src/network/bearer/qnetworkconfigmanager_p.h +++ b/src/network/bearer/qnetworkconfigmanager_p.h @@ -107,7 +107,7 @@ private Q_SLOTS: void pollEngines(); private: - void startPolling(); + Q_INVOKABLE void startPolling(); QTimer *pollTimer; private: -- cgit v1.2.3 From 83291e6a07a9b6dc6c2d05b4fd4492df79796bbf Mon Sep 17 00:00:00 2001 From: Olivier Goffart Date: Thu, 19 May 2011 14:43:53 +0200 Subject: Add QtPrivate::QEnableIf Needed for QtConcurrent. Like the new std::enable_if (in c++0x) Reviewed-by: Joao (cherry picked from commit 837f18f043b18410c1d93b9f1156acf729dad510) Change-Id: I837f18f043b18410c1d93b9f1156acf729dad510 Reviewed-on: http://codereview.qt.nokia.com/141 Reviewed-by: Olivier Goffart --- src/corelib/global/qglobal.h | 6 ++++++ 1 file changed, 6 insertions(+) (limited to 'src') diff --git a/src/corelib/global/qglobal.h b/src/corelib/global/qglobal.h index 3cc12aaf82..445b65ba0d 100644 --- a/src/corelib/global/qglobal.h +++ b/src/corelib/global/qglobal.h @@ -2790,6 +2790,12 @@ QT_LICENSED_MODULE(Sensors) # define QT_NO_RAWFONT #endif +namespace QtPrivate { +//like std::enable_if +template struct QEnableIf; +template struct QEnableIf { typedef T Type; }; +} + QT_END_NAMESPACE QT_END_HEADER -- cgit v1.2.3 From d3e5fc0220e57d5a9bba35780915c53790ff249f Mon Sep 17 00:00:00 2001 From: Olivier Goffart Date: Mon, 18 Apr 2011 14:07:32 +0200 Subject: Support of lambdas in QtConcurrent::run Reviewed-by: Joao (cherry picked from commit 917f2ff617209bcc283eb3590b422bcf239c0537) Change-Id: I837f18f043b18410c1d93b9f1156acf729dad510 Reviewed-on: http://codereview.qt.nokia.com/142 Reviewed-by: Olivier Goffart --- src/corelib/concurrent/qtconcurrentcompilertest.h | 14 +++ .../concurrent/qtconcurrentfunctionwrappers.h | 11 +-- src/corelib/concurrent/qtconcurrentrun.h | 75 ++++++++++++--- .../concurrent/qtconcurrentstoredfunctioncall.h | 105 +++++++++------------ src/corelib/global/qglobal.h | 3 + 5 files changed, 127 insertions(+), 81 deletions(-) (limited to 'src') diff --git a/src/corelib/concurrent/qtconcurrentcompilertest.h b/src/corelib/concurrent/qtconcurrentcompilertest.h index 884badbfbd..c139c7a8b2 100644 --- a/src/corelib/concurrent/qtconcurrentcompilertest.h +++ b/src/corelib/concurrent/qtconcurrentcompilertest.h @@ -57,6 +57,20 @@ QT_MODULE(Core) # define QT_TYPENAME typename #endif +namespace QtPrivate { + +template +class HasResultType { + typedef char Yes; + typedef void *No; + template static Yes test(int, const typename U::result_type * = 0); + template static No test(double); +public: + enum { Value = (sizeof(test(0)) == sizeof(Yes)) }; +}; + +} + QT_END_NAMESPACE QT_END_HEADER diff --git a/src/corelib/concurrent/qtconcurrentfunctionwrappers.h b/src/corelib/concurrent/qtconcurrentfunctionwrappers.h index a79ad1c305..4bf2736e6c 100644 --- a/src/corelib/concurrent/qtconcurrentfunctionwrappers.h +++ b/src/corelib/concurrent/qtconcurrentfunctionwrappers.h @@ -195,17 +195,10 @@ QtConcurrent::ConstMemberFunctionWrapper createFunctionWrapper(T (C::*func return QtConcurrent::ConstMemberFunctionWrapper(func); } - -template -void *lazyResultType_helper(int, typename T::result_type * = 0); -template -char lazyResultType_helper(double); - -template (0)) != sizeof(void*)> +template ::Value> struct LazyResultType { typedef typename Functor::result_type Type; }; template -struct LazyResultType { typedef void Type; }; - +struct LazyResultType { typedef void Type; }; template struct ReduceResultType; diff --git a/src/corelib/concurrent/qtconcurrentrun.h b/src/corelib/concurrent/qtconcurrentrun.h index 8611fba361..ef51b2adcb 100644 --- a/src/corelib/concurrent/qtconcurrentrun.h +++ b/src/corelib/concurrent/qtconcurrentrun.h @@ -71,63 +71,114 @@ namespace QtConcurrent { template QFuture run(T (*functionPointer)()) { - return (new QT_TYPENAME SelectStoredFunctorCall0::type(functionPointer))->start(); + return (new StoredFunctorCall0(functionPointer))->start(); } template QFuture run(T (*functionPointer)(Param1), const Arg1 &arg1) { - return (new QT_TYPENAME SelectStoredFunctorCall1::type(functionPointer, arg1))->start(); + return (new StoredFunctorCall1(functionPointer, arg1))->start(); } template QFuture run(T (*functionPointer)(Param1, Param2), const Arg1 &arg1, const Arg2 &arg2) { - return (new QT_TYPENAME SelectStoredFunctorCall2::type(functionPointer, arg1, arg2))->start(); + return (new StoredFunctorCall2(functionPointer, arg1, arg2))->start(); } template QFuture run(T (*functionPointer)(Param1, Param2, Param3), const Arg1 &arg1, const Arg2 &arg2, const Arg3 &arg3) { - return (new QT_TYPENAME SelectStoredFunctorCall3::type(functionPointer, arg1, arg2, arg3))->start(); + return (new StoredFunctorCall3(functionPointer, arg1, arg2, arg3))->start(); } template QFuture run(T (*functionPointer)(Param1, Param2, Param3, Param4), const Arg1 &arg1, const Arg2 &arg2, const Arg3 &arg3, const Arg4 &arg4) { - return (new QT_TYPENAME SelectStoredFunctorCall4::type(functionPointer, arg1, arg2, arg3, arg4))->start(); + return (new StoredFunctorCall4(functionPointer, arg1, arg2, arg3, arg4))->start(); } template QFuture run(T (*functionPointer)(Param1, Param2, Param3, Param4, Param5), const Arg1 &arg1, const Arg2 &arg2, const Arg3 &arg3, const Arg4 &arg4, const Arg5 &arg5) { - return (new QT_TYPENAME SelectStoredFunctorCall5::type(functionPointer, arg1, arg2, arg3, arg4, arg5))->start(); + return (new StoredFunctorCall5(functionPointer, arg1, arg2, arg3, arg4, arg5))->start(); } +#ifdef Q_COMPILER_DECLTYPE + +template +auto run(Functor functor) -> typename QtPrivate::QEnableIf::Value, QFuture >::Type +{ + typedef decltype(functor()) result_type; + return (new StoredFunctorCall0(functor))->start(); +} + +template +auto run(Functor functor, const Arg1 &arg1) + -> typename QtPrivate::QEnableIf::Value, QFuture >::Type +{ + typedef decltype(functor(arg1)) result_type; + return (new StoredFunctorCall1(functor, arg1))->start(); +} + +template +auto run(Functor functor, const Arg1 &arg1, const Arg2 &arg2) + -> typename QtPrivate::QEnableIf::Value, QFuture >::Type +{ + typedef decltype(functor(arg1, arg2)) result_type; + return (new StoredFunctorCall2(functor, arg1, arg2))->start(); +} + +template +auto run(Functor functor, const Arg1 &arg1, const Arg2 &arg2, const Arg3 &arg3) + -> typename QtPrivate::QEnableIf::Value, QFuture >::Type +{ + typedef decltype(functor(arg1, arg2, arg3)) result_type; + return (new StoredFunctorCall3(functor, arg1, arg2, arg3))->start(); +} + +template +auto run(Functor functor, const Arg1 &arg1, const Arg2 &arg2, const Arg3 &arg3, const Arg4 &arg4) + -> typename QtPrivate::QEnableIf::Value, QFuture >::Type +{ + typedef decltype(functor(arg1, arg2, arg3, arg4)) result_type; + return (new StoredFunctorCall4(functor, arg1, arg2, arg3, arg4))->start(); +} + +template +auto run(Functor functor, const Arg1 &arg1, const Arg2 &arg2, const Arg3 &arg3, const Arg4 &arg4, const Arg5 &arg5) + -> typename QtPrivate::QEnableIf::Value, QFuture >::Type +{ + typedef decltype(functor(arg1, arg2, arg3, arg4, arg5)) result_type; + return (new StoredFunctorCall5(functor, arg1, arg2, arg3, arg4, arg5))->start(); +} + +#endif + template QFuture run(FunctionObject functionObject) { - return (new QT_TYPENAME SelectStoredFunctorCall0::type(functionObject))->start(); + return (new StoredFunctorCall0(functionObject))->start(); } template QFuture run(FunctionObject functionObject, const Arg1 &arg1) { - return (new QT_TYPENAME SelectStoredFunctorCall1::type(functionObject, arg1))->start(); + return (new StoredFunctorCall1(functionObject, arg1))->start(); } template QFuture run(FunctionObject functionObject, const Arg1 &arg1, const Arg2 &arg2) { - return (new QT_TYPENAME SelectStoredFunctorCall2::type(functionObject, arg1, arg2))->start(); + return (new StoredFunctorCall2(functionObject, arg1, arg2))->start(); } template QFuture run(FunctionObject functionObject, const Arg1 &arg1, const Arg2 &arg2, const Arg3 &arg3) { - return (new QT_TYPENAME SelectStoredFunctorCall3::type(functionObject, arg1, arg2, arg3))->start(); + return (new StoredFunctorCall3(functionObject, arg1, arg2, arg3))->start(); } template QFuture run(FunctionObject functionObject, const Arg1 &arg1, const Arg2 &arg2, const Arg3 &arg3, const Arg4 &arg4) { - return (new QT_TYPENAME SelectStoredFunctorCall4::type(functionObject, arg1, arg2, arg3, arg4))->start(); + return (new StoredFunctorCall4(functionObject, arg1, arg2, arg3, arg4))->start(); } template QFuture run(FunctionObject functionObject, const Arg1 &arg1, const Arg2 &arg2, const Arg3 &arg3, const Arg4 &arg4, const Arg5 &arg5) { - return (new QT_TYPENAME SelectStoredFunctorCall5::type(functionObject, arg1, arg2, arg3, arg4, arg5))->start(); + return (new StoredFunctorCall5(functionObject, arg1, arg2, arg3, arg4, arg5))->start(); } template diff --git a/src/corelib/concurrent/qtconcurrentstoredfunctioncall.h b/src/corelib/concurrent/qtconcurrentstoredfunctioncall.h index c61f9b8014..9beb0b9c35 100644 --- a/src/corelib/concurrent/qtconcurrentstoredfunctioncall.h +++ b/src/corelib/concurrent/qtconcurrentstoredfunctioncall.h @@ -66,23 +66,16 @@ struct StoredFunctorCall0: public RunFunctionTask }; -template -struct VoidStoredFunctorCall0: public RunFunctionTask +template +struct StoredFunctorCall0: public RunFunctionTask { - inline VoidStoredFunctorCall0(FunctionPointer _function) + inline StoredFunctorCall0(FunctionPointer _function) : function(_function) {} void runFunctor() { function(); } FunctionPointer function; }; -template -struct SelectStoredFunctorCall0 -{ - typedef typename SelectSpecialization::template - Type, - VoidStoredFunctorCall0 >::type type; -}; template struct StoredFunctorPointerCall0: public RunFunctionTask { @@ -276,23 +269,16 @@ struct StoredFunctorCall1: public RunFunctionTask Arg1 arg1; }; -template -struct VoidStoredFunctorCall1: public RunFunctionTask +template +struct StoredFunctorCall1: public RunFunctionTask { - inline VoidStoredFunctorCall1(FunctionPointer _function, const Arg1 &_arg1) + inline StoredFunctorCall1(FunctionPointer _function, const Arg1 &_arg1) : function(_function), arg1(_arg1) {} void runFunctor() { function(arg1); } FunctionPointer function; Arg1 arg1; }; -template -struct SelectStoredFunctorCall1 -{ - typedef typename SelectSpecialization::template - Type, - VoidStoredFunctorCall1 >::type type; -}; template struct StoredFunctorPointerCall1: public RunFunctionTask { @@ -486,23 +472,16 @@ struct StoredFunctorCall2: public RunFunctionTask Arg1 arg1; Arg2 arg2; }; -template -struct VoidStoredFunctorCall2: public RunFunctionTask +template +struct StoredFunctorCall2: public RunFunctionTask { - inline VoidStoredFunctorCall2(FunctionPointer _function, const Arg1 &_arg1, const Arg2 &_arg2) + inline StoredFunctorCall2(FunctionPointer _function, const Arg1 &_arg1, const Arg2 &_arg2) : function(_function), arg1(_arg1), arg2(_arg2) {} void runFunctor() { function(arg1, arg2); } FunctionPointer function; Arg1 arg1; Arg2 arg2; }; -template -struct SelectStoredFunctorCall2 -{ - typedef typename SelectSpecialization::template - Type, - VoidStoredFunctorCall2 >::type type; -}; template struct StoredFunctorPointerCall2: public RunFunctionTask { @@ -696,23 +675,16 @@ struct StoredFunctorCall3: public RunFunctionTask Arg1 arg1; Arg2 arg2; Arg3 arg3; }; -template -struct VoidStoredFunctorCall3: public RunFunctionTask +template +struct StoredFunctorCall3: public RunFunctionTask { - inline VoidStoredFunctorCall3(FunctionPointer _function, const Arg1 &_arg1, const Arg2 &_arg2, const Arg3 &_arg3) + inline StoredFunctorCall3(FunctionPointer _function, const Arg1 &_arg1, const Arg2 &_arg2, const Arg3 &_arg3) : function(_function), arg1(_arg1), arg2(_arg2), arg3(_arg3) {} void runFunctor() { function(arg1, arg2, arg3); } FunctionPointer function; Arg1 arg1; Arg2 arg2; Arg3 arg3; }; -template -struct SelectStoredFunctorCall3 -{ - typedef typename SelectSpecialization::template - Type, - VoidStoredFunctorCall3 >::type type; -}; template struct StoredFunctorPointerCall3: public RunFunctionTask { @@ -906,23 +878,16 @@ struct StoredFunctorCall4: public RunFunctionTask Arg1 arg1; Arg2 arg2; Arg3 arg3; Arg4 arg4; }; -template -struct VoidStoredFunctorCall4: public RunFunctionTask +template +struct StoredFunctorCall4: public RunFunctionTask { - inline VoidStoredFunctorCall4(FunctionPointer _function, const Arg1 &_arg1, const Arg2 &_arg2, const Arg3 &_arg3, const Arg4 &_arg4) + inline StoredFunctorCall4(FunctionPointer _function, const Arg1 &_arg1, const Arg2 &_arg2, const Arg3 &_arg3, const Arg4 &_arg4) : function(_function), arg1(_arg1), arg2(_arg2), arg3(_arg3), arg4(_arg4) {} void runFunctor() { function(arg1, arg2, arg3, arg4); } FunctionPointer function; Arg1 arg1; Arg2 arg2; Arg3 arg3; Arg4 arg4; }; -template -struct SelectStoredFunctorCall4 -{ - typedef typename SelectSpecialization::template - Type, - VoidStoredFunctorCall4 >::type type; -}; template struct StoredFunctorPointerCall4: public RunFunctionTask { @@ -1116,23 +1081,16 @@ struct StoredFunctorCall5: public RunFunctionTask Arg1 arg1; Arg2 arg2; Arg3 arg3; Arg4 arg4; Arg5 arg5; }; -template -struct VoidStoredFunctorCall5: public RunFunctionTask +template +struct StoredFunctorCall5: public RunFunctionTask { - inline VoidStoredFunctorCall5(FunctionPointer _function, const Arg1 &_arg1, const Arg2 &_arg2, const Arg3 &_arg3, const Arg4 &_arg4, const Arg5 &_arg5) + inline StoredFunctorCall5(FunctionPointer _function, const Arg1 &_arg1, const Arg2 &_arg2, const Arg3 &_arg3, const Arg4 &_arg4, const Arg5 &_arg5) : function(_function), arg1(_arg1), arg2(_arg2), arg3(_arg3), arg4(_arg4), arg5(_arg5) {} void runFunctor() { function(arg1, arg2, arg3, arg4, arg5); } FunctionPointer function; Arg1 arg1; Arg2 arg2; Arg3 arg3; Arg4 arg4; Arg5 arg5; }; -template -struct SelectStoredFunctorCall5 -{ - typedef typename SelectSpecialization::template - Type, - VoidStoredFunctorCall5 >::type type; -}; template struct StoredFunctorPointerCall5: public RunFunctionTask { @@ -1316,6 +1274,33 @@ struct SelectStoredConstMemberFunctionPointerCall5 Type, VoidStoredConstMemberFunctionPointerCall5 >::type type; }; + +template +class StoredFunctorCall : public RunFunctionTask +{ +public: + StoredFunctorCall(const Functor &f) : functor(f) { } + void runFunctor() + { + this->result = functor(); + } +private: + Functor functor; +}; +template +class StoredFunctorCall : public RunFunctionTask +{ +public: + StoredFunctorCall(const Functor &f) : functor(f) { } + void runFunctor() + { + functor(); + } +private: + Functor functor; +}; + + } //namespace QtConcurrent #endif // qdoc diff --git a/src/corelib/global/qglobal.h b/src/corelib/global/qglobal.h index 445b65ba0d..3282390354 100644 --- a/src/corelib/global/qglobal.h +++ b/src/corelib/global/qglobal.h @@ -428,6 +428,7 @@ namespace QT_NAMESPACE {} # define Q_COMPILER_INITIALIZER_LISTS # define Q_COMPILER_AUTO_TYPE # define Q_COMPILER_LAMBDA +# define Q_COMPILER_DECLTYPE //# define Q_COMPILER_VARIADIC_TEMPLATES //# define Q_COMPILER_CLASS_ENUM //# define Q_COMPILER_DEFAULT_DELETE_MEMBERS @@ -524,6 +525,7 @@ namespace QT_NAMESPACE {} # if (__GNUC__ * 100 + __GNUC_MINOR__) >= 403 /* C++0x features supported in GCC 4.3: */ # define Q_COMPILER_RVALUE_REFS +# define Q_COMPILER_DECLTYPE # endif # if (__GNUC__ * 100 + __GNUC_MINOR__) >= 404 /* C++0x features supported in GCC 4.4: */ @@ -791,6 +793,7 @@ namespace QT_NAMESPACE {} # if __INTEL_COMPILER >= 1100 # define Q_COMPILER_RVALUE_REFS # define Q_COMPILER_EXTERN_TEMPLATES +# define Q_COMPILER_DECLTYPE # elif __INTEL_COMPILER >= 1200 # define Q_COMPILER_VARIADIC_TEMPLATES # define Q_COMPILER_AUTO_TYPE -- cgit v1.2.3 From cc6faee69e48fb81a1cb8d9d2102997106914f82 Mon Sep 17 00:00:00 2001 From: Olivier Goffart Date: Wed, 20 Apr 2011 13:49:19 +0200 Subject: MSVC do not really support initilizer_list std::initializer_list exists, but it is not possible to do bracket initialisation Reviewed-by: Joao (cherry picked from commit a09f5c425079405e72078813bdb7b103c29a5221) Change-Id: I837f18f043b18410c1d93b9f1156acf729dad510 Reviewed-on: http://codereview.qt.nokia.com/143 Reviewed-by: Olivier Goffart --- src/corelib/global/qglobal.h | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) (limited to 'src') diff --git a/src/corelib/global/qglobal.h b/src/corelib/global/qglobal.h index 3282390354..b3eeff78f8 100644 --- a/src/corelib/global/qglobal.h +++ b/src/corelib/global/qglobal.h @@ -425,15 +425,11 @@ namespace QT_NAMESPACE {} #if defined(Q_CC_MSVC) && _MSC_VER >= 1600 # define Q_COMPILER_RVALUE_REFS -# define Q_COMPILER_INITIALIZER_LISTS # define Q_COMPILER_AUTO_TYPE # define Q_COMPILER_LAMBDA # define Q_COMPILER_DECLTYPE -//# define Q_COMPILER_VARIADIC_TEMPLATES -//# define Q_COMPILER_CLASS_ENUM -//# define Q_COMPILER_DEFAULT_DELETE_MEMBERS -//# define Q_COMPILER_UNICODE_STRINGS -//# define Q_COMPILER_EXTERN_TEMPLATES +// MSCV has std::initilizer_list, but do not support the braces initilization +//# define Q_COMPILER_INITIALIZER_LISTS # endif -- cgit v1.2.3 From bbbea1fa966525ae8417297ce5579c5f2011ad2c Mon Sep 17 00:00:00 2001 From: Olivier Goffart Date: Fri, 20 May 2011 09:31:16 +0200 Subject: Fix typo in comment (cherry picked from commit c8a3c427e96ee11907592f5c7f72046795c027ed) Change-Id: I837f18f043b18410c1d93b9f1156acf729dad510 Reviewed-on: http://codereview.qt.nokia.com/145 Reviewed-by: Olivier Goffart Reviewed-by: axis --- src/corelib/global/qglobal.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src') diff --git a/src/corelib/global/qglobal.h b/src/corelib/global/qglobal.h index b3eeff78f8..64baf3a026 100644 --- a/src/corelib/global/qglobal.h +++ b/src/corelib/global/qglobal.h @@ -428,7 +428,7 @@ namespace QT_NAMESPACE {} # define Q_COMPILER_AUTO_TYPE # define Q_COMPILER_LAMBDA # define Q_COMPILER_DECLTYPE -// MSCV has std::initilizer_list, but do not support the braces initilization +// MSCV has std::initilizer_list, but do not support the braces initialization //# define Q_COMPILER_INITIALIZER_LISTS # endif -- cgit v1.2.3 From d49973f834fb73c534275f5b1d508329638e2823 Mon Sep 17 00:00:00 2001 From: Gabriel de Dietrich Date: Thu, 26 May 2011 15:12:48 +0200 Subject: Fix infinite recursion when changing geometry on Mac Some complex widgets might get a negatively sized rectangle when calling QWidgetPrivate:setGeometry_sys_helper(), triggering a infinite recursion. Normalizing the rectangle size before checking for size change is enough to break this infinite recursion. Task-number: QTBUG-17333 Change-Id: I4682c3088ea53fb9f28f746c8264f573b5284825 Reviewed-on: http://codereview.qt.nokia.com/156 Reviewed-by: Olivier Goffart --- src/gui/kernel/qwidget_mac.mm | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) (limited to 'src') diff --git a/src/gui/kernel/qwidget_mac.mm b/src/gui/kernel/qwidget_mac.mm index 9a873f32ac..3a025e9237 100644 --- a/src/gui/kernel/qwidget_mac.mm +++ b/src/gui/kernel/qwidget_mac.mm @@ -4541,6 +4541,11 @@ void QWidgetPrivate::setGeometry_sys_helper(int x, int y, int w, int h, bool isM QPoint oldp = q->pos(); QSize olds = q->size(); + // Apply size restrictions, applicable for Windows & Widgets. + if (QWExtra *extra = extraData()) { + w = qBound(extra->minw, w, extra->maxw); + h = qBound(extra->minh, h, extra->maxh); + } const bool isResize = (olds != QSize(w, h)); if (!realWindow && !isResize && QPoint(x, y) == oldp) @@ -4550,13 +4555,6 @@ void QWidgetPrivate::setGeometry_sys_helper(int x, int y, int w, int h, bool isM data.window_state = data.window_state & ~Qt::WindowMaximized; const bool visible = q->isVisible(); - // Apply size restrictions, applicable for Windows & Widgets. - if (QWExtra *extra = extraData()) { - w = qMin(w, extra->maxw); - h = qMin(h, extra->maxh); - w = qMax(w, extra->minw); - h = qMax(h, extra->minh); - } data.crect = QRect(x, y, w, h); if (realWindow) { -- cgit v1.2.3 From 750f995fb2e9e38f29e3ed0243b814b867d7d643 Mon Sep 17 00:00:00 2001 From: Liang Qi Date: Fri, 20 May 2011 11:07:06 +0200 Subject: Optimize QUuid::toString() and relevant QUuid::toString() and QUuid(const QString &) are too slow now. Task-number: QTBUG-19418 Reviewed-by: joao Reviewed-by: Denis Dzyubenko Reviewed-by: Ritt Konstantin Reviewed-by: Robin Burchell Reviewed-by: Richard J. Moore (cherry picked from commit 7ce566ed82666ac08f137f4d8590ce589d42c82a) Change-Id: I7e5bb4072f0941c20a7278a2d9766d4ef47be811 Reviewed-on: http://codereview.qt.nokia.com/166 Reviewed-by: Liang Qi --- src/corelib/plugin/quuid.cpp | 153 ++++++++++++++++++++++++++++--------------- src/corelib/plugin/quuid.h | 2 +- 2 files changed, 100 insertions(+), 55 deletions(-) (limited to 'src') diff --git a/src/corelib/plugin/quuid.cpp b/src/corelib/plugin/quuid.cpp index 9cd353a7da..7ef8522411 100644 --- a/src/corelib/plugin/quuid.cpp +++ b/src/corelib/plugin/quuid.cpp @@ -42,9 +42,97 @@ #include "quuid.h" #include "qdatastream.h" +#include "qendian.h" QT_BEGIN_NAMESPACE +#ifndef QT_NO_QUUID_STRING +template +void _q_toHex(Char *&dst, Integral value) +{ + static const char digits[] = "0123456789abcdef"; + + if (sizeof(Integral) > 1) + value = qToBigEndian(value); + + const char* p = reinterpret_cast(&value); + + for (uint i = 0; i < sizeof(Integral); ++i, dst += 2) { + uint j = (p[i] >> 4) & 0xf; + dst[0] = Char(digits[j]); + j = p[i] & 0xf; + dst[1] = Char(digits[j]); + } +} + +template +bool _q_fromHex(const Char *&src, Integral &value) +{ + value = 0; + + for (uint i = 0; i < sizeof(Integral) * 2; ++i) { + int ch = *src++; + int tmp; + if (ch >= '0' && ch <= '9') + tmp = ch - '0'; + else if (ch >= 'a' && ch <= 'f') + tmp = ch - 'a' + 10; + else if (ch >= 'A' && ch <= 'F') + tmp = ch - 'A' + 10; + else + return false; + + value = value * 16 + tmp; + } + + return true; +} + +template +void _q_uuidToHex(Char *&dst, const uint &d1, const ushort &d2, const ushort &d3, const uchar (&d4)[8]) +{ + *dst++ = Char('{'); + _q_toHex(dst, d1); + *dst++ = Char('-'); + _q_toHex(dst, d2); + *dst++ = Char('-'); + _q_toHex(dst, d3); + *dst++ = Char('-'); + for (int i = 0; i < 2; i++) + _q_toHex(dst, d4[i]); + *dst++ = Char('-'); + for (int i = 2; i < 8; i++) + _q_toHex(dst, d4[i]); + *dst = Char('}'); +} + +template +bool _q_uuidFromHex(const Char *&src, uint &d1, ushort &d2, ushort &d3, uchar (&d4)[8]) +{ + if (*src == Char('{')) + src++; + if (!_q_fromHex(src, d1) + || *src++ != Char('-') + || !_q_fromHex(src, d2) + || *src++ != Char('-') + || !_q_fromHex(src, d3) + || *src++ != Char('-') + || !_q_fromHex(src, d4[0]) + || !_q_fromHex(src, d4[1]) + || *src++ != Char('-') + || !_q_fromHex(src, d4[2]) + || !_q_fromHex(src, d4[3]) + || !_q_fromHex(src, d4[4]) + || !_q_fromHex(src, d4[5]) + || !_q_fromHex(src, d4[6]) + || !_q_fromHex(src, d4[7])) { + return false; + } + + return true; +} +#endif + /*! \class QUuid \brief The QUuid class stores a Universally Unique Identifier (UUID). @@ -231,50 +319,22 @@ QT_BEGIN_NAMESPACE */ QUuid::QUuid(const QString &text) { - bool ok; - if (text.isEmpty()) { - *this = QUuid(); - return; - } - QString temp = text.toUpper(); - if (temp[0] != QLatin1Char('{')) - temp = QLatin1Char('{') + text; - if (text[(int)text.length()-1] != QLatin1Char('}')) - temp += QLatin1Char('}'); - - data1 = temp.mid(1, 8).toULongLong(&ok, 16); - if (!ok) { + if (text.length() < 36) { *this = QUuid(); return; } - data2 = temp.mid(10, 4).toUInt(&ok, 16); - if (!ok) { - *this = QUuid(); - return; - } - data3 = temp.mid(15, 4).toUInt(&ok, 16); - if (!ok) { - *this = QUuid(); - return; - } - data4[0] = temp.mid(20, 2).toUInt(&ok, 16); - if (!ok) { + const ushort *data = reinterpret_cast(text.unicode()); + + if (*data == '{' && text.length() < 37) { *this = QUuid(); return; } - data4[1] = temp.mid(22, 2).toUInt(&ok, 16); - if (!ok) { + + if (!_q_uuidFromHex(data, data1, data2, data3, data4)) { *this = QUuid(); return; } - for (int i = 2; i<8; i++) { - data4[i] = temp.mid(25 + (i-2)*2, 2).toUShort(&ok, 16); - if (!ok) { - *this = QUuid(); - return; - } - } } /*! @@ -308,11 +368,6 @@ QUuid::QUuid(const char *text) \sa toString() */ -static QString uuidhex(uint data, int digits) -{ - return QString::number(data, 16).rightJustified(digits, QLatin1Char('0')); -} - /*! Returns the string representation of this QUuid. The string is formatted as five hex fields separated by '-' and enclosed in @@ -349,22 +404,12 @@ static QString uuidhex(uint data, int digits) */ QString QUuid::toString() const { - QString result; - - QChar dash = QLatin1Char('-'); - result = QLatin1Char('{') + uuidhex(data1,8); - result += dash; - result += uuidhex(data2,4); - result += dash; - result += uuidhex(data3,4); - result += dash; - result += uuidhex(data4[0],2); - result += uuidhex(data4[1],2); - result += dash; - for (int i = 2; i < 8; i++) - result += uuidhex(data4[i],2); + QString result(38, Qt::Uninitialized); + ushort *data = (ushort *)result.unicode(); - return result + QLatin1Char('}'); + _q_uuidToHex(data, data1, data2, data3, data4); + + return result; } #endif diff --git a/src/corelib/plugin/quuid.h b/src/corelib/plugin/quuid.h index f42ca91270..e9afacc560 100644 --- a/src/corelib/plugin/quuid.h +++ b/src/corelib/plugin/quuid.h @@ -108,7 +108,7 @@ struct Q_CORE_EXPORT QUuid QUuid(const QString &); QUuid(const char *); QString toString() const; - operator QString() const { return toString(); } + operator QString() const { return toString(); } // ### Qt5 remove #endif bool isNull() const; -- cgit v1.2.3 From 40425ea53e2fafcfc3fe8357459da1a083660657 Mon Sep 17 00:00:00 2001 From: Liang Qi Date: Mon, 16 May 2011 10:48:05 +0200 Subject: Fix a regression in QList::mid() It doesn't need to copy anything when pos is after size(). Task-number: QTBUG-19164 Reviewed-by: Oswald Buddenhagen (cherry picked from commit 8befc4982a32752e48c82cacbed045e7336a3569) Change-Id: Iccac75842616f0d41e457e844a15d1a3ccfeb642 Reviewed-on: http://codereview.qt.nokia.com/164 Reviewed-by: Liang Qi --- src/corelib/tools/qlist.h | 2 ++ 1 file changed, 2 insertions(+) (limited to 'src') diff --git a/src/corelib/tools/qlist.h b/src/corelib/tools/qlist.h index e6f041fe3c..4eb05d63b6 100644 --- a/src/corelib/tools/qlist.h +++ b/src/corelib/tools/qlist.h @@ -641,6 +641,8 @@ Q_OUTOFLINE_TEMPLATE QList QList::mid(int pos, int alength) const if (pos == 0 && alength == size()) return *this; QList cpy; + if (alength <= 0) + return cpy; cpy.reserve(alength); cpy.d->end = alength; QT_TRY { -- cgit v1.2.3 From bf234e32887567caa27d9aa28aac3a12f09b5f19 Mon Sep 17 00:00:00 2001 From: Friedemann Kleint Date: Wed, 25 May 2011 11:27:40 +0200 Subject: uic: Use QString::fromUtf8 for QUrl properties. As otherwise the compilation of ui_-files fails when using QT_NO_CAST_FROM_ASCII. Bug reported on mailing list. Reviewed-by: Jarek Kobus Change-Id: I00bf2e2605b97ff77efdcb68b7968375b3e9d195 (cherry picked from commit 00bf2e2605b97ff77efdcb68b7968375b3e9d195) Reviewed-on: http://codereview.qt.nokia.com/174 Reviewed-by: Friedemann Kleint --- src/tools/uic/cpp/cppwriteinitialization.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src') diff --git a/src/tools/uic/cpp/cppwriteinitialization.cpp b/src/tools/uic/cpp/cppwriteinitialization.cpp index 8660991b17..72da6db457 100644 --- a/src/tools/uic/cpp/cppwriteinitialization.cpp +++ b/src/tools/uic/cpp/cppwriteinitialization.cpp @@ -1452,7 +1452,7 @@ void WriteInitialization::writeProperties(const QString &varName, case DomProperty::Url: { const DomUrl* u = p->elementUrl(); - propertyValue = QString::fromLatin1("QUrl(%1)") + propertyValue = QString::fromLatin1("QUrl(QString::fromUtf8(%1))") .arg(fixString(u->elementString()->text(), m_dindent)); break; } -- cgit v1.2.3 From 4ace7475e7862bbe03e0d993f4675147ed28c972 Mon Sep 17 00:00:00 2001 From: Friedemann Kleint Date: Mon, 23 May 2011 09:03:52 +0200 Subject: uic: #include for QToolBox on non-laid-out forms. for the fake tab-spacing property, which accesses the internal layout and sets its spacing. Task-number: QTBUG-19339 Reviewed-by: Jarek Kobus Change-Id: I89f5c035bd3798a0998c3046de643bda0fa8da6b (cherry picked from commit 89f5c035bd3798a0998c3046de643bda0fa8da6b) Reviewed-on: http://codereview.qt.nokia.com/173 Reviewed-by: Friedemann Kleint --- src/tools/uic/cpp/cppwriteincludes.cpp | 7 ++++++- src/tools/uic/cpp/cppwriteincludes.h | 1 + 2 files changed, 7 insertions(+), 1 deletion(-) (limited to 'src') diff --git a/src/tools/uic/cpp/cppwriteincludes.cpp b/src/tools/uic/cpp/cppwriteincludes.cpp index 16a87c8d7b..c4613e20ae 100644 --- a/src/tools/uic/cpp/cppwriteincludes.cpp +++ b/src/tools/uic/cpp/cppwriteincludes.cpp @@ -82,7 +82,7 @@ static inline QString moduleHeader(const QString &module, const QString &header) namespace CPP { WriteIncludes::WriteIncludes(Uic *uic) - : m_uic(uic), m_output(uic->output()), m_scriptsActivated(false) + : m_uic(uic), m_output(uic->output()), m_scriptsActivated(false), m_laidOut(false) { // When possible (no namespace) use the "QtModule/QClass" convention // and create a re-mapping of the old header "qclass.h" to it. Do not do this @@ -106,6 +106,7 @@ WriteIncludes::WriteIncludes(Uic *uic) void WriteIncludes::acceptUI(DomUI *node) { m_scriptsActivated = false; + m_laidOut = false; m_localIncludes.clear(); m_globalIncludes.clear(); m_knownClasses.clear(); @@ -144,6 +145,7 @@ void WriteIncludes::acceptWidget(DomWidget *node) void WriteIncludes::acceptLayout(DomLayout *node) { add(node->attributeClass()); + m_laidOut = true; TreeWalker::acceptLayout(node); } @@ -220,6 +222,9 @@ void WriteIncludes::add(const QString &className, bool determineHeader, const QS m_knownClasses.insert(className); + if (!m_laidOut && m_uic->customWidgetsInfo()->extends(className, QLatin1String("QToolBox"))) + add(QLatin1String("QLayout")); // spacing property of QToolBox) + if (className == QLatin1String("Line")) { // ### hmm, deprecate me! add(QLatin1String("QFrame")); return; diff --git a/src/tools/uic/cpp/cppwriteincludes.h b/src/tools/uic/cpp/cppwriteincludes.h index 39b1ddf897..e8215364b9 100644 --- a/src/tools/uic/cpp/cppwriteincludes.h +++ b/src/tools/uic/cpp/cppwriteincludes.h @@ -107,6 +107,7 @@ private: StringMap m_oldHeaderToNewHeader; bool m_scriptsActivated; + bool m_laidOut; }; } // namespace CPP -- cgit v1.2.3 From fb214079bda2122878466db510fc7549065c3ae3 Mon Sep 17 00:00:00 2001 From: Liang Qi Date: Mon, 23 May 2011 09:27:23 +0200 Subject: Fix the build for QUuid Add a quint8 specialization for qbswap. Reviewed-by: Bradley T. Hughes (cherry picked from commit 32a583b575da1b387955734ccf36b0a93de37670) Change-Id: I7dae5e47565ed30de960983649e5c214e0303fe3 Reviewed-on: http://codereview.qt.nokia.com/171 Reviewed-by: Liang Qi --- src/corelib/global/qendian.h | 5 +++++ src/corelib/plugin/quuid.cpp | 3 +-- 2 files changed, 6 insertions(+), 2 deletions(-) (limited to 'src') diff --git a/src/corelib/global/qendian.h b/src/corelib/global/qendian.h index 4e3f4e312f..8a17af55f2 100644 --- a/src/corelib/global/qendian.h +++ b/src/corelib/global/qendian.h @@ -363,6 +363,11 @@ template inline void qToLittleEndian(T src, uchar *dest) #endif // Q_BYTE_ORDER == Q_BIG_ENDIAN +template <> inline quint8 qbswap(quint8 source) +{ + return source; +} + QT_END_NAMESPACE QT_END_HEADER diff --git a/src/corelib/plugin/quuid.cpp b/src/corelib/plugin/quuid.cpp index 7ef8522411..e99f87a86f 100644 --- a/src/corelib/plugin/quuid.cpp +++ b/src/corelib/plugin/quuid.cpp @@ -52,8 +52,7 @@ void _q_toHex(Char *&dst, Integral value) { static const char digits[] = "0123456789abcdef"; - if (sizeof(Integral) > 1) - value = qToBigEndian(value); + value = qToBigEndian(value); const char* p = reinterpret_cast(&value); -- cgit v1.2.3 From ae0eb22591e7af6555d0cff39d63861a4fe4b890 Mon Sep 17 00:00:00 2001 From: Liang Qi Date: Fri, 20 May 2011 12:45:56 +0200 Subject: Optimize QUuid::QUuid(const char *) Reviewed-by: joao (cherry picked from commit 96d10abbb40c52ac6274f1144766f3fb27dfd726) Change-Id: I050b602b6cac669b4d88046b0a707048ce0a8cda Reviewed-on: http://codereview.qt.nokia.com/170 Reviewed-by: Liang Qi --- src/corelib/plugin/quuid.cpp | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) (limited to 'src') diff --git a/src/corelib/plugin/quuid.cpp b/src/corelib/plugin/quuid.cpp index e99f87a86f..63f6e045ea 100644 --- a/src/corelib/plugin/quuid.cpp +++ b/src/corelib/plugin/quuid.cpp @@ -341,7 +341,15 @@ QUuid::QUuid(const QString &text) */ QUuid::QUuid(const char *text) { - *this = QUuid(QString::fromLatin1(text)); + if (!text) { + *this = QUuid(); + return; + } + + if (!_q_uuidFromHex(text, data1, data2, data3, data4)) { + *this = QUuid(); + return; + } } #endif -- cgit v1.2.3 From c8888b518bd733778518e1643682f97bc7b28b64 Mon Sep 17 00:00:00 2001 From: Liang Qi Date: Fri, 20 May 2011 09:48:30 +0200 Subject: QDataStream: speedup steaming of QUuid. By reading and writing as a whole block, because the size of QUuid is fixed. Reviewed-by: joao (cherry picked from commit d56d7f107f9d18810d742ac4d3a2e36077722cb8) Change-Id: I90554d68da7394c99c48acd0bc5a0eee3b3f7776 Reviewed-on: http://codereview.qt.nokia.com/169 Reviewed-by: Liang Qi --- src/corelib/plugin/quuid.cpp | 64 ++++++++++++++++++++++++++++++++------------ 1 file changed, 47 insertions(+), 17 deletions(-) (limited to 'src') diff --git a/src/corelib/plugin/quuid.cpp b/src/corelib/plugin/quuid.cpp index 63f6e045ea..796ee01602 100644 --- a/src/corelib/plugin/quuid.cpp +++ b/src/corelib/plugin/quuid.cpp @@ -427,11 +427,30 @@ QString QUuid::toString() const */ QDataStream &operator<<(QDataStream &s, const QUuid &id) { - s << (quint32)id.data1; - s << (quint16)id.data2; - s << (quint16)id.data3; - for (int i = 0; i < 8; i++) - s << (quint8)id.data4[i]; + QByteArray bytes; + if (s.byteOrder() == QDataStream::BigEndian) { + bytes = id.toRfc4122(); + } else { + // we know how many bytes a UUID has, I hope :) + bytes = QByteArray(16, Qt::Uninitialized); + uchar *data = reinterpret_cast(bytes.data()); + + qToLittleEndian(id.data1, data); + data += sizeof(quint32); + qToLittleEndian(id.data2, data); + data += sizeof(quint16); + qToLittleEndian(id.data3, data); + data += sizeof(quint16); + + for (int i = 0; i < 8; ++i) { + *(data) = id.data4[i]; + data++; + } + } + + if (s.writeRawData(bytes.data(), 16) != 16) { + s.setStatus(QDataStream::WriteFailed); + } return s; } @@ -441,19 +460,30 @@ QDataStream &operator<<(QDataStream &s, const QUuid &id) */ QDataStream &operator>>(QDataStream &s, QUuid &id) { - quint32 u32; - quint16 u16; - quint8 u8; - s >> u32; - id.data1 = u32; - s >> u16; - id.data2 = u16; - s >> u16; - id.data3 = u16; - for (int i = 0; i < 8; i++) { - s >> u8; - id.data4[i] = u8; + QByteArray bytes(16, Qt::Uninitialized); + if (s.readRawData(bytes.data(), 16) != 16) { + s.setStatus(QDataStream::ReadPastEnd); + return s; } + + if (s.byteOrder() == QDataStream::BigEndian) { + id = QUuid::fromRfc4122(bytes); + } else { + const uchar *data = reinterpret_cast(bytes.constData()); + + id.data1 = qFromLittleEndian(data); + data += sizeof(quint32); + id.data2 = qFromLittleEndian(data); + data += sizeof(quint16); + id.data3 = qFromLittleEndian(data); + data += sizeof(quint16); + + for (int i = 0; i < 8; ++i) { + id.data4[i] = *(data); + data++; + } + } + return s; } #endif // QT_NO_DATASTREAM -- cgit v1.2.3 From 8f4c007f85a4c16728281cb36f2f0f85b56c0999 Mon Sep 17 00:00:00 2001 From: Liang Qi Date: Fri, 20 May 2011 11:36:01 +0200 Subject: Add QUuid::toByteArray() and relevant Add QUuid::toByteArray() and QUuid(const QByteArray &). Same behavior with QUuid::toString() and QUuid(const QString &). Task-number: QTBUG-19419 Reviewed-by: joao (cherry picked from commit 71f923f29e2c60444a85fc765fc582e06cb7eca4) Change-Id: I41dad65e269f739ba9ec1c27e9da96af6401356c Reviewed-on: http://codereview.qt.nokia.com/167 Reviewed-by: Liang Qi --- src/corelib/plugin/quuid.cpp | 79 ++++++++++++++++++++++++++++++++++++++++++++ src/corelib/plugin/quuid.h | 2 ++ 2 files changed, 81 insertions(+) (limited to 'src') diff --git a/src/corelib/plugin/quuid.cpp b/src/corelib/plugin/quuid.cpp index 796ee01602..facd732609 100644 --- a/src/corelib/plugin/quuid.cpp +++ b/src/corelib/plugin/quuid.cpp @@ -351,6 +351,39 @@ QUuid::QUuid(const char *text) return; } } + +/*! + Creates a QUuid object from the QByteArray \a text, which must be + formatted as five hex fields separated by '-', e.g., + "{xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}" where 'x' is a hex + digit. The curly braces shown here are optional, but it is normal to + include them. If the conversion fails, a null UUID is created. See + toByteArray() for an explanation of how the five hex fields map to the + public data members in QUuid. + + \since 4.8 + + \sa toByteArray(), QUuid() +*/ +QUuid::QUuid(const QByteArray &text) +{ + if (text.length() < 36) { + *this = QUuid(); + return; + } + + const char *data = text.constData(); + + if (*data == '{' && text.length() < 37) { + *this = QUuid(); + return; + } + + if (!_q_uuidFromHex(data, data1, data2, data3, data4)) { + *this = QUuid(); + return; + } +} #endif /*! @@ -418,6 +451,52 @@ QString QUuid::toString() const return result; } + +/*! + Returns the binary representation of this QUuid. The byte array is + formatted as five hex fields separated by '-' and enclosed in + curly braces, i.e., "{xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}" where + 'x' is a hex digit. From left to right, the five hex fields are + obtained from the four public data members in QUuid as follows: + + \table + \header + \o Field # + \o Source + + \row + \o 1 + \o data1 + + \row + \o 2 + \o data2 + + \row + \o 3 + \o data3 + + \row + \o 4 + \o data4[0] .. data4[1] + + \row + \o 5 + \o data4[2] .. data4[7] + + \endtable + + \since 4.8 +*/ +QByteArray QUuid::toByteArray() const +{ + QByteArray result(38, Qt::Uninitialized); + char *data = result.data(); + + _q_uuidToHex(data, data1, data2, data3, data4); + + return result; +} #endif #ifndef QT_NO_DATASTREAM diff --git a/src/corelib/plugin/quuid.h b/src/corelib/plugin/quuid.h index e9afacc560..69c4044e3c 100644 --- a/src/corelib/plugin/quuid.h +++ b/src/corelib/plugin/quuid.h @@ -109,6 +109,8 @@ struct Q_CORE_EXPORT QUuid QUuid(const char *); QString toString() const; operator QString() const { return toString(); } // ### Qt5 remove + QUuid(const QByteArray &); + QByteArray toByteArray() const; #endif bool isNull() const; -- cgit v1.2.3 From 623c753a7b6a582e352acc5a0abbb7eb402af3b7 Mon Sep 17 00:00:00 2001 From: Liang Qi Date: Fri, 27 May 2011 13:34:28 +0200 Subject: Add QUuid::toRfc4122() and fromRfc4122() Following the RFC4122, provide the interfaces between QUuid and QByteArray, they are simpler then toByteArray() and relevant. Thanks for the suggestion and brief code from Robin Burchell. Task-number: QTBUG-19420 Reviewed-by: joao (cherry picked from commit 06873e467d98ad60d827afae29500bf2ff783c03) Change-Id: I4623ae3363f1d5affa45de73fac616bb67a9eaa1 Reviewed-on: http://codereview.qt.nokia.com/168 Reviewed-by: Liang Qi --- src/corelib/plugin/quuid.cpp | 92 ++++++++++++++++++++++++++++++++++++++++++++ src/corelib/plugin/quuid.h | 2 + 2 files changed, 94 insertions(+) (limited to 'src') diff --git a/src/corelib/plugin/quuid.cpp b/src/corelib/plugin/quuid.cpp index facd732609..eb29e6eba8 100644 --- a/src/corelib/plugin/quuid.cpp +++ b/src/corelib/plugin/quuid.cpp @@ -386,6 +386,45 @@ QUuid::QUuid(const QByteArray &text) } #endif +/*! + Creates a QUuid object from the binary representation of the UUID, as + specified by RFC 4122 section 4.1.2. See toRfc4122() for a further + explanation of the order of bytes required. + + The byte array accepted is NOT a human readable format. + + If the conversion fails, a null UUID is created. + + \since 4.8 + + \sa toRfc4122(), QUuid() +*/ +QUuid QUuid::fromRfc4122(const QByteArray &bytes) +{ + if (bytes.isEmpty() || bytes.length() != 16) + return QUuid(); + + uint d1; + ushort d2, d3; + uchar d4[8]; + + const uchar *data = reinterpret_cast(bytes.constData()); + + d1 = qFromBigEndian(data); + data += sizeof(quint32); + d2 = qFromBigEndian(data); + data += sizeof(quint16); + d3 = qFromBigEndian(data); + data += sizeof(quint16); + + for (int i = 0; i < 8; ++i) { + d4[i] = *(data); + data++; + } + + return QUuid(d1, d2, d3, d4[0], d4[1], d4[2], d4[3], d4[4], d4[5], d4[6], d4[7]); +} + /*! \fn bool QUuid::operator==(const QUuid &other) const @@ -499,6 +538,59 @@ QByteArray QUuid::toByteArray() const } #endif +/*! + Returns the binary representation of this QUuid. The byte array is in big + endian format, and formatted according to RFC 4122, section 4.1.2 - + "Layout and byte order". + + The order is as follows: + + \table + \header + \o Field # + \o Source + + \row + \o 1 + \o data1 + + \row + \o 2 + \o data2 + + \row + \o 3 + \o data3 + + \row + \o 4 + \o data4[0] .. data4[7] + + \endtable + + \since 4.8 +*/ +QByteArray QUuid::toRfc4122() const +{ + // we know how many bytes a UUID has, I hope :) + QByteArray bytes(16, Qt::Uninitialized); + uchar *data = reinterpret_cast(bytes.data()); + + qToBigEndian(data1, data); + data += sizeof(quint32); + qToBigEndian(data2, data); + data += sizeof(quint16); + qToBigEndian(data3, data); + data += sizeof(quint16); + + for (int i = 0; i < 8; ++i) { + *(data) = data4[i]; + data++; + } + + return bytes; +} + #ifndef QT_NO_DATASTREAM /*! \relates QUuid diff --git a/src/corelib/plugin/quuid.h b/src/corelib/plugin/quuid.h index 69c4044e3c..832d5bc5c6 100644 --- a/src/corelib/plugin/quuid.h +++ b/src/corelib/plugin/quuid.h @@ -112,6 +112,8 @@ struct Q_CORE_EXPORT QUuid QUuid(const QByteArray &); QByteArray toByteArray() const; #endif + QByteArray toRfc4122() const; + static QUuid fromRfc4122(const QByteArray &); bool isNull() const; bool operator==(const QUuid &orig) const -- cgit v1.2.3 From 93339428c040a2576e4e0da315b1a6a4e4c1916f Mon Sep 17 00:00:00 2001 From: Jiang Jiang Date: Fri, 27 May 2011 14:24:21 +0200 Subject: Fix compile for systems with old fontconfig MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Change-Id: Ia26796bdbab7988d14163d3c1290111c0cb22bf7 Reviewed-on: http://codereview.qt.nokia.com/182 Reviewed-by: Samuel Rødal --- src/gui/text/qfontdatabase_x11.cpp | 5 +++++ 1 file changed, 5 insertions(+) (limited to 'src') diff --git a/src/gui/text/qfontdatabase_x11.cpp b/src/gui/text/qfontdatabase_x11.cpp index 8a13d91fbb..a5fdcb5216 100644 --- a/src/gui/text/qfontdatabase_x11.cpp +++ b/src/gui/text/qfontdatabase_x11.cpp @@ -1996,6 +1996,11 @@ void QFontDatabase::load(const QFontPrivate *d, int script) QFontCache::instance()->insertEngine(key, fe); } +// Needed for fontconfig version < 2.2.97 +#ifndef FC_FAMILYLANG +#define FC_FAMILYLANG "familylang" +#endif + static void registerFont(QFontDatabasePrivate::ApplicationFont *fnt) { #if defined(QT_NO_FONTCONFIG) -- cgit v1.2.3 From 37f20ea8e64afa2d29d9fb56ac34ff405367a2b8 Mon Sep 17 00:00:00 2001 From: Jiang Jiang Date: Fri, 20 May 2011 10:26:54 +0200 Subject: Fix ligature offset in multi-line text Reviewed-by: Eskil (cherry picked from commit 278cf1f37945050c4a46d5acab0659f3a7546a43) Change-Id: Ice20aa38a49ea16cf56bd3705c7d400ee165a9c2 Reviewed-on: http://codereview.qt.nokia.com/195 Reviewed-by: Jiang Jiang --- src/gui/text/qtextlayout.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'src') diff --git a/src/gui/text/qtextlayout.cpp b/src/gui/text/qtextlayout.cpp index 9e067d763f..2e2a6234ae 100644 --- a/src/gui/text/qtextlayout.cpp +++ b/src/gui/text/qtextlayout.cpp @@ -2609,8 +2609,8 @@ qreal QTextLine::cursorToX(int *cursorPos, Edge edge) const } else { bool rtl = eng->isRightToLeft(); bool visual = eng->visualCursorMovement(); + int end = qMin(lineEnd, si->position + l) - si->position; if (reverse) { - int end = qMin(lineEnd, si->position + l) - si->position; int glyph_end = end == l ? si->num_glyphs : logClusters[end]; int glyph_start = glyph_pos; if (visual && !rtl && !(lastLine && itm == (visualOrder[nItems - 1] + firstItem))) @@ -2626,7 +2626,7 @@ qreal QTextLine::cursorToX(int *cursorPos, Edge edge) const for (int i = glyph_start; i <= glyph_end; i++) x += glyphs.effectiveAdvance(i); } - x += eng->offsetInLigature(si, pos, line.length, glyph_pos); + x += eng->offsetInLigature(si, pos, end, glyph_pos); } *cursorPos = pos + si->position; -- cgit v1.2.3 From 9f837af9458ea4825b9a8061de444f62d8a7a048 Mon Sep 17 00:00:00 2001 From: Jiang Jiang Date: Thu, 19 May 2011 10:29:49 +0200 Subject: Support placing cursor in ligature with mouse or touch We need to find out the closest element in the ligature to the point we clicked (or tapped), currently we do this by dividing the width of that ligature glyph evenly by the number of characters it covered. We only support Common and Greek script at this point, ligatures in other scripts are still handled as a whole. Task-number: QTBUG-19260 Reviewed-by: Eskil (cherry picked from commit 5338d78aa9d80ddd2bcb21e6b22cd2cf1522a7d3) Change-Id: Ic747e9458d561aca0848dcd1e8b94e0a23fd8189 Reviewed-on: http://codereview.qt.nokia.com/196 Reviewed-by: Jiang Jiang --- src/gui/text/qtextengine.cpp | 69 ++++++++++++++++++++++++++++++++++++++++++++ src/gui/text/qtextengine_p.h | 2 ++ src/gui/text/qtextlayout.cpp | 18 +++++++----- 3 files changed, 82 insertions(+), 7 deletions(-) (limited to 'src') diff --git a/src/gui/text/qtextengine.cpp b/src/gui/text/qtextengine.cpp index b43c8f448b..ad4f6d3fc6 100644 --- a/src/gui/text/qtextengine.cpp +++ b/src/gui/text/qtextengine.cpp @@ -2825,6 +2825,75 @@ QFixed QTextEngine::offsetInLigature(const QScriptItem *si, int pos, int max, in return 0; } +// Scan in logClusters[from..to-1] for glyph_pos +int QTextEngine::getClusterLength(unsigned short *logClusters, + const HB_CharAttributes *attributes, + int from, int to, int glyph_pos, int *start) +{ + int clusterLength = 0; + for (int i = from; i < to; i++) { + if (logClusters[i] == glyph_pos && attributes[i].charStop) { + if (*start < 0) + *start = i; + clusterLength++; + } + else if (clusterLength) + break; + } + return clusterLength; +} + +int QTextEngine::positionInLigature(const QScriptItem *si, int end, + QFixed x, QFixed edge, int glyph_pos, + bool cursorOnCharacter) +{ + unsigned short *logClusters = this->logClusters(si); + int clusterStart = -1; + int clusterLength = 0; + + if (si->analysis.script != QUnicodeTables::Common && + si->analysis.script != QUnicodeTables::Greek) { + if (glyph_pos == -1) + return si->position + end; + else { + int i; + for (i = 0; i < end; i++) + if (logClusters[i] == glyph_pos) + break; + return si->position + i; + } + } + + if (glyph_pos == -1 && end > 0) + glyph_pos = logClusters[end - 1]; + else { + if (x <= edge) + glyph_pos--; + } + + const HB_CharAttributes *attrs = attributes(); + clusterLength = getClusterLength(logClusters, attrs, 0, end, glyph_pos, &clusterStart); + + if (clusterLength) { + const QGlyphLayout &glyphs = shapedGlyphs(si); + QFixed glyphWidth = glyphs.effectiveAdvance(glyph_pos); + // the approximate width of each individual element of the ligature + QFixed perItemWidth = glyphWidth / clusterLength; + QFixed left = x > edge ? edge : edge - glyphWidth; + int n = ((x - left) / perItemWidth).floor().toInt(); + QFixed dist = x - left - n * perItemWidth; + int closestItem = dist > (perItemWidth / 2) ? n + 1 : n; + if (cursorOnCharacter && closestItem > 0) + closestItem--; + int pos = si->position + clusterStart + closestItem; + // Jump to the next charStop + while (!attrs[pos].charStop && pos < end) + pos++; + return pos; + } + return si->position + end; +} + int QTextEngine::previousLogicalPosition(int oldPos) const { const HB_CharAttributes *attrs = attributes(); diff --git a/src/gui/text/qtextengine_p.h b/src/gui/text/qtextengine_p.h index ed24d5967b..055974a4ad 100644 --- a/src/gui/text/qtextengine_p.h +++ b/src/gui/text/qtextengine_p.h @@ -620,6 +620,7 @@ public: QFixed leadingSpaceWidth(const QScriptLine &line); QFixed offsetInLigature(const QScriptItem *si, int pos, int max, int glyph_pos); + int positionInLigature(const QScriptItem *si, int end, QFixed x, QFixed edge, int glyph_pos, bool cursorOnCharacter); int previousLogicalPosition(int oldPos) const; int nextLogicalPosition(int oldPos) const; int lineNumberForTextPosition(int pos); @@ -642,6 +643,7 @@ private: void resolveAdditionalFormats() const; int endOfLine(int lineNum); int beginningOfLine(int lineNum); + int getClusterLength(unsigned short *logClusters, const HB_CharAttributes *attributes, int from, int to, int glyph_pos, int *start); }; class QStackTextEngine : public QTextEngine { diff --git a/src/gui/text/qtextlayout.cpp b/src/gui/text/qtextlayout.cpp index 2e2a6234ae..add25cdad9 100644 --- a/src/gui/text/qtextlayout.cpp +++ b/src/gui/text/qtextlayout.cpp @@ -2741,6 +2741,7 @@ int QTextLine::xToCursor(qreal _x, CursorPosition cpos) const } int glyph_pos = -1; + QFixed edge; // has to be inside run if (cpos == QTextLine::CursorOnCharacter) { if (si.analysis.bidiLevel % 2) { @@ -2751,6 +2752,7 @@ int QTextLine::xToCursor(qreal _x, CursorPosition cpos) const if (pos < x) break; glyph_pos = gs; + edge = pos; break; } pos -= glyphs.effectiveAdvance(gs); @@ -2763,6 +2765,7 @@ int QTextLine::xToCursor(qreal _x, CursorPosition cpos) const if (pos > x) break; glyph_pos = gs; + edge = pos; } pos += glyphs.effectiveAdvance(gs); ++gs; @@ -2776,6 +2779,7 @@ int QTextLine::xToCursor(qreal _x, CursorPosition cpos) const while (gs <= ge) { if (glyphs.attributes[gs].clusterStart && qAbs(x-pos) < dist) { glyph_pos = gs; + edge = pos; dist = qAbs(x-pos); } pos -= glyphs.effectiveAdvance(gs); @@ -2785,6 +2789,7 @@ int QTextLine::xToCursor(qreal _x, CursorPosition cpos) const while (ge >= gs) { if (glyphs.attributes[ge].clusterStart && qAbs(x-pos) < dist) { glyph_pos = ge; + edge = pos; dist = qAbs(x-pos); } pos += glyphs.effectiveAdvance(ge); @@ -2796,6 +2801,7 @@ int QTextLine::xToCursor(qreal _x, CursorPosition cpos) const while (gs <= ge) { if (glyphs.attributes[gs].clusterStart && qAbs(x-pos) < dist) { glyph_pos = gs; + edge = pos; dist = qAbs(x-pos); } pos += glyphs.effectiveAdvance(gs); @@ -2807,6 +2813,7 @@ int QTextLine::xToCursor(qreal _x, CursorPosition cpos) const pos += glyphs.effectiveAdvance(gs); if (glyphs.attributes[gs].clusterStart && qAbs(x-pos) < dist) { glyph_pos = gs; + edge = pos; dist = qAbs(x-pos); } ++gs; @@ -2823,16 +2830,13 @@ int QTextLine::xToCursor(qreal _x, CursorPosition cpos) const if (rtl && nchars > 0) return insertionPoints[lastLine ? nchars : nchars - 1]; } - return si.position + end; + return eng->positionInLigature(&si, end, x, pos, -1, + cpos == QTextLine::CursorOnCharacter); } } Q_ASSERT(glyph_pos != -1); - int j; - for (j = 0; j < eng->length(item); ++j) - if (logClusters[j] == glyph_pos) - break; -// qDebug("at pos %d (in run: %d)", si.position + j, j); - return si.position + j; + return eng->positionInLigature(&si, end, x, edge, glyph_pos, + cpos == QTextLine::CursorOnCharacter); } } // right of last item -- cgit v1.2.3 From 8ff3028e2354a32908c3dd03b330b5734e15630e Mon Sep 17 00:00:00 2001 From: Gunnar Sletta Date: Mon, 30 May 2011 15:33:21 +0200 Subject: Export the qt_gl_read_framebuffer function for use in declarative MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Change-Id: Ia1dd186ca954774e1faaa4b2e606acac9333d9b0 Reviewed-on: http://codereview.qt.nokia.com/224 Reviewed-by: Qt Sanity Bot Reviewed-by: Jørgen Lind --- src/opengl/qgl.cpp | 2 +- src/opengl/qglframebufferobject.cpp | 2 +- src/opengl/qglpixelbuffer.cpp | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) (limited to 'src') diff --git a/src/opengl/qgl.cpp b/src/opengl/qgl.cpp index 61ccce117b..f1fb2b4e7f 100644 --- a/src/opengl/qgl.cpp +++ b/src/opengl/qgl.cpp @@ -1795,7 +1795,7 @@ static void convertFromGLImage(QImage &img, int w, int h, bool alpha_format, boo img = img.mirrored(); } -QImage qt_gl_read_framebuffer(const QSize &size, bool alpha_format, bool include_alpha) +Q_OPENGL_EXPORT QImage qt_gl_read_framebuffer(const QSize &size, bool alpha_format, bool include_alpha) { QImage img(size, (alpha_format && include_alpha) ? QImage::Format_ARGB32_Premultiplied : QImage::Format_RGB32); diff --git a/src/opengl/qglframebufferobject.cpp b/src/opengl/qglframebufferobject.cpp index 0af8108f03..682c26255d 100644 --- a/src/opengl/qglframebufferobject.cpp +++ b/src/opengl/qglframebufferobject.cpp @@ -59,7 +59,7 @@ QT_BEGIN_NAMESPACE -extern QImage qt_gl_read_framebuffer(const QSize&, bool, bool); +extern Q_OPENGL_EXPORT QImage qt_gl_read_framebuffer(const QSize&, bool, bool); #define QGL_FUNC_CONTEXT const QGLContext *ctx = d_ptr->fbo_guard.context(); #define QGL_FUNCP_CONTEXT const QGLContext *ctx = fbo_guard.context(); diff --git a/src/opengl/qglpixelbuffer.cpp b/src/opengl/qglpixelbuffer.cpp index 3afb3b1fae..45e7cdd875 100644 --- a/src/opengl/qglpixelbuffer.cpp +++ b/src/opengl/qglpixelbuffer.cpp @@ -113,7 +113,7 @@ extern void qgl_cleanup_glyph_cache(QGLContext *); void qgl_cleanup_glyph_cache(QGLContext *) {} #endif -extern QImage qt_gl_read_framebuffer(const QSize&, bool, bool); +extern Q_OPENGL_EXPORT QImage qt_gl_read_framebuffer(const QSize&, bool, bool); QGLContext* QGLPBufferGLPaintDevice::context() const -- cgit v1.2.3 From a8814fcb697893f6ab151342727ea0867f6fec21 Mon Sep 17 00:00:00 2001 From: axis Date: Fri, 27 May 2011 10:10:36 +0200 Subject: Made qpluginbase.pri into a feature profile. This enables other modules to use it without having access to the QtBase sources. Change-Id: I0a588b2e14ca88fa068c7c2bcc69ff669444f6c6 Task: QTBUG-19585 Reviewed-on: http://codereview.qt.nokia.com/237 Reviewed-by: Qt Sanity Bot Reviewed-by: Rohan McGovern --- src/plugins/accessible/widgets/widgets.pro | 2 +- src/plugins/bearer/connman/connman.pro | 2 +- src/plugins/bearer/corewlan/corewlan.pro | 2 +- src/plugins/bearer/generic/generic.pro | 2 +- src/plugins/bearer/icd/icd.pro | 2 +- src/plugins/bearer/nativewifi/nativewifi.pro | 2 +- .../bearer/networkmanager/networkmanager.pro | 2 +- src/plugins/bearer/nla/nla.pro | 2 +- src/plugins/bearer/symbian/symbian.pri | 2 +- src/plugins/codecs/cn/cn.pro | 2 +- src/plugins/codecs/jp/jp.pro | 2 +- src/plugins/codecs/kr/kr.pro | 2 +- src/plugins/codecs/tw/tw.pro | 2 +- src/plugins/decorations/default/default.pro | 2 +- src/plugins/decorations/styled/styled.pro | 2 +- src/plugins/decorations/windows/windows.pro | 2 +- src/plugins/generic/linuxinput/linuxinput.pro | 2 +- src/plugins/generic/tslib/tslib.pro | 2 +- src/plugins/gfxdrivers/ahi/ahi.pro | 2 +- src/plugins/gfxdrivers/directfb/directfb.pro | 2 +- src/plugins/gfxdrivers/eglnullws/eglnullws.pro | 2 +- src/plugins/gfxdrivers/linuxfb/linuxfb.pro | 2 +- src/plugins/gfxdrivers/qvfb/qvfb.pro | 2 +- src/plugins/gfxdrivers/transformed/transformed.pro | 2 +- src/plugins/gfxdrivers/vnc/vnc.pro | 2 +- src/plugins/graphicssystems/meego/meego.pro | 2 +- src/plugins/graphicssystems/opengl/opengl.pro | 2 +- src/plugins/graphicssystems/openvg/openvg.pro | 2 +- src/plugins/graphicssystems/shivavg/shivavg.pro | 2 +- src/plugins/graphicssystems/trace/trace.pro | 2 +- src/plugins/imageformats/gif/gif.pro | 2 +- src/plugins/imageformats/ico/ico.pro | 2 +- src/plugins/imageformats/jpeg/jpeg.pro | 2 +- src/plugins/imageformats/mng/mng.pro | 2 +- src/plugins/imageformats/tiff/tiff.pro | 2 +- src/plugins/inputmethods/imsw-multi/imsw-multi.pro | 2 +- src/plugins/kbddrivers/linuxinput/linuxinput.pro | 2 +- src/plugins/mousedrivers/linuxtp/linuxtp.pro | 2 +- src/plugins/mousedrivers/pc/pc.pro | 2 +- src/plugins/mousedrivers/tslib/tslib.pro | 2 +- src/plugins/platforms/cocoa/cocoa.pro | 2 +- src/plugins/platforms/directfb/directfb.pro | 2 +- src/plugins/platforms/externalplugin.pri | 2 +- src/plugins/platforms/fb_base/fb_base.pro | 2 +- src/plugins/platforms/linuxfb/linuxfb.pro | 2 +- src/plugins/platforms/minimal/minimal.pro | 2 +- src/plugins/platforms/openkode/openkode.pro | 2 +- src/plugins/platforms/openvglite/openvglite.pro | 2 +- src/plugins/platforms/qvfb/qvfb.pro | 2 +- src/plugins/platforms/uikit/uikit.pro | 2 +- src/plugins/platforms/vnc/vnc.pro | 2 +- src/plugins/platforms/wayland/wayland.pro | 2 +- src/plugins/platforms/xcb/xcb.pro | 2 +- src/plugins/platforms/xlib/xlib.pro | 2 +- src/plugins/qpluginbase.pri | 42 +--------------------- src/plugins/s60/s60pluginbase.pri | 2 +- src/plugins/sqldrivers/qsqldriverbase.pri | 2 +- 57 files changed, 57 insertions(+), 97 deletions(-) (limited to 'src') diff --git a/src/plugins/accessible/widgets/widgets.pro b/src/plugins/accessible/widgets/widgets.pro index 8329bce963..00d99f94e7 100644 --- a/src/plugins/accessible/widgets/widgets.pro +++ b/src/plugins/accessible/widgets/widgets.pro @@ -1,5 +1,5 @@ TARGET = qtaccessiblewidgets -include(../../qpluginbase.pri) +load(qt_plugin) include (../qaccessiblebase.pri) QT += core-private gui-private diff --git a/src/plugins/bearer/connman/connman.pro b/src/plugins/bearer/connman/connman.pro index f57a0c930b..25243f8e0a 100644 --- a/src/plugins/bearer/connman/connman.pro +++ b/src/plugins/bearer/connman/connman.pro @@ -1,5 +1,5 @@ TARGET = qconnmanbearer -include(../../qpluginbase.pri) +load(qt_plugin) QT = core network-private dbus diff --git a/src/plugins/bearer/corewlan/corewlan.pro b/src/plugins/bearer/corewlan/corewlan.pro index adc1625c3d..0d11b1e9d3 100644 --- a/src/plugins/bearer/corewlan/corewlan.pro +++ b/src/plugins/bearer/corewlan/corewlan.pro @@ -1,5 +1,5 @@ TARGET = qcorewlanbearer -include(../../qpluginbase.pri) +load(qt_plugin) QT = core-private network-private LIBS += -framework Foundation -framework SystemConfiguration diff --git a/src/plugins/bearer/generic/generic.pro b/src/plugins/bearer/generic/generic.pro index 94fefaf6c2..4f86c2a38c 100644 --- a/src/plugins/bearer/generic/generic.pro +++ b/src/plugins/bearer/generic/generic.pro @@ -1,5 +1,5 @@ TARGET = qgenericbearer -include(../../qpluginbase.pri) +load(qt_plugin) QT = core-private network-private diff --git a/src/plugins/bearer/icd/icd.pro b/src/plugins/bearer/icd/icd.pro index 4737045ae7..3f5753409d 100644 --- a/src/plugins/bearer/icd/icd.pro +++ b/src/plugins/bearer/icd/icd.pro @@ -1,5 +1,5 @@ TARGET = qicdbearer -include(../../qpluginbase.pri) +load(qt_plugin) QT = core network dbus diff --git a/src/plugins/bearer/nativewifi/nativewifi.pro b/src/plugins/bearer/nativewifi/nativewifi.pro index ba02f37d23..ec86cc0b93 100644 --- a/src/plugins/bearer/nativewifi/nativewifi.pro +++ b/src/plugins/bearer/nativewifi/nativewifi.pro @@ -1,5 +1,5 @@ TARGET = qnativewifibearer -include(../../qpluginbase.pri) +load(qt_plugin) QT = core-private network-private diff --git a/src/plugins/bearer/networkmanager/networkmanager.pro b/src/plugins/bearer/networkmanager/networkmanager.pro index a9de1561fd..262f60a69c 100644 --- a/src/plugins/bearer/networkmanager/networkmanager.pro +++ b/src/plugins/bearer/networkmanager/networkmanager.pro @@ -1,5 +1,5 @@ TARGET = qnmbearer -include(../../qpluginbase.pri) +load(qt_plugin) QT = core network-private dbus diff --git a/src/plugins/bearer/nla/nla.pro b/src/plugins/bearer/nla/nla.pro index ecf958f559..76da098dbf 100644 --- a/src/plugins/bearer/nla/nla.pro +++ b/src/plugins/bearer/nla/nla.pro @@ -1,5 +1,5 @@ TARGET = qnlabearer -include(../../qpluginbase.pri) +load(qt_plugin) QT = core network diff --git a/src/plugins/bearer/symbian/symbian.pri b/src/plugins/bearer/symbian/symbian.pri index 5d2ae1a5cd..c4b3c6d09d 100644 --- a/src/plugins/bearer/symbian/symbian.pri +++ b/src/plugins/bearer/symbian/symbian.pri @@ -1,5 +1,5 @@ TARGET = qsymbianbearer -include(../../qpluginbase.pri) +load(qt_plugin) QT = core network diff --git a/src/plugins/codecs/cn/cn.pro b/src/plugins/codecs/cn/cn.pro index 51a2f41372..fc2e94b5a6 100644 --- a/src/plugins/codecs/cn/cn.pro +++ b/src/plugins/codecs/cn/cn.pro @@ -1,5 +1,5 @@ TARGET = qcncodecs -include(../../qpluginbase.pri) +load(qt_plugin) CONFIG += warn_on DESTDIR = $$QT.core.plugins/codecs diff --git a/src/plugins/codecs/jp/jp.pro b/src/plugins/codecs/jp/jp.pro index e6b7a4bb7f..834ca31ad6 100644 --- a/src/plugins/codecs/jp/jp.pro +++ b/src/plugins/codecs/jp/jp.pro @@ -1,5 +1,5 @@ TARGET = qjpcodecs -include(../../qpluginbase.pri) +load(qt_plugin) CONFIG += warn_on DESTDIR = $$QT.core.plugins/codecs diff --git a/src/plugins/codecs/kr/kr.pro b/src/plugins/codecs/kr/kr.pro index 14c162c6e8..f5aea6554f 100644 --- a/src/plugins/codecs/kr/kr.pro +++ b/src/plugins/codecs/kr/kr.pro @@ -1,5 +1,5 @@ TARGET = qkrcodecs -include(../../qpluginbase.pri) +load(qt_plugin) CONFIG += warn_on DESTDIR = $$QT.core.plugins/codecs diff --git a/src/plugins/codecs/tw/tw.pro b/src/plugins/codecs/tw/tw.pro index b0d5a2b68a..f76cba4dbc 100644 --- a/src/plugins/codecs/tw/tw.pro +++ b/src/plugins/codecs/tw/tw.pro @@ -1,5 +1,5 @@ TARGET = qtwcodecs -include(../../qpluginbase.pri) +load(qt_plugin) CONFIG += warn_on DESTDIR = $$QT.core.plugins/codecs diff --git a/src/plugins/decorations/default/default.pro b/src/plugins/decorations/default/default.pro index a30899a62b..c323d10930 100644 --- a/src/plugins/decorations/default/default.pro +++ b/src/plugins/decorations/default/default.pro @@ -1,5 +1,5 @@ TARGET = qdecorationdefault -include(../../qpluginbase.pri) +load(qt_plugin) HEADERS = $$QT_SOURCE_TREE/src/gui/embedded/qdecorationdefault_qws.h SOURCES = main.cpp \ diff --git a/src/plugins/decorations/styled/styled.pro b/src/plugins/decorations/styled/styled.pro index 151ef88178..c5329aea29 100644 --- a/src/plugins/decorations/styled/styled.pro +++ b/src/plugins/decorations/styled/styled.pro @@ -1,5 +1,5 @@ TARGET = qdecorationstyled -include(../../qpluginbase.pri) +load(qt_plugin) DESTDIR = $$QT.gui.plugins/decorations target.path += $$[QT_INSTALL_PLUGINS]/decorations diff --git a/src/plugins/decorations/windows/windows.pro b/src/plugins/decorations/windows/windows.pro index 7f788a3d7e..f27adb908b 100644 --- a/src/plugins/decorations/windows/windows.pro +++ b/src/plugins/decorations/windows/windows.pro @@ -1,5 +1,5 @@ TARGET = qdecorationwindows -include(../../qpluginbase.pri) +load(qt_plugin) HEADERS = $$QT_SOURCE_TREE/src/gui/embedded/qdecorationwindows_qws.h SOURCES = main.cpp \ diff --git a/src/plugins/generic/linuxinput/linuxinput.pro b/src/plugins/generic/linuxinput/linuxinput.pro index d4dc4bbbcb..a771ee9734 100644 --- a/src/plugins/generic/linuxinput/linuxinput.pro +++ b/src/plugins/generic/linuxinput/linuxinput.pro @@ -1,5 +1,5 @@ TARGET = qlinuxinputplugin -include(../../qpluginbase.pri) +load(qt_plugin) DESTDIR = $$QT.gui.plugins/generic target.path = $$[QT_INSTALL_PLUGINS]/generic diff --git a/src/plugins/generic/tslib/tslib.pro b/src/plugins/generic/tslib/tslib.pro index 485152181c..d9726b6d3a 100644 --- a/src/plugins/generic/tslib/tslib.pro +++ b/src/plugins/generic/tslib/tslib.pro @@ -1,5 +1,5 @@ TARGET = qlinuxinputplugin -include(../../qpluginbase.pri) +load(qt_plugin) DESTDIR = $$QT.gui.plugins/generic target.path = $$[QT_INSTALL_PLUGINS]/generic diff --git a/src/plugins/gfxdrivers/ahi/ahi.pro b/src/plugins/gfxdrivers/ahi/ahi.pro index 3abe2a76cc..fd078421f9 100644 --- a/src/plugins/gfxdrivers/ahi/ahi.pro +++ b/src/plugins/gfxdrivers/ahi/ahi.pro @@ -1,5 +1,5 @@ TARGET = qahiscreen -include(../../qpluginbase.pri) +load(qt_plugin) DESTDIR = $$QT.gui.plugins/gfxdrivers diff --git a/src/plugins/gfxdrivers/directfb/directfb.pro b/src/plugins/gfxdrivers/directfb/directfb.pro index 54d11ca159..6fb2a0f9aa 100644 --- a/src/plugins/gfxdrivers/directfb/directfb.pro +++ b/src/plugins/gfxdrivers/directfb/directfb.pro @@ -1,5 +1,5 @@ TARGET = qdirectfbscreen -include(../../qpluginbase.pri) +load(qt_plugin) include($$QT_SOURCE_TREE/src/gui/embedded/directfb.pri) DESTDIR = $$QT.gui.plugins/gfxdrivers diff --git a/src/plugins/gfxdrivers/eglnullws/eglnullws.pro b/src/plugins/gfxdrivers/eglnullws/eglnullws.pro index 30cebab41a..cb65c2b627 100644 --- a/src/plugins/gfxdrivers/eglnullws/eglnullws.pro +++ b/src/plugins/gfxdrivers/eglnullws/eglnullws.pro @@ -1,5 +1,5 @@ TARGET = qeglnullws -include(../../qpluginbase.pri) +load(qt_plugin) CONFIG += warn_on QT += opengl diff --git a/src/plugins/gfxdrivers/linuxfb/linuxfb.pro b/src/plugins/gfxdrivers/linuxfb/linuxfb.pro index c1cdc0eda7..2bbe910e63 100644 --- a/src/plugins/gfxdrivers/linuxfb/linuxfb.pro +++ b/src/plugins/gfxdrivers/linuxfb/linuxfb.pro @@ -1,5 +1,5 @@ TARGET = qscreenlinuxfb -include(../../qpluginbase.pri) +load(qt_plugin) DESTDIR = $$QT.gui.plugins/gfxdrivers diff --git a/src/plugins/gfxdrivers/qvfb/qvfb.pro b/src/plugins/gfxdrivers/qvfb/qvfb.pro index e45319db87..99376be81c 100644 --- a/src/plugins/gfxdrivers/qvfb/qvfb.pro +++ b/src/plugins/gfxdrivers/qvfb/qvfb.pro @@ -1,5 +1,5 @@ TARGET = qscreenvfb -include(../../qpluginbase.pri) +load(qt_plugin) DEFINES += QT_QWS_QVFB QT_QWS_MOUSE_QVFB QT_QWS_KBD_QVFB diff --git a/src/plugins/gfxdrivers/transformed/transformed.pro b/src/plugins/gfxdrivers/transformed/transformed.pro index f6e07704b3..f97713fc38 100644 --- a/src/plugins/gfxdrivers/transformed/transformed.pro +++ b/src/plugins/gfxdrivers/transformed/transformed.pro @@ -1,5 +1,5 @@ TARGET = qgfxtransformed -include(../../qpluginbase.pri) +load(qt_plugin) DEFINES += QT_QWS_TRANSFORMED diff --git a/src/plugins/gfxdrivers/vnc/vnc.pro b/src/plugins/gfxdrivers/vnc/vnc.pro index 48bad8c6e3..95e2ba7cf8 100644 --- a/src/plugins/gfxdrivers/vnc/vnc.pro +++ b/src/plugins/gfxdrivers/vnc/vnc.pro @@ -1,5 +1,5 @@ TARGET = qgfxvnc -include(../../qpluginbase.pri) +load(qt_plugin) DEFINES += QT_QWS_VNC diff --git a/src/plugins/graphicssystems/meego/meego.pro b/src/plugins/graphicssystems/meego/meego.pro index c497ba2eb6..5c650eef2e 100644 --- a/src/plugins/graphicssystems/meego/meego.pro +++ b/src/plugins/graphicssystems/meego/meego.pro @@ -1,5 +1,5 @@ TARGET = qmeegographicssystem -include(../../qpluginbase.pri) +load(qt_plugin) QT += gui opengl diff --git a/src/plugins/graphicssystems/opengl/opengl.pro b/src/plugins/graphicssystems/opengl/opengl.pro index 30c88271b6..fd3542ecf0 100644 --- a/src/plugins/graphicssystems/opengl/opengl.pro +++ b/src/plugins/graphicssystems/opengl/opengl.pro @@ -1,5 +1,5 @@ TARGET = qglgraphicssystem -include(../../qpluginbase.pri) +load(qt_plugin) QT += core-private gui-private opengl-private diff --git a/src/plugins/graphicssystems/openvg/openvg.pro b/src/plugins/graphicssystems/openvg/openvg.pro index 6f8b13907a..6a737790a2 100644 --- a/src/plugins/graphicssystems/openvg/openvg.pro +++ b/src/plugins/graphicssystems/openvg/openvg.pro @@ -1,5 +1,5 @@ TARGET = qvggraphicssystem -include(../../qpluginbase.pri) +load(qt_plugin) QT += openvg diff --git a/src/plugins/graphicssystems/shivavg/shivavg.pro b/src/plugins/graphicssystems/shivavg/shivavg.pro index 6bf9d7a975..1d934cd685 100644 --- a/src/plugins/graphicssystems/shivavg/shivavg.pro +++ b/src/plugins/graphicssystems/shivavg/shivavg.pro @@ -1,5 +1,5 @@ TARGET = qshivavggraphicssystem -include(../../qpluginbase.pri) +load(qt_plugin) QT += openvg diff --git a/src/plugins/graphicssystems/trace/trace.pro b/src/plugins/graphicssystems/trace/trace.pro index b31beb35f8..f44bb3211e 100644 --- a/src/plugins/graphicssystems/trace/trace.pro +++ b/src/plugins/graphicssystems/trace/trace.pro @@ -1,5 +1,5 @@ TARGET = qtracegraphicssystem -include(../../qpluginbase.pri) +load(qt_plugin) QT += core-private gui-private network diff --git a/src/plugins/imageformats/gif/gif.pro b/src/plugins/imageformats/gif/gif.pro index 4b72cae6e4..b8d260e43c 100644 --- a/src/plugins/imageformats/gif/gif.pro +++ b/src/plugins/imageformats/gif/gif.pro @@ -1,5 +1,5 @@ TARGET = qgif -include(../../qpluginbase.pri) +load(qt_plugin) include(../../../gui/image/qgifhandler.pri) SOURCES += $$PWD/main.cpp diff --git a/src/plugins/imageformats/ico/ico.pro b/src/plugins/imageformats/ico/ico.pro index cef92cedc8..e0109c6a32 100644 --- a/src/plugins/imageformats/ico/ico.pro +++ b/src/plugins/imageformats/ico/ico.pro @@ -1,5 +1,5 @@ TARGET = qico -include(../../qpluginbase.pri) +load(qt_plugin) QTDIR_build:REQUIRES = "!contains(QT_CONFIG, no-ico)" diff --git a/src/plugins/imageformats/jpeg/jpeg.pro b/src/plugins/imageformats/jpeg/jpeg.pro index 1e6c24d061..aa489729a1 100644 --- a/src/plugins/imageformats/jpeg/jpeg.pro +++ b/src/plugins/imageformats/jpeg/jpeg.pro @@ -1,5 +1,5 @@ TARGET = qjpeg -include(../../qpluginbase.pri) +load(qt_plugin) QT += core-private diff --git a/src/plugins/imageformats/mng/mng.pro b/src/plugins/imageformats/mng/mng.pro index 01dc418c1b..72dc506cf9 100644 --- a/src/plugins/imageformats/mng/mng.pro +++ b/src/plugins/imageformats/mng/mng.pro @@ -1,5 +1,5 @@ TARGET = qmng -include(../../qpluginbase.pri) +load(qt_plugin) QTDIR_build:REQUIRES = "!contains(QT_CONFIG, no-mng)" diff --git a/src/plugins/imageformats/tiff/tiff.pro b/src/plugins/imageformats/tiff/tiff.pro index e4eb21b1e7..012c49ecf1 100644 --- a/src/plugins/imageformats/tiff/tiff.pro +++ b/src/plugins/imageformats/tiff/tiff.pro @@ -1,5 +1,5 @@ TARGET = qtiff -include(../../qpluginbase.pri) +load(qt_plugin) QTDIR_build:REQUIRES = "!contains(QT_CONFIG, no-tiff)" diff --git a/src/plugins/inputmethods/imsw-multi/imsw-multi.pro b/src/plugins/inputmethods/imsw-multi/imsw-multi.pro index 5d0535f3ac..4c7b9b96d8 100644 --- a/src/plugins/inputmethods/imsw-multi/imsw-multi.pro +++ b/src/plugins/inputmethods/imsw-multi/imsw-multi.pro @@ -1,5 +1,5 @@ TARGET = qimsw-multi -include(../../qpluginbase.pri) +load(qt_plugin) CONFIG += warn_on DESTDIR = $$QT.gui.plugins/inputmethods diff --git a/src/plugins/kbddrivers/linuxinput/linuxinput.pro b/src/plugins/kbddrivers/linuxinput/linuxinput.pro index c0af91c7f0..8eaa786ce0 100644 --- a/src/plugins/kbddrivers/linuxinput/linuxinput.pro +++ b/src/plugins/kbddrivers/linuxinput/linuxinput.pro @@ -1,5 +1,5 @@ TARGET = qlinuxinputkbddriver -include(../../qpluginbase.pri) +load(qt_plugin) DESTDIR = $$QT.gui.plugins/kbddrivers target.path = $$[QT_INSTALL_PLUGINS]/kbddrivers diff --git a/src/plugins/mousedrivers/linuxtp/linuxtp.pro b/src/plugins/mousedrivers/linuxtp/linuxtp.pro index b8e26b4483..e5d274a0b7 100644 --- a/src/plugins/mousedrivers/linuxtp/linuxtp.pro +++ b/src/plugins/mousedrivers/linuxtp/linuxtp.pro @@ -1,5 +1,5 @@ TARGET = qlinuxtpmousedriver -include(../../qpluginbase.pri) +load(qt_plugin) DESTDIR = $$QT.gui.plugins/mousedrivers target.path = $$[QT_INSTALL_PLUGINS]/mousedrivers diff --git a/src/plugins/mousedrivers/pc/pc.pro b/src/plugins/mousedrivers/pc/pc.pro index d38e3fe5d1..04d7b0f06f 100644 --- a/src/plugins/mousedrivers/pc/pc.pro +++ b/src/plugins/mousedrivers/pc/pc.pro @@ -1,5 +1,5 @@ TARGET = qpcmousedriver -include(../../qpluginbase.pri) +load(qt_plugin) DESTDIR = $$QT.gui.plugins/mousedrivers target.path = $$[QT_INSTALL_PLUGINS]/mousedrivers diff --git a/src/plugins/mousedrivers/tslib/tslib.pro b/src/plugins/mousedrivers/tslib/tslib.pro index e2fa013fdb..552a2e7173 100644 --- a/src/plugins/mousedrivers/tslib/tslib.pro +++ b/src/plugins/mousedrivers/tslib/tslib.pro @@ -1,5 +1,5 @@ TARGET = qtslibmousedriver -include(../../qpluginbase.pri) +load(qt_plugin) DESTDIR = $$QT.gui.plugins/mousedrivers diff --git a/src/plugins/platforms/cocoa/cocoa.pro b/src/plugins/platforms/cocoa/cocoa.pro index 705e60439e..bfa147f948 100644 --- a/src/plugins/platforms/cocoa/cocoa.pro +++ b/src/plugins/platforms/cocoa/cocoa.pro @@ -1,5 +1,5 @@ TARGET = qcocoa -include(../../qpluginbase.pri) +load(qt_plugin) DESTDIR = $$QT.gui.plugins/platforms OBJECTIVE_SOURCES = main.mm \ diff --git a/src/plugins/platforms/directfb/directfb.pro b/src/plugins/platforms/directfb/directfb.pro index 4a637463ef..f830177dcb 100644 --- a/src/plugins/platforms/directfb/directfb.pro +++ b/src/plugins/platforms/directfb/directfb.pro @@ -1,5 +1,5 @@ TARGET = qdirectfb -include(../../qpluginbase.pri) +load(qt_plugin) DESTDIR = $$QT.gui.plugins/platforms isEmpty(DIRECTFB_LIBS) { diff --git a/src/plugins/platforms/externalplugin.pri b/src/plugins/platforms/externalplugin.pri index 54da4d957c..9b00acb4e9 100644 --- a/src/plugins/platforms/externalplugin.pri +++ b/src/plugins/platforms/externalplugin.pri @@ -26,4 +26,4 @@ QT_SOURCE_TREE = $$fromfile($$(QTDIR)/.qmake.cache,QT_SOURCE_TREE) QT_BUILD_TREE = $$fromfile($$(QTDIR)/.qmake.cache,QT_BUILD_TREE) -include($$QT_SOURCE_TREE/src/plugins/qpluginbase.pri) +load(qt_plugin) diff --git a/src/plugins/platforms/fb_base/fb_base.pro b/src/plugins/platforms/fb_base/fb_base.pro index 4445516cc7..4ebd53b407 100644 --- a/src/plugins/platforms/fb_base/fb_base.pro +++ b/src/plugins/platforms/fb_base/fb_base.pro @@ -6,7 +6,7 @@ #QT -= core gui TARGET = fb_base -#include(../../qpluginbase.pri) +#load(qt_plugin) DESTDIR = $$QT.gui.plugins/graphicssystems diff --git a/src/plugins/platforms/linuxfb/linuxfb.pro b/src/plugins/platforms/linuxfb/linuxfb.pro index 4e4fe6ff4b..ce6814ecc1 100644 --- a/src/plugins/platforms/linuxfb/linuxfb.pro +++ b/src/plugins/platforms/linuxfb/linuxfb.pro @@ -1,5 +1,5 @@ TARGET = qlinuxfbgraphicssystem -include(../../qpluginbase.pri) +load(qt_plugin) DESTDIR = $$QT.gui.plugins/platforms diff --git a/src/plugins/platforms/minimal/minimal.pro b/src/plugins/platforms/minimal/minimal.pro index d1088e3233..d51b6b2ed0 100644 --- a/src/plugins/platforms/minimal/minimal.pro +++ b/src/plugins/platforms/minimal/minimal.pro @@ -1,5 +1,5 @@ TARGET = qminimal -include(../../qpluginbase.pri) +load(qt_plugin) QT = core-private gui-private DESTDIR = $$QT.gui.plugins/platforms diff --git a/src/plugins/platforms/openkode/openkode.pro b/src/plugins/platforms/openkode/openkode.pro index a6e7d7665a..ad17a3bc78 100644 --- a/src/plugins/platforms/openkode/openkode.pro +++ b/src/plugins/platforms/openkode/openkode.pro @@ -1,5 +1,5 @@ TARGET = qopenkodeintegration -include(../../qpluginbase.pri) +load(qt_plugin) QT += opengl diff --git a/src/plugins/platforms/openvglite/openvglite.pro b/src/plugins/platforms/openvglite/openvglite.pro index 11e867d998..bb7efe9bf3 100644 --- a/src/plugins/platforms/openvglite/openvglite.pro +++ b/src/plugins/platforms/openvglite/openvglite.pro @@ -1,5 +1,5 @@ TARGET = qvglitegraphicssystem -include(../../qpluginbase.pri) +load(qt_plugin) QT += openvg diff --git a/src/plugins/platforms/qvfb/qvfb.pro b/src/plugins/platforms/qvfb/qvfb.pro index bc17525104..5db8533264 100644 --- a/src/plugins/platforms/qvfb/qvfb.pro +++ b/src/plugins/platforms/qvfb/qvfb.pro @@ -1,5 +1,5 @@ TARGET = qvfbintegration -include(../../qpluginbase.pri) +load(qt_plugin) DESTDIR = $$QT.gui.plugins/platforms diff --git a/src/plugins/platforms/uikit/uikit.pro b/src/plugins/platforms/uikit/uikit.pro index 6f5947f2c0..45a48dc92a 100644 --- a/src/plugins/platforms/uikit/uikit.pro +++ b/src/plugins/platforms/uikit/uikit.pro @@ -1,5 +1,5 @@ TARGET = quikit -include(../../qpluginbase.pri) +load(qt_plugin) QTDIR_build:DESTDIR = $$QT_BUILD_TREE/plugins/platforms QT += opengl diff --git a/src/plugins/platforms/vnc/vnc.pro b/src/plugins/platforms/vnc/vnc.pro index a7b8ca540a..85bffb0637 100644 --- a/src/plugins/platforms/vnc/vnc.pro +++ b/src/plugins/platforms/vnc/vnc.pro @@ -1,5 +1,5 @@ TARGET = qvncgraphicssystem -include(../../qpluginbase.pri) +load(qt_plugin) QT += network diff --git a/src/plugins/platforms/wayland/wayland.pro b/src/plugins/platforms/wayland/wayland.pro index 3f5a69cf75..857a2918ce 100644 --- a/src/plugins/platforms/wayland/wayland.pro +++ b/src/plugins/platforms/wayland/wayland.pro @@ -1,5 +1,5 @@ TARGET = qwayland -include(../../qpluginbase.pri) +load(qt_plugin) QT+=gui-private core-private opengl-private diff --git a/src/plugins/platforms/xcb/xcb.pro b/src/plugins/platforms/xcb/xcb.pro index 139f5c9591..27d10b6756 100644 --- a/src/plugins/platforms/xcb/xcb.pro +++ b/src/plugins/platforms/xcb/xcb.pro @@ -1,6 +1,6 @@ TARGET = xcb -include(../../qpluginbase.pri) +load(qt_plugin) QTDIR_build:DESTDIR = $$QT_BUILD_TREE/plugins/platforms QT += core-private gui-private diff --git a/src/plugins/platforms/xlib/xlib.pro b/src/plugins/platforms/xlib/xlib.pro index 902d379ee2..2cba5513d5 100644 --- a/src/plugins/platforms/xlib/xlib.pro +++ b/src/plugins/platforms/xlib/xlib.pro @@ -1,6 +1,6 @@ TARGET = qxlib -include(../../qpluginbase.pri) +load(qt_plugin) DESTDIR = $$QT.gui.plugins/platforms QT += core-private gui-private opengl-private diff --git a/src/plugins/qpluginbase.pri b/src/plugins/qpluginbase.pri index 2dd96bf7f2..b22a527761 100644 --- a/src/plugins/qpluginbase.pri +++ b/src/plugins/qpluginbase.pri @@ -1,41 +1 @@ -TEMPLATE = lib -isEmpty(QT_MAJOR_VERSION) { - VERSION=5.0.0 -} else { - VERSION=$${QT_MAJOR_VERSION}.$${QT_MINOR_VERSION}.$${QT_PATCH_VERSION} -} -CONFIG += qt plugin - -win32|mac:!wince*:!win32-msvc:!macx-xcode:CONFIG += debug_and_release -TARGET = $$qtLibraryTarget($$TARGET) -contains(QT_CONFIG, reduce_exports):CONFIG += hide_symbols - -include(../qt_targets.pri) - -wince*:LIBS += $$QMAKE_LIBS_GUI - -symbian: { - TARGET.EPOCALLOWDLLDATA=1 - TARGET.CAPABILITY = All -Tcb - TARGET = $${TARGET}$${QT_LIBINFIX} - load(armcc_warnings) - - # Make partial upgrade SIS file for Qt plugin dll's - # Partial upgrade SIS file - vendorinfo = \ - "; Localised Vendor name" \ - "%{\"Nokia\"}" \ - " " \ - "; Unique Vendor name" \ - ":\"Nokia, Qt\"" \ - " " - isEmpty(QT_LIBINFIX): PARTIAL_UPGRADE_UID = 0x2001E61C - else: PARTIAL_UPGRADE_UID = 0xE001E61C - - pu_header = "; Partial upgrade package for testing $${TARGET} changes without reinstalling everything" \ - "$${LITERAL_HASH}{\"$${TARGET}\"}, ($$PARTIAL_UPGRADE_UID), $${QT_MAJOR_VERSION},$${QT_MINOR_VERSION},$${QT_PATCH_VERSION}, TYPE=PU" - partial_upgrade.pkg_prerules = pu_header vendorinfo - partial_upgrade.files = $$QMAKE_LIBDIR_QT/$${TARGET}.dll - partial_upgrade.path = c:/sys/bin - DEPLOYMENT += partial_upgrade -} +load(qt_plugin) diff --git a/src/plugins/s60/s60pluginbase.pri b/src/plugins/s60/s60pluginbase.pri index 0cde7d2277..41d4b27db2 100644 --- a/src/plugins/s60/s60pluginbase.pri +++ b/src/plugins/s60/s60pluginbase.pri @@ -1,6 +1,6 @@ # Note: These version based 'plugins' are not an actual Qt plugins, # they are just regular runtime loaded libraries -include(../qpluginbase.pri) +load(qt_plugin) CONFIG -= plugin diff --git a/src/plugins/sqldrivers/qsqldriverbase.pri b/src/plugins/sqldrivers/qsqldriverbase.pri index 7399c659da..45638fcd4f 100644 --- a/src/plugins/sqldrivers/qsqldriverbase.pri +++ b/src/plugins/sqldrivers/qsqldriverbase.pri @@ -1,4 +1,4 @@ -include(../qpluginbase.pri) +load(qt_plugin) QT = core sql-private DESTDIR = $$QT.sql.plugins/sqldrivers -- cgit v1.2.3 From 15871d606a0a85cfcd2b68b95c0891165f61e402 Mon Sep 17 00:00:00 2001 From: Bernhard Rosenkraenzer Date: Mon, 30 May 2011 11:30:42 +0159 Subject: Fix build in C++0x mode This fixes compiler errors (gcc 4.6 -std=gnu++0x on x86_64 Linux): embedded/qwslock.cpp: In function `bool forceLock(int, int, int)': embedded/qwslock.cpp:121:39: error: narrowing conversion of `semNum' from `int' to `short unsigned int' inside { } [-fpermissive] (and equivalent errors in other lines/files) See http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2011/n3242.pdf Section 8.5.4/6 Change-Id: I2cbac5482b87f33287a416af5a5c9bde621720bc Reviewed-By: Olivier Goffart Merge-Request: 1240 Reviewed-on: http://codereview.qt.nokia.com/275 Reviewed-by: Qt Sanity Bot Reviewed-by: Olivier Goffart --- src/gui/embedded/qmousepc_qws.cpp | 2 +- src/gui/embedded/qwslock.cpp | 10 +++++----- src/gui/text/qfontdatabase.cpp | 4 ++-- 3 files changed, 8 insertions(+), 8 deletions(-) (limited to 'src') diff --git a/src/gui/embedded/qmousepc_qws.cpp b/src/gui/embedded/qmousepc_qws.cpp index 5d3b182d0a..c22cab91f2 100644 --- a/src/gui/embedded/qmousepc_qws.cpp +++ b/src/gui/embedded/qmousepc_qws.cpp @@ -261,7 +261,7 @@ public: usleep(50000); QT_WRITE(fd,"@EeI!",5); usleep(10000); - static const char ibuf[] = { 246, 244 }; + static const unsigned char ibuf[] = { 246, 244 }; QT_WRITE(fd,ibuf,1); QT_WRITE(fd,ibuf+1,1); if (tcflush(fd,TCIOFLUSH) == -1) { diff --git a/src/gui/embedded/qwslock.cpp b/src/gui/embedded/qwslock.cpp index 0d65b61177..a64dc3d9c4 100644 --- a/src/gui/embedded/qwslock.cpp +++ b/src/gui/embedded/qwslock.cpp @@ -114,7 +114,7 @@ QWSLock::~QWSLock() QWSSignalHandler::instance()->removeSemaphore(semId); } -static bool forceLock(int semId, int semNum, int) +static bool forceLock(int semId, unsigned short semNum, int) { int ret; do { @@ -135,7 +135,7 @@ static bool forceLock(int semId, int semNum, int) return (ret != -1); } -static bool up(int semId, int semNum) +static bool up(int semId, unsigned short semNum) { int ret; do { @@ -148,7 +148,7 @@ static bool up(int semId, int semNum) return (ret != -1); } -static bool down(int semId, int semNum) +static bool down(int semId, unsigned short semNum) { int ret; do { @@ -161,7 +161,7 @@ static bool down(int semId, int semNum) return (ret != -1); } -static int getValue(int semId, int semNum) +static int getValue(int semId, unsigned short semNum) { int ret; do { @@ -210,7 +210,7 @@ void QWSLock::unlock(LockType type) return; } - const int semNum = type; + const unsigned short semNum = type; int ret; do { sembuf sops = {semNum, 1, 0}; diff --git a/src/gui/text/qfontdatabase.cpp b/src/gui/text/qfontdatabase.cpp index 7a8a9122f2..98186dfd9b 100644 --- a/src/gui/text/qfontdatabase.cpp +++ b/src/gui/text/qfontdatabase.cpp @@ -879,10 +879,10 @@ QStringList QFontDatabasePrivate::addTTFile(const QByteArray &file, const QByteA TT_OS2 *os2 = (TT_OS2 *)FT_Get_Sfnt_Table(face, ft_sfnt_os2); if (os2) { quint32 unicodeRange[4] = { - os2->ulUnicodeRange1, os2->ulUnicodeRange2, os2->ulUnicodeRange3, os2->ulUnicodeRange4 + static_cast(os2->ulUnicodeRange1), static_cast(os2->ulUnicodeRange2), static_cast(os2->ulUnicodeRange3), static_cast(os2->ulUnicodeRange4) }; quint32 codePageRange[2] = { - os2->ulCodePageRange1, os2->ulCodePageRange2 + static_cast(os2->ulCodePageRange1), static_cast(os2->ulCodePageRange2) }; writingSystems = qt_determine_writing_systems_from_truetype_bits(unicodeRange, codePageRange); -- cgit v1.2.3 From 3c7793acc0a5688e17ce2860c70fed7eae8690bb Mon Sep 17 00:00:00 2001 From: Andrew den Exter Date: Mon, 9 May 2011 14:04:08 +1000 Subject: Don't crash on an invalid replacementStart from an input method. Ensure the cursor position does not exceed the bounds of the current text. Change-Id: If38f7729372562324d11eadd1a976c0c6da91863 Task-number: QTBUG-19054 Reviewed-by: Martin Jones (cherry picked from commit 6fbfb1ab3f26ad672eb24f9b4a0ce1a8eea08298) Reviewed-on: http://codereview.qt.nokia.com/290 Reviewed-by: Qt Sanity Bot Reviewed-by: Andrew den Exter --- src/gui/widgets/qlinecontrol.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) (limited to 'src') diff --git a/src/gui/widgets/qlinecontrol.cpp b/src/gui/widgets/qlinecontrol.cpp index ee7d7fb126..bf36033c08 100644 --- a/src/gui/widgets/qlinecontrol.cpp +++ b/src/gui/widgets/qlinecontrol.cpp @@ -435,6 +435,8 @@ void QLineControl::processInputMethodEvent(QInputMethodEvent *event) c += event->commitString().length() - qMin(-event->replacementStart(), event->replacementLength()); m_cursor += event->replacementStart(); + if (m_cursor < 0) + m_cursor = 0; // insert commit string if (event->replacementLength()) { @@ -447,7 +449,7 @@ void QLineControl::processInputMethodEvent(QInputMethodEvent *event) cursorPositionChanged = true; } - m_cursor = qMin(c, m_text.length()); + m_cursor = qBound(0, c, m_text.length()); for (int i = 0; i < event->attributes().size(); ++i) { const QInputMethodEvent::Attribute &a = event->attributes().at(i); -- cgit v1.2.3 From 16bd22b1bce3add1827d6cfa47d2641e5d4c2d71 Mon Sep 17 00:00:00 2001 From: Andrew den Exter Date: Mon, 9 May 2011 13:57:34 +1000 Subject: Ensure the TextEdit cursor delegate is repositioned on mouse events. Update the micro focus when a mouse press changes the cursor position of a read only TextEdit. Change-Id: I11855037f7938b2cd23ac6ad165722b5289b4f46 Task-number: QTBUG-19109 Reviewed-by: Martin Jones Reviewed-on: http://codereview.qt.nokia.com/291 Reviewed-by: Qt Sanity Bot Reviewed-by: Andrew den Exter --- src/gui/text/qtextcontrol.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) (limited to 'src') diff --git a/src/gui/text/qtextcontrol.cpp b/src/gui/text/qtextcontrol.cpp index 347761a1ee..e1f42a5fb5 100644 --- a/src/gui/text/qtextcontrol.cpp +++ b/src/gui/text/qtextcontrol.cpp @@ -1579,8 +1579,10 @@ void QTextControlPrivate::mousePressEvent(QEvent *e, Qt::MouseButton button, con emit q->cursorPositionChanged(); _q_updateCurrentCharFormatAndSelection(); } else { - if (cursor.position() != oldCursorPos) + if (cursor.position() != oldCursorPos) { emit q->cursorPositionChanged(); + emit q->microFocusChanged(); + } selectionChanged(); } repaintOldAndNewSelection(oldSelection); -- cgit v1.2.3 From 50b77ef0b05de59c67c0cf82811d22ca02ef91b4 Mon Sep 17 00:00:00 2001 From: Andrew den Exter Date: Fri, 13 May 2011 13:49:20 +1000 Subject: Make TextEdit word selection more natural. QTextControl will only extend the selection to a word if the cursor is directly over it which prevents the selection being extended if the mouse is dragged up or down a to a shorter line of text making it difficult to select multiple lines of text. Just disable that limitation when the TextEdit word selection is enabled. Change-Id: I3b9d1575c0141db8441197d740de94a90eacc077 Task-number: QTBUG-19230 Reviewed-by: Martin Jones Reviewed-on: http://codereview.qt.nokia.com/292 Reviewed-by: Qt Sanity Bot Reviewed-by: Andrew den Exter --- src/gui/text/qtextcontrol.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src') diff --git a/src/gui/text/qtextcontrol.cpp b/src/gui/text/qtextcontrol.cpp index e1f42a5fb5..aacac0445c 100644 --- a/src/gui/text/qtextcontrol.cpp +++ b/src/gui/text/qtextcontrol.cpp @@ -677,7 +677,7 @@ void QTextControlPrivate::extendWordwiseSelection(int suggestedNewPosition, qrea const qreal wordEndX = line.cursorToX(curs.position() - blockPos) + blockCoordinates.x(); - if (mouseXPosition < wordStartX || mouseXPosition > wordEndX) + if (!wordSelectionEnabled && (mouseXPosition < wordStartX || mouseXPosition > wordEndX)) return; // keep the already selected word even when moving to the left -- cgit v1.2.3 From 7b6c3707dea3292b62cca02245a710f00db21427 Mon Sep 17 00:00:00 2001 From: Shane Kearns Date: Tue, 24 May 2011 14:05:48 +0100 Subject: sockets: limit buffer size of the internal sockets in proxy engines The application can normally control the amount of buffering of a socket or QNetworkReply by using the setReadBufferSize API. This allows the application to flow control the TCP connection, and avoids out of memory errors when the data being downloaded is received faster than the application can process it. However when using a proxy, the proxy socket engine has an internal socket which is used to communicate with the proxy server. It is not visible to the user, and does not have awareness of the buffer size of the external socket. To solve this, we limit the internal sockets' buffer size to 64k bytes. Under normal operation, the data is swiftly copied to the external socket where the buffer can grow (or not) based on the application's set value for read buffer size. Task-number: QT-4966 Reviewed-by: Markus Goetz (cherry picked from commit c4727a85eed57a4db698326a1bed4aa75b6e5284) Change-Id: I29e6628e38b79b41c4464ba8cb772a0f03717043 Reviewed-on: http://codereview.qt.nokia.com/153 Reviewed-by: Qt Sanity Bot Reviewed-by: Markus Goetz --- src/network/socket/qhttpsocketengine.cpp | 2 ++ src/network/socket/qsocks5socketengine.cpp | 2 ++ 2 files changed, 4 insertions(+) (limited to 'src') diff --git a/src/network/socket/qhttpsocketengine.cpp b/src/network/socket/qhttpsocketengine.cpp index 5f5db17072..5c672ec227 100644 --- a/src/network/socket/qhttpsocketengine.cpp +++ b/src/network/socket/qhttpsocketengine.cpp @@ -149,6 +149,8 @@ bool QHttpSocketEngine::connectInternal() // Handshake isn't done. If unconnected, start connecting. if (d->state == None && d->socket->state() == QAbstractSocket::UnconnectedState) { setState(QAbstractSocket::ConnectingState); + //limit buffer in internal socket, data is buffered in the external socket under application control + d->socket->setReadBufferSize(65536); d->socket->connectToHost(d->proxy.hostName(), d->proxy.port()); } diff --git a/src/network/socket/qsocks5socketengine.cpp b/src/network/socket/qsocks5socketengine.cpp index 575c0bc73e..ab757987f6 100644 --- a/src/network/socket/qsocks5socketengine.cpp +++ b/src/network/socket/qsocks5socketengine.cpp @@ -1126,6 +1126,8 @@ bool QSocks5SocketEngine::connectInternal() if (d->socks5State == QSocks5SocketEnginePrivate::Uninitialized && d->socketState != QAbstractSocket::ConnectingState) { setState(QAbstractSocket::ConnectingState); + //limit buffer in internal socket, data is buffered in the external socket under application control + d->data->controlSocket->setReadBufferSize(65536); d->data->controlSocket->connectToHost(d->proxyInfo.hostName(), d->proxyInfo.port()); return false; } -- cgit v1.2.3